[Pkg-privacy-commits] [onionshare] 168/256: Move owernship of the TorConnetionDialog objection from __init__.py into the OnionShareGUI class, and make it so when the Tor connection gets canceled, OnionShare quits

Ulrike Uhlig ulrike at moszumanska.debian.org
Fri May 26 12:53:33 UTC 2017


This is an automated email from the git hooks/post-receive script.

ulrike pushed a commit to branch master
in repository onionshare.

commit 2ca92c52db141256fed17295afdf396127ffeccc
Author: Micah Lee <micah at micahflee.com>
Date:   Sun May 14 18:30:45 2017 -0700

    Move owernship of the TorConnetionDialog objection from __init__.py into the OnionShareGUI class, and make it so when the Tor connection gets canceled, OnionShare quits
---
 onionshare/onion.py                     |  5 ++-
 onionshare_gui/__init__.py              | 20 ++---------
 onionshare_gui/onionshare_gui.py        | 63 ++++++++++++++++++++++-----------
 onionshare_gui/tor_connection_dialog.py |  9 ++++-
 4 files changed, 58 insertions(+), 39 deletions(-)

diff --git a/onionshare/onion.py b/onionshare/onion.py
index 83472ff..780a397 100644
--- a/onionshare/onion.py
+++ b/onionshare/onion.py
@@ -216,7 +216,10 @@ class Onion(object):
                 print("{}: {}% - {}{}".format(strings._('connecting_to_tor'), progress, summary, "\033[K"), end="\r")
 
                 if callable(tor_status_update_func):
-                    tor_status_update_func(progress, summary)
+                    if not tor_status_update_func(progress, summary):
+                        # If the dialog was canceled, stop connecting to Tor
+                        print()
+                        return False
 
                 if summary == 'Done':
                     print("")
diff --git a/onionshare_gui/__init__.py b/onionshare_gui/__init__.py
index d0fb365..dcbe2ae 100644
--- a/onionshare_gui/__init__.py
+++ b/onionshare_gui/__init__.py
@@ -27,7 +27,6 @@ from onionshare.onionshare import OnionShare
 from onionshare.settings import Settings
 
 from .onionshare_gui import OnionShareGui
-from .tor_connection_dialog import TorConnectionDialog
 
 class Application(QtWidgets.QApplication):
     """
@@ -87,35 +86,22 @@ def main():
         if not valid:
             sys.exit()
 
-    # Load settings
-    settings = Settings()
-    settings.load()
-
     # Start the Onion
     onion = Onion()
 
-    def exit_early():
-        # Wait for tor to exit
-        onion.cleanup()
-        sys.exit()
-
-    tor_con = TorConnectionDialog(settings, onion)
-    tor_con.canceled.connect(exit_early)
-    tor_con.start()
-
     # Start the OnionShare app
     web.set_stay_open(stay_open)
     app = OnionShare(onion, debug, local_only, stay_open)
 
+    # Launch the gui
+    gui = OnionShareGui(onion, qtapp, app, filenames)
+
     # Clean up when app quits
     def shutdown():
         onion.cleanup()
         app.cleanup()
     qtapp.aboutToQuit.connect(shutdown)
 
-    # Launch the gui
-    gui = OnionShareGui(qtapp, app, filenames)
-
     # All done
     sys.exit(qtapp.exec_())
 
diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py
index badc10e..60674a1 100644
--- a/onionshare_gui/onionshare_gui.py
+++ b/onionshare_gui/onionshare_gui.py
@@ -24,6 +24,7 @@ from onionshare import strings, helpers, web
 from onionshare.settings import Settings
 from onionshare.onion import *
 
+from .tor_connection_dialog import TorConnectionDialog
 from .menu import Menu
 from .file_selection import FileSelection
 from .server_status import ServerStatus
@@ -42,23 +43,31 @@ class OnionShareGui(QtWidgets.QMainWindow):
     starting_server_step3 = QtCore.pyqtSignal()
     starting_server_error = QtCore.pyqtSignal(str)
 
-    def __init__(self, qtapp, app, filenames):
+    def __init__(self, onion, qtapp, app, filenames):
         super(OnionShareGui, self).__init__()
+        self.onion = onion
         self.qtapp = qtapp
         self.app = app
 
         self.setWindowTitle('OnionShare')
         self.setWindowIcon(QtGui.QIcon(helpers.get_resource_path('images/logo.png')))
 
+        # Load settings
+        self.settings = Settings()
+        self.settings.load()
+
+        # Start the "Connecting to Tor" dialog, which calls onion.connect()
+        tor_con = TorConnectionDialog(self.settings, self.onion)
+        tor_con.canceled.connect(self._tor_connection_canceled)
+        tor_con.start()
+
         # Menu bar
         self.setMenuBar(Menu(self.qtapp))
 
         # Check for updates in a new thread, if enabled
         system = platform.system()
         if system == 'Windows' or system == 'Darwin':
-            settings = Settings()
-            settings.load()
-            if settings.get('use_autoupdate'):
+            if self.settings.get('use_autoupdate'):
                 def update_available(update_url, installed_version, latest_version):
                     Alert(strings._("update_available", True).format(update_url, installed_version, latest_version))
 
@@ -130,6 +139,16 @@ class OnionShareGui(QtWidgets.QMainWindow):
         self.timer.timeout.connect(self.check_for_requests)
         self.timer.start(500)
 
+    def _tor_connection_canceled(self):
+        """
+        If the user cancels before Tor finishes connecting, quit.
+        """
+        def quit():
+            self.qtapp.quit()
+
+        # Wait 1ms for the event loop to finish closing the TorConnectionDialog before quitting
+        QtCore.QTimer.singleShot(1, quit)
+
     def start_server(self):
         """
         Start the onionshare server. This uses multiple threads to start the Tor onion
@@ -310,22 +329,26 @@ class OnionShareGui(QtWidgets.QMainWindow):
         self.status_bar.clearMessage()
 
     def closeEvent(self, e):
-        if self.server_status.status != self.server_status.STATUS_STOPPED:
-            dialog = QtWidgets.QMessageBox()
-            dialog.setWindowTitle("OnionShare")
-            dialog.setText(strings._('gui_quit_warning', True))
-            quit_button = dialog.addButton(strings._('gui_quit_warning_quit', True), QtWidgets.QMessageBox.YesRole)
-            dont_quit_button = dialog.addButton(strings._('gui_quit_warning_dont_quit', True), QtWidgets.QMessageBox.NoRole)
-            dialog.setDefaultButton(dont_quit_button)
-            reply = dialog.exec_()
-
-            # Quit
-            if reply == 0:
-                self.stop_server()
-                e.accept()
-            # Don't Quit
-            else:
-                e.ignore()
+        try:
+            if self.server_status.status != self.server_status.STATUS_STOPPED:
+                dialog = QtWidgets.QMessageBox()
+                dialog.setWindowTitle("OnionShare")
+                dialog.setText(strings._('gui_quit_warning', True))
+                quit_button = dialog.addButton(strings._('gui_quit_warning_quit', True), QtWidgets.QMessageBox.YesRole)
+                dont_quit_button = dialog.addButton(strings._('gui_quit_warning_dont_quit', True), QtWidgets.QMessageBox.NoRole)
+                dialog.setDefaultButton(dont_quit_button)
+                reply = dialog.exec_()
+
+                # Quit
+                if reply == 0:
+                    self.stop_server()
+                    e.accept()
+                # Don't Quit
+                else:
+                    e.ignore()
+
+        except:
+            e.accept()
 
 
 class ZipProgressBar(QtWidgets.QProgressBar):
diff --git a/onionshare_gui/tor_connection_dialog.py b/onionshare_gui/tor_connection_dialog.py
index a337254..ab5c658 100644
--- a/onionshare_gui/tor_connection_dialog.py
+++ b/onionshare_gui/tor_connection_dialog.py
@@ -56,8 +56,12 @@ class TorConnectionDialog(QtWidgets.QProgressDialog):
         self.setValue(0)
         try:
             self.onion.connect(self.settings, tor_status_update)
+
+            # Close the dialog after connecting
+            self.setValue(self.maximum())
+
         except BundledTorCanceled as e:
-            self.close()
+            self.cancel()
         except Exception as e:
             print(e.args[0])
             # TODO: Open settings to connect to Tor properly
@@ -66,3 +70,6 @@ class TorConnectionDialog(QtWidgets.QProgressDialog):
     def tor_status_update(self, progress, summary):
         self.setValue(int(progress))
         self.setLabelText("<strong>{}</strong><br>{}".format(strings._('connecting_to_tor', True), summary))
+
+        # Return False if the dialog was canceled
+        return not self.wasCanceled()

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/onionshare.git



More information about the Pkg-privacy-commits mailing list