[Pkg-privacy-commits] [onionshare] 146/256: Refactor UpdateChecker into a class that's a QObject, and make it use signals and slots to communicate
Ulrike Uhlig
ulrike at moszumanska.debian.org
Fri May 26 12:53:30 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 47c1488512bdb0538fc29ac94ecbe1908cc13f00
Author: Micah Lee <micah at micahflee.com>
Date: Sat Apr 15 18:55:41 2017 -0700
Refactor UpdateChecker into a class that's a QObject, and make it use signals and slots to communicate
---
onionshare_gui/settings_dialog.py | 12 +++-
onionshare_gui/update_checker.py | 143 ++++++++++++++++++++------------------
2 files changed, 86 insertions(+), 69 deletions(-)
diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py
index 1194383..1b1e2bf 100644
--- a/onionshare_gui/settings_dialog.py
+++ b/onionshare_gui/settings_dialog.py
@@ -381,9 +381,17 @@ class SettingsDialog(QtWidgets.QDialog):
bundled_tor_func = None
# Check for updates
+ def update_available(update_url, installed_version, latest_version):
+ Alert(strings._("update_available", True).format(update_url, installed_version, latest_version))
+ def update_not_available():
+ Alert(strings._('update_not_available', True))
+
+ u = UpdateChecker()
+ u.update_available.connect(update_available)
+ u.update_not_available.connect(update_not_available)
+
try:
- if not check_for_updates(force=True, bundled_tor_func=bundled_tor_func):
- Alert(strings._('update_not_available', True))
+ u.check(force=True, bundled_tor_func=bundled_tor_func)
except UpdateCheckerTorError:
Alert(strings._('update_error_tor', True), QtWidgets.QMessageBox.Warning)
except UpdateCheckerSOCKSHTTPError:
diff --git a/onionshare_gui/update_checker.py b/onionshare_gui/update_checker.py
index aaaa59b..f3d3fcd 100644
--- a/onionshare_gui/update_checker.py
+++ b/onionshare_gui/update_checker.py
@@ -17,12 +17,12 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
+from PyQt5 import QtCore
import datetime, time, socks, socket, re, platform
from . import strings, helpers
from onionshare.settings import Settings
from onionshare.onion import Onion
-from .alert import Alert
class UpdateCheckerTorError(Exception):
"""
@@ -44,7 +44,7 @@ class UpdateCheckerInvalidLatestVersion(Exception):
def __init__(self, latest_version):
self.latest_version = latest_version
-def check_for_updates(force=False, bundled_tor_func=None):
+class UpdateChecker(QtCore.QObject):
"""
Load http://elx57ue5uyfplgva.onion/latest-version.txt to see what the latest
version of OnionShare is. If the latest version is newer than the
@@ -52,69 +52,78 @@ def check_for_updates(force=False, bundled_tor_func=None):
Only check at most once per day, unless force is True.
"""
- # Load the settings
- settings = Settings()
- settings.load()
-
- # See if it's been 1 day since the last check, and if so set force to True
- if not force:
- autoupdate_timestamp = settings.get('autoupdate_timestamp')
- if autoupdate_timestamp:
- last_checked = datetime.datetime.fromtimestamp(autoupdate_timestamp)
- now = datetime.datetime.now()
-
- one_day = datetime.timedelta(days=1)
- if now - last_checked > one_day:
+ update_available = QtCore.pyqtSignal(str, str, str)
+ update_not_available = QtCore.pyqtSignal()
+
+ def __init__(self):
+ super(UpdateChecker, self).__init__()
+
+ def check(self, force=False, bundled_tor_func=None):
+ # Load the settings
+ settings = Settings()
+ settings.load()
+
+ # See if it's been 1 day since the last check, and if so set force to True
+ if not force:
+ autoupdate_timestamp = settings.get('autoupdate_timestamp')
+ if autoupdate_timestamp:
+ last_checked = datetime.datetime.fromtimestamp(autoupdate_timestamp)
+ now = datetime.datetime.now()
+
+ one_day = datetime.timedelta(days=1)
+ if now - last_checked > one_day:
+ force = True
+ else:
force = True
- else:
- force = True
-
- # Check for updates
- if force:
- # Create an Onion object, for checking for updates over tor
- try:
- onion = Onion(settings=settings, bundled_tor_func=bundled_tor_func)
- except:
- raise UpdateCheckerTorError
-
- # Download the latest-version file over Tor
- try:
- (socks_address, socks_port) = onion.get_tor_socks_port()
- socks.set_default_proxy(socks.SOCKS5, socks_address, socks_port)
-
- s = socks.socksocket()
- s.connect(('elx57ue5uyfplgva.onion', 80))
-
- http_request = 'GET /latest-version.txt HTTP/1.0\r\n'
- http_request += 'Host: elx57ue5uyfplgva.onion\r\n'
- http_request += 'User-Agent: OnionShare {}, {}\r\n'.format(helpers.get_version(), platform.system())
- http_request += '\r\n'
- s.sendall(http_request.encode('utf-8'))
-
- 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
-
- # Validate that latest_version looks like a version string
- # This regex is: 1-3 dot-separated numeric components
- version_re = r"^(\d+\.)?(\d+\.)?(\d+)$"
- if not re.match(version_re, latest_version):
- raise UpdateCheckerInvalidLatestVersion(latest_version)
-
- # Update the last checked timestamp (dropping the seconds and milliseconds)
- timestamp = datetime.datetime.now().replace(microsecond=0).replace(second=0).timestamp()
- settings.set('autoupdate_timestamp', timestamp)
- settings.save()
-
- # Do we need to update?
- update_url = 'https://github.com/micahflee/onionshare/releases/tag/v{}'.format(latest_version)
- installed_version = helpers.get_version()
- if installed_version < latest_version:
- Alert(strings._("update_available", True).format(update_url, installed_version, latest_version))
- return True
-
- return False
+
+ # Check for updates
+ if force:
+ # Create an Onion object, for checking for updates over tor
+ try:
+ onion = Onion(settings=settings, bundled_tor_func=bundled_tor_func)
+ except:
+ raise UpdateCheckerTorError
+
+ # Download the latest-version file over Tor
+ try:
+ (socks_address, socks_port) = onion.get_tor_socks_port()
+ socks.set_default_proxy(socks.SOCKS5, socks_address, socks_port)
+
+ s = socks.socksocket()
+ s.settimeout(15) # 15 second timeout
+ s.connect(('elx57ue5uyfplgva.onion', 80))
+
+ http_request = 'GET /latest-version.txt HTTP/1.0\r\n'
+ http_request += 'Host: elx57ue5uyfplgva.onion\r\n'
+ http_request += 'User-Agent: OnionShare {}, {}\r\n'.format(helpers.get_version(), platform.system())
+ http_request += '\r\n'
+ s.sendall(http_request.encode('utf-8'))
+
+ 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
+
+ # Validate that latest_version looks like a version string
+ # This regex is: 1-3 dot-separated numeric components
+ version_re = r"^(\d+\.)?(\d+\.)?(\d+)$"
+ if not re.match(version_re, latest_version):
+ raise UpdateCheckerInvalidLatestVersion(latest_version)
+
+ # Update the last checked timestamp (dropping the seconds and milliseconds)
+ timestamp = datetime.datetime.now().replace(microsecond=0).replace(second=0).timestamp()
+ settings.set('autoupdate_timestamp', timestamp)
+ settings.save()
+
+ # Do we need to update?
+ update_url = 'https://github.com/micahflee/onionshare/releases/tag/v{}'.format(latest_version)
+ installed_version = helpers.get_version()
+ if installed_version < latest_version:
+ self.update_available.emit(update_url, installed_version, latest_version)
+ return
+
+ # No updates are available
+ self.update_not_available.emit()
--
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