diff options
Diffstat (limited to 'onionshare_gui/onionshare_gui.py')
-rw-r--r-- | onionshare_gui/onionshare_gui.py | 444 |
1 files changed, 359 insertions, 85 deletions
diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index 17839669..4639ea13 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -25,6 +25,7 @@ from onionshare.web import Web from .mode.share_mode import ShareMode from .mode.receive_mode import ReceiveMode +from .mode.website_mode import WebsiteMode from .tor_connection_dialog import TorConnectionDialog from .settings_dialog import SettingsDialog @@ -32,19 +33,24 @@ from .widgets import Alert from .update_checker import UpdateThread from .server_status import ServerStatus + class OnionShareGui(QtWidgets.QMainWindow): """ OnionShareGui is the main window for the GUI that contains all of the GUI elements. """ - MODE_SHARE = 'share' - MODE_RECEIVE = 'receive' - def __init__(self, common, onion, qtapp, app, filenames, config=False, local_only=False): + MODE_SHARE = "share" + MODE_RECEIVE = "receive" + MODE_WEBSITE = "website" + + def __init__( + self, common, onion, qtapp, app, filenames, config=False, local_only=False + ): super(OnionShareGui, self).__init__() self.common = common - self.common.log('OnionShareGui', '__init__') + self.common.log("OnionShareGui", "__init__") self.setMinimumWidth(820) self.setMinimumHeight(660) @@ -55,8 +61,10 @@ class OnionShareGui(QtWidgets.QMainWindow): self.mode = self.MODE_SHARE - self.setWindowTitle('OnionShare') - self.setWindowIcon(QtGui.QIcon(self.common.get_resource_path('images/logo.png'))) + self.setWindowTitle("OnionShare") + self.setWindowIcon( + QtGui.QIcon(self.common.get_resource_path("images/logo.png")) + ) # Load settings, if a custom config was passed in self.config = config @@ -69,50 +77,74 @@ class OnionShareGui(QtWidgets.QMainWindow): # System tray menu = QtWidgets.QMenu() - self.settings_action = menu.addAction(strings._('gui_settings_window_title')) + self.settings_action = menu.addAction(strings._("gui_settings_window_title")) self.settings_action.triggered.connect(self.open_settings) - self.help_action = menu.addAction(strings._('gui_settings_button_help')) + self.help_action = menu.addAction(strings._("gui_settings_button_help")) self.help_action.triggered.connect(lambda: SettingsDialog.help_clicked(self)) - exit_action = menu.addAction(strings._('systray_menu_exit')) + exit_action = menu.addAction(strings._("systray_menu_exit")) exit_action.triggered.connect(self.close) self.system_tray = QtWidgets.QSystemTrayIcon(self) # The convention is Mac systray icons are always grayscale - if self.common.platform == 'Darwin': - self.system_tray.setIcon(QtGui.QIcon(self.common.get_resource_path('images/logo_grayscale.png'))) + if self.common.platform == "Darwin": + self.system_tray.setIcon( + QtGui.QIcon(self.common.get_resource_path("images/logo_grayscale.png")) + ) else: - self.system_tray.setIcon(QtGui.QIcon(self.common.get_resource_path('images/logo.png'))) + self.system_tray.setIcon( + QtGui.QIcon(self.common.get_resource_path("images/logo.png")) + ) self.system_tray.setContextMenu(menu) self.system_tray.show() # Mode switcher, to switch between share files and receive files - self.share_mode_button = QtWidgets.QPushButton(strings._('gui_mode_share_button')); + self.share_mode_button = QtWidgets.QPushButton( + strings._("gui_mode_share_button") + ) self.share_mode_button.setFixedHeight(50) self.share_mode_button.clicked.connect(self.share_mode_clicked) - self.receive_mode_button = QtWidgets.QPushButton(strings._('gui_mode_receive_button')); + self.receive_mode_button = QtWidgets.QPushButton( + strings._("gui_mode_receive_button") + ) self.receive_mode_button.setFixedHeight(50) self.receive_mode_button.clicked.connect(self.receive_mode_clicked) + self.website_mode_button = QtWidgets.QPushButton( + strings._("gui_mode_website_button") + ) + self.website_mode_button.setFixedHeight(50) + self.website_mode_button.clicked.connect(self.website_mode_clicked) self.settings_button = QtWidgets.QPushButton() self.settings_button.setDefault(False) self.settings_button.setFixedWidth(40) self.settings_button.setFixedHeight(50) - self.settings_button.setIcon( QtGui.QIcon(self.common.get_resource_path('images/settings.png')) ) + self.settings_button.setIcon( + QtGui.QIcon(self.common.get_resource_path("images/settings.png")) + ) self.settings_button.clicked.connect(self.open_settings) - self.settings_button.setStyleSheet(self.common.css['settings_button']) - mode_switcher_layout = QtWidgets.QHBoxLayout(); + self.settings_button.setStyleSheet(self.common.css["settings_button"]) + mode_switcher_layout = QtWidgets.QHBoxLayout() mode_switcher_layout.setSpacing(0) mode_switcher_layout.addWidget(self.share_mode_button) mode_switcher_layout.addWidget(self.receive_mode_button) + mode_switcher_layout.addWidget(self.website_mode_button) mode_switcher_layout.addWidget(self.settings_button) # Server status indicator on the status bar - self.server_status_image_stopped = QtGui.QImage(self.common.get_resource_path('images/server_stopped.png')) - self.server_status_image_working = QtGui.QImage(self.common.get_resource_path('images/server_working.png')) - self.server_status_image_started = QtGui.QImage(self.common.get_resource_path('images/server_started.png')) + self.server_status_image_stopped = QtGui.QImage( + self.common.get_resource_path("images/server_stopped.png") + ) + self.server_status_image_working = QtGui.QImage( + self.common.get_resource_path("images/server_working.png") + ) + self.server_status_image_started = QtGui.QImage( + self.common.get_resource_path("images/server_started.png") + ) self.server_status_image_label = QtWidgets.QLabel() self.server_status_image_label.setFixedWidth(20) - self.server_status_label = QtWidgets.QLabel('') - self.server_status_label.setStyleSheet(self.common.css['server_status_indicator_label']) + self.server_status_label = QtWidgets.QLabel("") + self.server_status_label.setStyleSheet( + self.common.css["server_status_indicator_label"] + ) server_status_indicator_layout = QtWidgets.QHBoxLayout() server_status_indicator_layout.addWidget(self.server_status_image_label) server_status_indicator_layout.addWidget(self.server_status_label) @@ -122,17 +154,34 @@ class OnionShareGui(QtWidgets.QMainWindow): # Status bar self.status_bar = QtWidgets.QStatusBar() self.status_bar.setSizeGripEnabled(False) - self.status_bar.setStyleSheet(self.common.css['status_bar']) + self.status_bar.setStyleSheet(self.common.css["status_bar"]) self.status_bar.addPermanentWidget(self.server_status_indicator) self.setStatusBar(self.status_bar) # Share mode - self.share_mode = ShareMode(self.common, qtapp, app, self.status_bar, self.server_status_label, self.system_tray, filenames, self.local_only) + self.share_mode = ShareMode( + self.common, + qtapp, + app, + self.status_bar, + self.server_status_label, + self.system_tray, + filenames, + self.local_only, + ) self.share_mode.init() - self.share_mode.server_status.server_started.connect(self.update_server_status_indicator) - self.share_mode.server_status.server_stopped.connect(self.update_server_status_indicator) - self.share_mode.start_server_finished.connect(self.update_server_status_indicator) - self.share_mode.stop_server_finished.connect(self.update_server_status_indicator) + self.share_mode.server_status.server_started.connect( + self.update_server_status_indicator + ) + self.share_mode.server_status.server_stopped.connect( + self.update_server_status_indicator + ) + self.share_mode.start_server_finished.connect( + self.update_server_status_indicator + ) + self.share_mode.stop_server_finished.connect( + self.update_server_status_indicator + ) self.share_mode.stop_server_finished.connect(self.stop_server_finished) self.share_mode.start_server_finished.connect(self.clear_message) self.share_mode.server_status.button_clicked.connect(self.clear_message) @@ -141,19 +190,70 @@ class OnionShareGui(QtWidgets.QMainWindow): self.share_mode.set_server_active.connect(self.set_server_active) # Receive mode - self.receive_mode = ReceiveMode(self.common, qtapp, app, self.status_bar, self.server_status_label, self.system_tray, None, self.local_only) + self.receive_mode = ReceiveMode( + self.common, + qtapp, + app, + self.status_bar, + self.server_status_label, + self.system_tray, + None, + self.local_only, + ) self.receive_mode.init() - self.receive_mode.server_status.server_started.connect(self.update_server_status_indicator) - self.receive_mode.server_status.server_stopped.connect(self.update_server_status_indicator) - self.receive_mode.start_server_finished.connect(self.update_server_status_indicator) - self.receive_mode.stop_server_finished.connect(self.update_server_status_indicator) + self.receive_mode.server_status.server_started.connect( + self.update_server_status_indicator + ) + self.receive_mode.server_status.server_stopped.connect( + self.update_server_status_indicator + ) + self.receive_mode.start_server_finished.connect( + self.update_server_status_indicator + ) + self.receive_mode.stop_server_finished.connect( + self.update_server_status_indicator + ) self.receive_mode.stop_server_finished.connect(self.stop_server_finished) self.receive_mode.start_server_finished.connect(self.clear_message) self.receive_mode.server_status.button_clicked.connect(self.clear_message) self.receive_mode.server_status.url_copied.connect(self.copy_url) - self.receive_mode.server_status.hidservauth_copied.connect(self.copy_hidservauth) + self.receive_mode.server_status.hidservauth_copied.connect( + self.copy_hidservauth + ) self.receive_mode.set_server_active.connect(self.set_server_active) + # Website mode + self.website_mode = WebsiteMode( + self.common, + qtapp, + app, + self.status_bar, + self.server_status_label, + self.system_tray, + filenames, + ) + self.website_mode.init() + self.website_mode.server_status.server_started.connect( + self.update_server_status_indicator + ) + self.website_mode.server_status.server_stopped.connect( + self.update_server_status_indicator + ) + self.website_mode.start_server_finished.connect( + self.update_server_status_indicator + ) + self.website_mode.stop_server_finished.connect( + self.update_server_status_indicator + ) + self.website_mode.stop_server_finished.connect(self.stop_server_finished) + self.website_mode.start_server_finished.connect(self.clear_message) + self.website_mode.server_status.button_clicked.connect(self.clear_message) + self.website_mode.server_status.url_copied.connect(self.copy_url) + self.website_mode.server_status.hidservauth_copied.connect( + self.copy_hidservauth + ) + self.website_mode.set_server_active.connect(self.set_server_active) + self.update_mode_switcher() self.update_server_status_indicator() @@ -162,6 +262,7 @@ class OnionShareGui(QtWidgets.QMainWindow): contents_layout.setContentsMargins(10, 0, 10, 0) contents_layout.addWidget(self.receive_mode) contents_layout.addWidget(self.share_mode) + contents_layout.addWidget(self.website_mode) layout = QtWidgets.QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) @@ -197,62 +298,149 @@ class OnionShareGui(QtWidgets.QMainWindow): # Based on the current mode, switch the mode switcher button styles, # and show and hide widgets to switch modes if self.mode == self.MODE_SHARE: - self.share_mode_button.setStyleSheet(self.common.css['mode_switcher_selected_style']) - self.receive_mode_button.setStyleSheet(self.common.css['mode_switcher_unselected_style']) + self.share_mode_button.setStyleSheet( + self.common.css["mode_switcher_selected_style"] + ) + self.receive_mode_button.setStyleSheet( + self.common.css["mode_switcher_unselected_style"] + ) + self.website_mode_button.setStyleSheet( + self.common.css["mode_switcher_unselected_style"] + ) self.receive_mode.hide() self.share_mode.show() + self.website_mode.hide() + elif self.mode == self.MODE_WEBSITE: + self.share_mode_button.setStyleSheet( + self.common.css["mode_switcher_unselected_style"] + ) + self.receive_mode_button.setStyleSheet( + self.common.css["mode_switcher_unselected_style"] + ) + self.website_mode_button.setStyleSheet( + self.common.css["mode_switcher_selected_style"] + ) + + self.receive_mode.hide() + self.share_mode.hide() + self.website_mode.show() else: - self.share_mode_button.setStyleSheet(self.common.css['mode_switcher_unselected_style']) - self.receive_mode_button.setStyleSheet(self.common.css['mode_switcher_selected_style']) + self.share_mode_button.setStyleSheet( + self.common.css["mode_switcher_unselected_style"] + ) + self.receive_mode_button.setStyleSheet( + self.common.css["mode_switcher_selected_style"] + ) + self.website_mode_button.setStyleSheet( + self.common.css["mode_switcher_unselected_style"] + ) self.share_mode.hide() self.receive_mode.show() + self.website_mode.hide() self.update_server_status_indicator() def share_mode_clicked(self): if self.mode != self.MODE_SHARE: - self.common.log('OnionShareGui', 'share_mode_clicked') + self.common.log("OnionShareGui", "share_mode_clicked") self.mode = self.MODE_SHARE self.update_mode_switcher() def receive_mode_clicked(self): if self.mode != self.MODE_RECEIVE: - self.common.log('OnionShareGui', 'receive_mode_clicked') + self.common.log("OnionShareGui", "receive_mode_clicked") self.mode = self.MODE_RECEIVE self.update_mode_switcher() + def website_mode_clicked(self): + if self.mode != self.MODE_WEBSITE: + self.common.log("OnionShareGui", "website_mode_clicked") + self.mode = self.MODE_WEBSITE + self.update_mode_switcher() + def update_server_status_indicator(self): # Set the status image if self.mode == self.MODE_SHARE: # Share mode if self.share_mode.server_status.status == ServerStatus.STATUS_STOPPED: - self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_stopped)) - self.server_status_label.setText(strings._('gui_status_indicator_share_stopped')) + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_stopped) + ) + self.server_status_label.setText( + strings._("gui_status_indicator_share_stopped") + ) elif self.share_mode.server_status.status == ServerStatus.STATUS_WORKING: - self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_working)) + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_working) + ) if self.share_mode.server_status.autostart_timer_datetime: - self.server_status_label.setText(strings._('gui_status_indicator_share_scheduled')) + self.server_status_label.setText( + strings._("gui_status_indicator_share_scheduled") + ) else: - self.server_status_label.setText(strings._('gui_status_indicator_share_working')) + self.server_status_label.setText( + strings._("gui_status_indicator_share_working") + ) elif self.share_mode.server_status.status == ServerStatus.STATUS_STARTED: - self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_started)) - self.server_status_label.setText(strings._('gui_status_indicator_share_started')) + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_started) + ) + self.server_status_label.setText( + strings._("gui_status_indicator_share_started") + ) + elif self.mode == self.MODE_WEBSITE: + # Website mode + if self.website_mode.server_status.status == ServerStatus.STATUS_STOPPED: + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_stopped) + ) + self.server_status_label.setText( + strings._("gui_status_indicator_share_stopped") + ) + elif self.website_mode.server_status.status == ServerStatus.STATUS_WORKING: + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_working) + ) + self.server_status_label.setText( + strings._("gui_status_indicator_share_working") + ) + elif self.website_mode.server_status.status == ServerStatus.STATUS_STARTED: + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_started) + ) + self.server_status_label.setText( + strings._("gui_status_indicator_share_started") + ) else: # Receive mode if self.receive_mode.server_status.status == ServerStatus.STATUS_STOPPED: - self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_stopped)) - self.server_status_label.setText(strings._('gui_status_indicator_receive_stopped')) + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_stopped) + ) + self.server_status_label.setText( + strings._("gui_status_indicator_receive_stopped") + ) elif self.receive_mode.server_status.status == ServerStatus.STATUS_WORKING: - self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_working)) + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_working) + ) if self.receive_mode.server_status.autostart_timer_datetime: - self.server_status_label.setText(strings._('gui_status_indicator_receive_scheduled')) + self.server_status_label.setText( + strings._("gui_status_indicator_receive_scheduled") + ) else: - self.server_status_label.setText(strings._('gui_status_indicator_receive_working')) + self.server_status_label.setText( + strings._("gui_status_indicator_receive_working") + ) elif self.receive_mode.server_status.status == ServerStatus.STATUS_STARTED: - self.server_status_image_label.setPixmap(QtGui.QPixmap.fromImage(self.server_status_image_started)) - self.server_status_label.setText(strings._('gui_status_indicator_receive_started')) + self.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.server_status_image_started) + ) + self.server_status_label.setText( + strings._("gui_status_indicator_receive_started") + ) def stop_server_finished(self): # When the server stopped, cleanup the ephemeral onion service @@ -263,12 +451,22 @@ class OnionShareGui(QtWidgets.QMainWindow): If the user cancels before Tor finishes connecting, ask if they want to quit, or open settings. """ - self.common.log('OnionShareGui', '_tor_connection_canceled') + self.common.log("OnionShareGui", "_tor_connection_canceled") def ask(): - a = Alert(self.common, strings._('gui_tor_connection_ask'), QtWidgets.QMessageBox.Question, buttons=QtWidgets.QMessageBox.NoButton, autostart=False) - settings_button = QtWidgets.QPushButton(strings._('gui_tor_connection_ask_open_settings')) - quit_button = QtWidgets.QPushButton(strings._('gui_tor_connection_ask_quit')) + a = Alert( + self.common, + strings._("gui_tor_connection_ask"), + QtWidgets.QMessageBox.Question, + buttons=QtWidgets.QMessageBox.NoButton, + autostart=False, + ) + settings_button = QtWidgets.QPushButton( + strings._("gui_tor_connection_ask_open_settings") + ) + quit_button = QtWidgets.QPushButton( + strings._("gui_tor_connection_ask_quit") + ) a.addButton(settings_button, QtWidgets.QMessageBox.AcceptRole) a.addButton(quit_button, QtWidgets.QMessageBox.RejectRole) a.setDefaultButton(settings_button) @@ -276,12 +474,18 @@ class OnionShareGui(QtWidgets.QMainWindow): if a.clickedButton() == settings_button: # Open settings - self.common.log('OnionShareGui', '_tor_connection_canceled', 'Settings button clicked') + self.common.log( + "OnionShareGui", + "_tor_connection_canceled", + "Settings button clicked", + ) self.open_settings() if a.clickedButton() == quit_button: # Quit - self.common.log('OnionShareGui', '_tor_connection_canceled', 'Quit button clicked') + self.common.log( + "OnionShareGui", "_tor_connection_canceled", "Quit button clicked" + ) # Wait 1ms for the event loop to finish, then quit QtCore.QTimer.singleShot(1, self.qtapp.quit) @@ -293,7 +497,7 @@ class OnionShareGui(QtWidgets.QMainWindow): """ The TorConnectionDialog wants to open the Settings dialog """ - self.common.log('OnionShareGui', '_tor_connection_open_settings') + self.common.log("OnionShareGui", "_tor_connection_open_settings") # Wait 1ms for the event loop to finish closing the TorConnectionDialog QtCore.QTimer.singleShot(1, self.open_settings) @@ -302,10 +506,12 @@ class OnionShareGui(QtWidgets.QMainWindow): """ Open the SettingsDialog. """ - self.common.log('OnionShareGui', 'open_settings') + self.common.log("OnionShareGui", "open_settings") def reload_settings(): - self.common.log('OnionShareGui', 'open_settings', 'settings have changed, reloading') + self.common.log( + "OnionShareGui", "open_settings", "settings have changed, reloading" + ) self.common.settings.load() # We might've stopped the main requests timer if a Tor connection failed. @@ -317,35 +523,48 @@ class OnionShareGui(QtWidgets.QMainWindow): self.timer.start(500) self.share_mode.on_reload_settings() self.receive_mode.on_reload_settings() + self.website_mode.on_reload_settings() self.status_bar.clearMessage() # If we switched off the auto-stop timer setting, ensure the widget is hidden. - if not self.common.settings.get('autostop_timer'): + if not self.common.settings.get("autostop_timer"): self.share_mode.server_status.autostop_timer_container.hide() self.receive_mode.server_status.autostop_timer_container.hide() + self.website_mode.server_status.autostop_timer_container.hide() # If we switched off the auto-start timer setting, ensure the widget is hidden. - if not self.common.settings.get('autostart_timer'): + if not self.common.settings.get("autostart_timer"): self.share_mode.server_status.autostart_timer_datetime = None self.receive_mode.server_status.autostart_timer_datetime = None + self.website_mode.server_status.autostart_timer_datetime = None self.share_mode.server_status.autostart_timer_container.hide() self.receive_mode.server_status.autostart_timer_container.hide() + self.website_mode.server_status.autostart_timer_container.hide() - d = SettingsDialog(self.common, self.onion, self.qtapp, self.config, self.local_only) + d = SettingsDialog( + self.common, self.onion, self.qtapp, self.config, self.local_only + ) d.settings_saved.connect(reload_settings) d.exec_() # When settings close, refresh the server status UI self.share_mode.server_status.update() self.receive_mode.server_status.update() + self.website_mode.server_status.update() def check_for_updates(self): """ Check for updates in a new thread, if enabled. """ - if self.common.platform == 'Windows' or self.common.platform == 'Darwin': - if self.common.settings.get('use_autoupdate'): + if self.common.platform == "Windows" or self.common.platform == "Darwin": + if self.common.settings.get("use_autoupdate"): + def update_available(update_url, installed_version, latest_version): - Alert(self.common, strings._("update_available").format(update_url, installed_version, latest_version)) + Alert( + self.common, + strings._("update_available").format( + update_url, installed_version, latest_version + ), + ) self.update_thread = UpdateThread(self.common, self.onion, self.config) self.update_thread.update_available.connect(update_available) @@ -362,15 +581,21 @@ class OnionShareGui(QtWidgets.QMainWindow): # Have we lost connection to Tor somehow? if not self.onion.is_authenticated(): self.timer.stop() - self.status_bar.showMessage(strings._('gui_tor_connection_lost')) - self.system_tray.showMessage(strings._('gui_tor_connection_lost'), strings._('gui_tor_connection_error_settings')) + self.status_bar.showMessage(strings._("gui_tor_connection_lost")) + self.system_tray.showMessage( + strings._("gui_tor_connection_lost"), + strings._("gui_tor_connection_error_settings"), + ) self.share_mode.handle_tor_broke() self.receive_mode.handle_tor_broke() + self.website_mode.handle_tor_broke() # Process events from the web object if self.mode == self.MODE_SHARE: mode = self.share_mode + elif self.mode == self.MODE_WEBSITE: + mode = self.website_mode else: mode = self.receive_mode @@ -412,12 +637,41 @@ class OnionShareGui(QtWidgets.QMainWindow): elif event["type"] == Web.REQUEST_UPLOAD_CANCELED: mode.handle_request_upload_canceled(event) + elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_STARTED: + mode.handle_request_individual_file_started(event) + + elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_PROGRESS: + mode.handle_request_individual_file_progress(event) + + elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_CANCELED: + mode.handle_request_individual_file_canceled(event) + if event["type"] == Web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE: - Alert(self.common, strings._('error_cannot_create_data_dir').format(event["data"]["receive_mode_dir"])) + Alert( + self.common, + strings._("error_cannot_create_data_dir").format( + event["data"]["receive_mode_dir"] + ), + ) if event["type"] == Web.REQUEST_OTHER: - if event["path"] != '/favicon.ico' and event["path"] != "/{}/shutdown".format(mode.web.shutdown_slug): - self.status_bar.showMessage('[#{0:d}] {1:s}: {2:s}'.format(mode.web.error404_count, strings._('other_page_loaded'), event["path"])) + if event["path"] != "/favicon.ico" and event[ + "path" + ] != "/{}/shutdown".format(mode.web.shutdown_password): + self.status_bar.showMessage( + "{0:s}: {1:s}".format( + strings._("other_page_loaded"), event["path"] + ) + ) + + if event["type"] == Web.REQUEST_INVALID_PASSWORD: + self.status_bar.showMessage( + "[#{0:d}] {1:s}: {2:s}".format( + mode.web.invalid_passwords_count, + strings._("incorrect_password"), + event["data"], + ) + ) mode.timer_callback() @@ -425,15 +679,20 @@ class OnionShareGui(QtWidgets.QMainWindow): """ When the URL gets copied to the clipboard, display this in the status bar. """ - self.common.log('OnionShareGui', 'copy_url') - self.system_tray.showMessage(strings._('gui_copied_url_title'), strings._('gui_copied_url')) + self.common.log("OnionShareGui", "copy_url") + self.system_tray.showMessage( + strings._("gui_copied_url_title"), strings._("gui_copied_url") + ) def copy_hidservauth(self): """ When the stealth onion service HidServAuth gets copied to the clipboard, display this in the status bar. """ - self.common.log('OnionShareGui', 'copy_hidservauth') - self.system_tray.showMessage(strings._('gui_copied_hidservauth_title'), strings._('gui_copied_hidservauth')) + self.common.log("OnionShareGui", "copy_hidservauth") + self.system_tray.showMessage( + strings._("gui_copied_hidservauth_title"), + strings._("gui_copied_hidservauth"), + ) def clear_message(self): """ @@ -450,35 +709,50 @@ class OnionShareGui(QtWidgets.QMainWindow): if self.mode == self.MODE_SHARE: self.share_mode_button.show() self.receive_mode_button.hide() + self.website_mode_button.hide() + elif self.mode == self.MODE_WEBSITE: + self.share_mode_button.hide() + self.receive_mode_button.hide() + self.website_mode_button.show() else: self.share_mode_button.hide() self.receive_mode_button.show() + self.website_mode_button.hide() else: self.settings_button.show() self.share_mode_button.show() self.receive_mode_button.show() + self.website_mode_button.show() # Disable settings menu action when server is active self.settings_action.setEnabled(not active) def closeEvent(self, e): - self.common.log('OnionShareGui', 'closeEvent') + self.common.log("OnionShareGui", "closeEvent") + self.system_tray.hide() try: if self.mode == OnionShareGui.MODE_SHARE: server_status = self.share_mode.server_status + if self.mode == OnionShareGui.MODE_WEBSITE: + server_status = self.website_mode.server_status else: server_status = self.receive_mode.server_status if server_status.status != server_status.STATUS_STOPPED: - self.common.log('OnionShareGui', 'closeEvent, opening warning dialog') + self.common.log("OnionShareGui", "closeEvent, opening warning dialog") dialog = QtWidgets.QMessageBox() - dialog.setWindowTitle(strings._('gui_quit_title')) + dialog.setWindowTitle(strings._("gui_quit_title")) if self.mode == OnionShareGui.MODE_SHARE: - dialog.setText(strings._('gui_share_quit_warning')) + dialog.setText(strings._("gui_share_quit_warning")) else: - dialog.setText(strings._('gui_receive_quit_warning')) + dialog.setText(strings._("gui_receive_quit_warning")) dialog.setIcon(QtWidgets.QMessageBox.Critical) - quit_button = dialog.addButton(strings._('gui_quit_warning_quit'), QtWidgets.QMessageBox.YesRole) - dont_quit_button = dialog.addButton(strings._('gui_quit_warning_dont_quit'), QtWidgets.QMessageBox.NoRole) + quit_button = dialog.addButton( + strings._("gui_quit_warning_quit"), QtWidgets.QMessageBox.YesRole + ) + dont_quit_button = dialog.addButton( + strings._("gui_quit_warning_dont_quit"), + QtWidgets.QMessageBox.NoRole, + ) dialog.setDefaultButton(dont_quit_button) reply = dialog.exec_() |