diff options
Diffstat (limited to 'onionshare_gui/update_checker.py')
-rw-r--r-- | onionshare_gui/update_checker.py | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/onionshare_gui/update_checker.py b/onionshare_gui/update_checker.py index 5d73efb4..a7e0b99c 100644 --- a/onionshare_gui/update_checker.py +++ b/onionshare_gui/update_checker.py @@ -2,7 +2,7 @@ """ OnionShare | https://onionshare.org/ -Copyright (C) 2018 Micah Lee <micah@micahflee.com> +Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,13 +19,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. """ from PyQt5 import QtCore import datetime, time, socket, re, platform +import socks from distutils.version import LooseVersion as Version -from onionshare import socks from onionshare.settings import Settings from onionshare.onion import Onion -from . import strings, common +from . import strings class UpdateCheckerCheckError(Exception): """ @@ -53,18 +53,21 @@ class UpdateChecker(QtCore.QObject): update_available = QtCore.pyqtSignal(str, str, str) update_not_available = QtCore.pyqtSignal() update_error = QtCore.pyqtSignal() - update_invalid_version = QtCore.pyqtSignal() + update_invalid_version = QtCore.pyqtSignal(str) - def __init__(self, onion, config=False): + def __init__(self, common, onion, config=False): super(UpdateChecker, self).__init__() - common.log('UpdateChecker', '__init__') + + self.common = common + + self.common.log('UpdateChecker', '__init__') self.onion = onion self.config = config def check(self, force=False, config=False): - common.log('UpdateChecker', 'check', 'force={}'.format(force)) + self.common.log('UpdateChecker', 'check', 'force={}'.format(force)) # Load the settings - settings = Settings(config) + settings = Settings(self.common, config) settings.load() # If force=True, then definitely check @@ -87,11 +90,11 @@ class UpdateChecker(QtCore.QObject): # Check for updates if check_for_updates: - common.log('UpdateChecker', 'check', 'checking for updates') + self.common.log('UpdateChecker', 'check', 'checking for updates') # Download the latest-version file over Tor try: # User agent string includes OnionShare version and platform - user_agent = 'OnionShare {}, {}'.format(common.get_version(), platform.system()) + user_agent = 'OnionShare {}, {}'.format(self.common.version, self.common.platform) # If the update is forced, add '?force=1' to the URL, to more # accurately measure daily users @@ -104,7 +107,7 @@ class UpdateChecker(QtCore.QObject): else: onion_domain = 'elx57ue5uyfplgva.onion' - common.log('UpdateChecker', 'check', 'loading http://{}{}'.format(onion_domain, path)) + self.common.log('UpdateChecker', 'check', 'loading http://{}{}'.format(onion_domain, path)) (socks_address, socks_port) = self.onion.get_tor_socks_port() socks.set_default_proxy(socks.SOCKS5, socks_address, socks_port) @@ -122,10 +125,10 @@ 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') - common.log('UpdateChecker', 'check', 'latest OnionShare version: {}'.format(latest_version)) + self.common.log('UpdateChecker', 'check', 'latest OnionShare version: {}'.format(latest_version)) except Exception as e: - common.log('UpdateChecker', 'check', '{}'.format(e)) + self.common.log('UpdateChecker', 'check', '{}'.format(e)) self.update_error.emit() raise UpdateCheckerCheckError @@ -133,7 +136,7 @@ class UpdateChecker(QtCore.QObject): # This regex is: 1-3 dot-separated numeric components version_re = r"^(\d+\.)?(\d+\.)?(\d+)$" if not re.match(version_re, latest_version): - self.update_invalid_version.emit() + self.update_invalid_version.emit(latest_version) raise UpdateCheckerInvalidLatestVersion(latest_version) # Update the last checked timestamp (dropping the seconds and milliseconds) @@ -145,7 +148,7 @@ class UpdateChecker(QtCore.QObject): # Do we need to update? update_url = 'https://github.com/micahflee/onionshare/releases/tag/v{}'.format(latest_version) - installed_version = common.get_version() + installed_version = self.common.version if installed_version < latest_version: self.update_available.emit(update_url, installed_version, latest_version) return @@ -157,19 +160,22 @@ class UpdateThread(QtCore.QThread): update_available = QtCore.pyqtSignal(str, str, str) update_not_available = QtCore.pyqtSignal() update_error = QtCore.pyqtSignal() - update_invalid_version = QtCore.pyqtSignal() + update_invalid_version = QtCore.pyqtSignal(str) - def __init__(self, onion, config=False, force=False): + def __init__(self, common, onion, config=False, force=False): super(UpdateThread, self).__init__() - common.log('UpdateThread', '__init__') + + self.common = common + + self.common.log('UpdateThread', '__init__') self.onion = onion self.config = config self.force = force def run(self): - common.log('UpdateThread', 'run') + self.common.log('UpdateThread', 'run') - u = UpdateChecker(self.onion, self.config) + u = UpdateChecker(self.common, self.onion, self.config) u.update_available.connect(self._update_available) u.update_not_available.connect(self._update_not_available) u.update_error.connect(self._update_error) @@ -179,25 +185,25 @@ class UpdateThread(QtCore.QThread): u.check(config=self.config,force=self.force) except Exception as e: # If update check fails, silently ignore - common.log('UpdateThread', 'run', '{}'.format(e)) + self.common.log('UpdateThread', 'run', '{}'.format(e)) pass def _update_available(self, update_url, installed_version, latest_version): - common.log('UpdateThread', '_update_available') + self.common.log('UpdateThread', '_update_available') self.active = False self.update_available.emit(update_url, installed_version, latest_version) def _update_not_available(self): - common.log('UpdateThread', '_update_not_available') + self.common.log('UpdateThread', '_update_not_available') self.active = False self.update_not_available.emit() def _update_error(self): - common.log('UpdateThread', '_update_error') + self.common.log('UpdateThread', '_update_error') self.active = False self.update_error.emit() - def _update_invalid_version(self): - common.log('UpdateThread', '_update_invalid_version') + def _update_invalid_version(self, latest_version): + self.common.log('UpdateThread', '_update_invalid_version') self.active = False - self.update_invalid_version.emit() + self.update_invalid_version.emit(latest_version) |