From ed28fdf123867dfda2b6aa4016e436d8e9bd1069 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 4 May 2018 15:53:34 -0700 Subject: [PATCH] Make receive mode info widget show when server is stated, hide when it is not started --- onionshare_gui/mode.py | 24 +++++++++-------- onionshare_gui/receive_mode/__init__.py | 35 +++++++++++++++++-------- onionshare_gui/server_status.py | 6 +++-- 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/onionshare_gui/mode.py b/onionshare_gui/mode.py index 656f912c..b6910375 100644 --- a/onionshare_gui/mode.py +++ b/onionshare_gui/mode.py @@ -51,6 +51,8 @@ class Mode(QtWidgets.QWidget): self.filenames = filenames + self.setMinimumWidth(450) + # The web object gets created in init() self.web = None @@ -107,26 +109,26 @@ class Mode(QtWidgets.QWidget): Add custom timer code. """ pass - + def get_stop_server_shutdown_timeout_text(self): """ Return the string to put on the stop server button, if there's a shutdown timeout """ pass - + def timeout_finished_should_stop_server(self): """ The shutdown timer expired, should we stop the server? Returns a bool """ pass - + def start_server(self): """ Start the onionshare server. This uses multiple threads to start the Tor onion server and the web app. """ self.common.log('Mode', 'start_server') - + self.start_server_custom() self.set_server_active.emit(True) @@ -165,7 +167,7 @@ class Mode(QtWidgets.QWidget): self.t = OnionThread(self.common, function=start_onion_service, kwargs={'self': self}) self.t.daemon = True self.t.start() - + def start_server_custom(self): """ Add custom initialization here. @@ -185,7 +187,7 @@ class Mode(QtWidgets.QWidget): # start_server_step2_custom has call these to move on: # self.starting_server_step3.emit() # self.start_server_finished.emit() - + def start_server_step2_custom(self): """ Add custom initialization here. @@ -194,7 +196,7 @@ class Mode(QtWidgets.QWidget): def start_server_step3(self): """ - Step 3 in starting the onionshare server. + Step 3 in starting the onionshare server. """ self.common.log('Mode', 'start_server_step3') @@ -231,7 +233,7 @@ class Mode(QtWidgets.QWidget): self.status_bar.clearMessage() self.start_server_error_custom() - + def start_server_error_custom(self): """ Add custom initialization here. @@ -270,7 +272,7 @@ class Mode(QtWidgets.QWidget): Add custom initialization here. """ pass - + def handle_tor_broke(self): """ Handle connection from Tor breaking. @@ -278,7 +280,7 @@ class Mode(QtWidgets.QWidget): if self.server_status.status != ServerStatus.STATUS_STOPPED: self.server_status.stop_server() self.handle_tor_broke_custom() - + def handle_tor_broke_custom(self): """ Add custom initialization here. @@ -317,7 +319,7 @@ class Mode(QtWidgets.QWidget): Handle REQUEST_CANCELED event. """ pass - + def handle_request_close_server(self, event): """ Handle REQUEST_CLOSE_SERVER event. diff --git a/onionshare_gui/receive_mode/__init__.py b/onionshare_gui/receive_mode/__init__.py index 5b570fab..27147db0 100644 --- a/onionshare_gui/receive_mode/__init__.py +++ b/onionshare_gui/receive_mode/__init__.py @@ -37,9 +37,10 @@ class ReceiveMode(Mode): # Server status self.server_status.set_mode('receive') - #self.server_status.server_stopped.connect(self.update_primary_action) - #self.server_status.server_canceled.connect(self.update_primary_action) - + self.server_status.server_started_finished.connect(self.update_primary_action) + self.server_status.server_stopped.connect(self.update_primary_action) + self.server_status.server_canceled.connect(self.update_primary_action) + # Tell server_status about web, then update self.server_status.web = self.web self.server_status.update() @@ -84,7 +85,7 @@ class ReceiveMode(Mode): # Layout self.layout.insertWidget(0, self.receive_info) self.layout.insertWidget(0, self.info_widget) - + def timer_callback_custom(self): """ This method is called regularly on a timer while share mode is active. @@ -93,31 +94,31 @@ class ReceiveMode(Mode): #if self.new_download: # self.downloads.downloads_container.vbar.setValue(self.downloads.downloads_container.vbar.maximum()) # self.new_download = False - + def get_stop_server_shutdown_timeout_text(self): """ Return the string to put on the stop server button, if there's a shutdown timeout """ return strings._('gui_receive_stop_server_shutdown_timeout', True) - + def timeout_finished_should_stop_server(self): """ The shutdown timer expired, should we stop the server? Returns a bool """ # TODO: wait until the final upload is done before stoppign the server? return True - + def start_server_custom(self): """ Starting the server. """ # Reset web counters self.web.error404_count = 0 - + # Hide and reset the downloads if we have previously shared #self.downloads.reset_downloads() #self.reset_info_counters() - + def start_server_step2_custom(self): """ Step 2 in starting the server. @@ -125,13 +126,13 @@ class ReceiveMode(Mode): # Continue self.starting_server_step3.emit() self.start_server_finished.emit() - + def handle_request_load(self, event): """ Handle REQUEST_LOAD event. """ self.system_tray.showMessage(strings._('systray_page_loaded_title', True), strings._('systray_upload_page_loaded_message', True)) - + def handle_request_close_server(self, event): """ Handle REQUEST_CLOSE_SERVER event. @@ -161,3 +162,15 @@ class ReceiveMode(Mode): self.info_show_uploads.setIcon(QtGui.QIcon(self.common.get_resource_path('images/download_window_green.png'))) self.info_in_progress_uploads_count.setText(' {1:d}'.format(image, self.uploads_in_progress)) self.info_in_progress_uploads_count.setToolTip(strings._('info_in_progress_downloads_tooltip', True).format(self.uploads_in_progress)) + + def update_primary_action(self): + self.common.log('ReceiveMode', 'update_primary_action') + + # Show the info widget when the server is active + if self.server_status.status == self.server_status.STATUS_STARTED: + self.info_widget.show() + else: + self.info_widget.hide() + + # Resize window + self.adjustSize() diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index c0a7172f..ee60f432 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -29,6 +29,7 @@ class ServerStatus(QtWidgets.QWidget): The server status chunk of the GUI. """ server_started = QtCore.pyqtSignal() + server_started_finished = QtCore.pyqtSignal() server_stopped = QtCore.pyqtSignal() server_canceled = QtCore.pyqtSignal() button_clicked = QtCore.pyqtSignal() @@ -116,7 +117,7 @@ class ServerStatus(QtWidgets.QWidget): layout.addLayout(url_layout) layout.addWidget(self.shutdown_timeout_container) self.setLayout(layout) - + def set_mode(self, share_mode, file_selection=None): """ The server status is in share mode. @@ -268,6 +269,7 @@ class ServerStatus(QtWidgets.QWidget): self.status = self.STATUS_STARTED self.copy_url() self.update() + self.server_started_finished.emit() def stop_server(self): """ @@ -312,7 +314,7 @@ class ServerStatus(QtWidgets.QWidget): clipboard.setText(self.app.auth_string) self.hidservauth_copied.emit() - + def get_url(self): """ Returns the OnionShare URL.