[Pkg-privacy-commits] [onionshare] 172/256: Make UpdateChecker use the shared Onion object instead of creating a new one

Ulrike Uhlig ulrike at moszumanska.debian.org
Fri May 26 12:53:34 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 a9e822b222ef94722eccfb7a1f7e1f8fd07af07d
Author: Micah Lee <micah at micahflee.com>
Date:   Sun May 14 19:54:12 2017 -0700

    Make UpdateChecker use the shared Onion object instead of creating a new one
---
 onionshare_gui/menu.py            |  5 +++--
 onionshare_gui/onionshare_gui.py  |  8 ++++----
 onionshare_gui/settings_dialog.py | 29 +++++++++++-----------------
 onionshare_gui/update_checker.py  | 40 +++++++++++++++------------------------
 share/locale/en.json              |  3 +--
 5 files changed, 34 insertions(+), 51 deletions(-)

diff --git a/onionshare_gui/menu.py b/onionshare_gui/menu.py
index 771fad6..4697d39 100644
--- a/onionshare_gui/menu.py
+++ b/onionshare_gui/menu.py
@@ -26,8 +26,9 @@ class Menu(QtWidgets.QMenuBar):
     """
     OnionShare's menu bar.
     """
-    def __init__(self, qtapp):
+    def __init__(self, onion, qtapp):
         super(Menu, self).__init__()
+        self.onion = onion
         self.qtapp = qtapp
 
         file_menu = self.addMenu(strings._('gui_menu_file_menu', True))
@@ -41,7 +42,7 @@ class Menu(QtWidgets.QMenuBar):
         """
         Settings action triggered.
         """
-        SettingsDialog(self.qtapp)
+        SettingsDialog(self.onion, self.qtapp)
 
     def quit(self):
         """
diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py
index dc5bdc7..0f3effd 100644
--- a/onionshare_gui/onionshare_gui.py
+++ b/onionshare_gui/onionshare_gui.py
@@ -64,7 +64,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
         tor_con.start()
 
         # Menu bar
-        self.setMenuBar(Menu(self.qtapp))
+        self.setMenuBar(Menu(self.onion, self.qtapp))
 
         # Check for updates in a new thread, if enabled
         system = platform.system()
@@ -73,7 +73,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
                 def update_available(update_url, installed_version, latest_version):
                     Alert(strings._("update_available", True).format(update_url, installed_version, latest_version))
 
-                t = UpdateThread()
+                t = UpdateThread(self.onion)
                 t.update_available.connect(update_available)
                 t.start()
 
@@ -156,7 +156,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
             a.exec_()
 
             if a.clickedButton() == settings_button:
-                SettingsDialog(self.qtapp)
+                SettingsDialog(self.onion, self.qtapp)
             else:
                 self.qtapp.quit()
 
@@ -168,7 +168,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
         The TorConnectionDialog wants to open the Settings dialog
         """
         def open_settings():
-            SettingsDialog(self.qtapp)
+            SettingsDialog(self.onion, self.qtapp)
 
         # Wait 1ms for the event loop to finish closing the TorConnectionDialog
         QtCore.QTimer.singleShot(1, open_settings)
diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py
index c1ad6f7..bfd8256 100644
--- a/onionshare_gui/settings_dialog.py
+++ b/onionshare_gui/settings_dialog.py
@@ -31,8 +31,9 @@ class SettingsDialog(QtWidgets.QDialog):
     """
     Settings dialog.
     """
-    def __init__(self, qtapp):
+    def __init__(self, onion, qtapp):
         super(SettingsDialog, self).__init__()
+        self.onion = onion
         self.qtapp = qtapp
 
         self.setModal(True)
@@ -373,8 +374,9 @@ class SettingsDialog(QtWidgets.QDialog):
         """
         Check for Updates button clicked. Manually force an update check.
         """
-        settings = Settings()
-        settings.load()
+        # Disable buttons
+        self._disable_buttons()
+        self.qtapp.processEvents()
 
         # Check for updates
         def update_available(update_url, installed_version, latest_version):
@@ -382,31 +384,22 @@ class SettingsDialog(QtWidgets.QDialog):
         def update_not_available():
             Alert(strings._('update_not_available', True))
 
-        u = UpdateChecker()
+        u = UpdateChecker(self.onion)
         u.update_available.connect(update_available)
         u.update_not_available.connect(update_not_available)
 
-        # Show Tor connection status if connection type is bundled tor
-        if settings.get('connection_type') == 'bundled':
-            self.tor_status.show()
-            self._disable_buttons()
-            u.tor_status_update.connect(self._tor_status_update)
-
         try:
             u.check(force=True)
-        except UpdateCheckerTorError:
-            Alert(strings._('update_error_tor', True), QtWidgets.QMessageBox.Warning)
-        except UpdateCheckerSOCKSHTTPError:
-            Alert(strings._('update_error_sockshttp', True), QtWidgets.QMessageBox.Warning)
+        except UpdateCheckerCheckError:
+            Alert(strings._('update_error_check_error', True), QtWidgets.QMessageBox.Warning)
         except UpdateCheckerInvalidLatestVersion as e:
             Alert(strings._('update_error_invalid_latest_version', True).format(e.latest_version), QtWidgets.QMessageBox.Warning)
 
-        # Clean up afterwards
-        if settings.get('connection_type') == 'bundled':
-            self.tor_status.hide()
-            self._enable_buttons()
+        # Enable buttons
+        self._enable_buttons()
 
         # Update the last checked label
+        settings = Settings()
         settings.load()
         autoupdate_timestamp = settings.get('autoupdate_timestamp')
         self._update_autoupdate_timestamp(autoupdate_timestamp)
diff --git a/onionshare_gui/update_checker.py b/onionshare_gui/update_checker.py
index b92a620..dcba820 100644
--- a/onionshare_gui/update_checker.py
+++ b/onionshare_gui/update_checker.py
@@ -26,15 +26,10 @@ from onionshare.onion import Onion
 
 from . import strings, helpers
 
-class UpdateCheckerTorError(Exception):
+class UpdateCheckerCheckError(Exception):
     """
-    Error checking for updates because of some Tor connection issue.
-    """
-    pass
-
-class UpdateCheckerSOCKSHTTPError(Exception):
-    """
-    Error checking for updates because of some SOCKS proxy or HTTP request issue.
+    Error checking for updates because of some Tor connection issue, or because
+    the OnionShare website is down.
     """
     pass
 
@@ -58,8 +53,9 @@ class UpdateChecker(QtCore.QObject):
     update_not_available = QtCore.pyqtSignal()
     tor_status_update = QtCore.pyqtSignal(str)
 
-    def __init__(self):
+    def __init__(self, onion):
         super(UpdateChecker, self).__init__()
+        self.onion = onion
 
     def check(self, force=False):
         # Load the settings
@@ -86,12 +82,6 @@ class UpdateChecker(QtCore.QObject):
 
         # Check for updates
         if check_for_updates:
-            # Create an Onion object, for checking for updates over tor
-            try:
-                onion = Onion(settings=settings, bundled_tor_func=self._bundled_tor_func)
-            except:
-                raise UpdateCheckerTorError
-
             # Download the latest-version file over Tor
             try:
                 # User agent string includes OnionShare version and platform
@@ -103,7 +93,7 @@ class UpdateChecker(QtCore.QObject):
                 if force:
                     path += '?force=1'
 
-                (socks_address, socks_port) = onion.get_tor_socks_port()
+                (socks_address, socks_port) = self.onion.get_tor_socks_port()
                 socks.set_default_proxy(socks.SOCKS5, socks_address, socks_port)
 
                 s = socks.socksocket()
@@ -118,11 +108,8 @@ class UpdateChecker(QtCore.QObject):
 
                 http_response = s.recv(1024)
                 latest_version = http_response[http_response.find(b'\r\n\r\n'):].strip().decode('utf-8')
-
-                # Clean up from Onion
-                onion.cleanup()
             except:
-                raise UpdateCheckerSOCKSHTTPError
+                raise UpdateCheckerCheckError
 
             # Validate that latest_version looks like a version string
             # This regex is: 1-3 dot-separated numeric components
@@ -145,19 +132,19 @@ class UpdateChecker(QtCore.QObject):
             # No updates are available
             self.update_not_available.emit()
 
-    def _bundled_tor_func(self, message):
-        self.tor_status_update.emit(message)
-
 class UpdateThread(QtCore.QThread):
     update_available = QtCore.pyqtSignal(str, str, str)
+    update_not_available = QtCore.pyqtSignal()
     tor_status_update = QtCore.pyqtSignal(str)
 
-    def __init__(self):
+    def __init__(self, onion):
         super(UpdateThread, self).__init__()
+        self.onion = onion
 
     def run(self):
-        u = UpdateChecker()
+        u = UpdateChecker(self.onion)
         u.update_available.connect(self._update_available)
+        u.update_not_available.connect(self._update_not_available)
         u.tor_status_update.connect(self._tor_status_update)
         try:
             u.check()
@@ -168,5 +155,8 @@ class UpdateThread(QtCore.QThread):
     def _update_available(self, update_url, installed_version, latest_version):
         self.update_available.emit(update_url, installed_version, latest_version)
 
+    def _update_not_available(self):
+        self.update_not_available.emit()
+
     def _tor_status_update(self, message):
         self.tor_status_update.emit(message)
diff --git a/share/locale/en.json b/share/locale/en.json
index 9608545..75b4341 100644
--- a/share/locale/en.json
+++ b/share/locale/en.json
@@ -97,8 +97,7 @@
     "error_tor_protocol_error": "Error talking to the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work.",
     "connecting_to_tor": "Connecting to the Tor network",
     "update_available": "There is an OnionShare update available. <a href='{}'>Click here</a> to download it.<br><br>Installed version: {}<br>Latest version: {}",
-    "update_error_tor": "Error checking for updates: Can't connect to Tor.\nCheck your Tor connection settings.",
-    "update_error_sockshttp": "Error checking for updates: Connected to Tor, but can't load the update HTTP request.",
+    "update_error_check_error": "Error checking for updates: Maybe you're not connected to Tor, or maybe the OnionShare website is down.",
     "update_error_invalid_latest_version": "Error checking for updates: The OnionShare website responded saying the latest version is '{}', but that doesn't appear to be a valid version string.",
     "update_not_available": "You are running the latest version of OnionShare.",
     "gui_tor_connection_error_settings": "Try adjusting how OnionShare connects to the Tor network in Settings."

-- 
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