forked from LBRYCommunity/lbry-sdk
remove version check also supplies a download url
This commit is contained in:
parent
723105157f
commit
6d4c606abd
2 changed files with 72 additions and 45 deletions
|
@ -12,6 +12,7 @@ at anytime.
|
||||||
* Remove unused upload_allowed option
|
* Remove unused upload_allowed option
|
||||||
* Remove code related to packaging as that step is now done in the electron client
|
* Remove code related to packaging as that step is now done in the electron client
|
||||||
* Remove lbryum version check; use lbry-electron as version source
|
* Remove lbryum version check; use lbry-electron as version source
|
||||||
|
* Include download url in version check
|
||||||
|
|
||||||
## [0.8.3] - 2017-02-15
|
## [0.8.3] - 2017-02-15
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -2,6 +2,7 @@ import binascii
|
||||||
import logging.handlers
|
import logging.handlers
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
|
import platform
|
||||||
import re
|
import re
|
||||||
import base58
|
import base58
|
||||||
import requests
|
import requests
|
||||||
|
@ -82,11 +83,9 @@ STREAM_STAGES = [
|
||||||
]
|
]
|
||||||
|
|
||||||
CONNECTION_STATUS_CONNECTED = 'connected'
|
CONNECTION_STATUS_CONNECTED = 'connected'
|
||||||
CONNECTION_STATUS_VERSION_CHECK = 'version_check'
|
|
||||||
CONNECTION_STATUS_NETWORK = 'network_connection'
|
CONNECTION_STATUS_NETWORK = 'network_connection'
|
||||||
CONNECTION_MESSAGES = {
|
CONNECTION_MESSAGES = {
|
||||||
CONNECTION_STATUS_CONNECTED: 'No connection problems detected',
|
CONNECTION_STATUS_CONNECTED: 'No connection problems detected',
|
||||||
CONNECTION_STATUS_VERSION_CHECK: "There was a problem checking for updates on github",
|
|
||||||
CONNECTION_STATUS_NETWORK: "Your internet connection appears to have been interrupted",
|
CONNECTION_STATUS_NETWORK: "Your internet connection appears to have been interrupted",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,9 +124,11 @@ class CheckInternetConnection(object):
|
||||||
self.daemon.connected_to_internet = utils.check_connection()
|
self.daemon.connected_to_internet = utils.check_connection()
|
||||||
|
|
||||||
|
|
||||||
class CheckRemoteVersions(object):
|
class CheckRemoteVersion(object):
|
||||||
def __init__(self, daemon):
|
URL = 'https://api.github.com/repos/lbryio/lbry-electron/releases/latest'
|
||||||
self.daemon = daemon
|
def __init__(self):
|
||||||
|
self.version = None
|
||||||
|
self.update_url = None
|
||||||
|
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
d = threads.deferToThread(self._get_lbry_electron_client_version)
|
d = threads.deferToThread(self._get_lbry_electron_client_version)
|
||||||
|
@ -141,15 +142,71 @@ class CheckRemoteVersions(object):
|
||||||
log.warning("Failed to check latest %s version from github", module_checked)
|
log.warning("Failed to check latest %s version from github", module_checked)
|
||||||
|
|
||||||
def _get_lbry_electron_client_version(self):
|
def _get_lbry_electron_client_version(self):
|
||||||
# We'll need to enusre the lbry-electron version is in sync
|
# We'll need to ensure the lbry-electron version is in sync
|
||||||
# with the lbrynet-daemon version
|
# with the lbrynet-daemon version
|
||||||
self.daemon.git_lbrynet_version = get_lbry_electron_client_version_from_github()
|
self._set_data_from_github()
|
||||||
log.info(
|
log.info(
|
||||||
"remote lbrynet %s > local lbrynet %s = %s",
|
"remote lbrynet %s > local lbrynet %s = %s",
|
||||||
self.daemon.git_lbrynet_version, LBRYNET_VERSION,
|
self.version, LBRYNET_VERSION,
|
||||||
utils.version_is_greater_than(self.daemon.git_lbrynet_version, LBRYNET_VERSION)
|
utils.version_is_greater_than(self.version, LBRYNET_VERSION)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _set_data_from_github(self):
|
||||||
|
release = self._get_release_data()
|
||||||
|
# githubs documentation claims this should never happen, but we'll check just in case
|
||||||
|
if release['prerelease']:
|
||||||
|
raise Exception('Release {} is a pre-release'.format(tag))
|
||||||
|
self.version = self._get_version_from_release(release)
|
||||||
|
self.update_url = self._get_update_url_from_release(release)
|
||||||
|
|
||||||
|
def _get_release_data(self):
|
||||||
|
response = requests.get(self.URL, timeout=20)
|
||||||
|
release = response.json()
|
||||||
|
return release
|
||||||
|
|
||||||
|
def _get_version_from_release(self, release):
|
||||||
|
"""Return the latest released version from github."""
|
||||||
|
tag = release['tag_name']
|
||||||
|
return self._get_version_from_tag(tag)
|
||||||
|
|
||||||
|
def _get_update_url_from_release(self, release):
|
||||||
|
# go through the assets and pick the one that looks like it
|
||||||
|
# best matches the system we're on
|
||||||
|
target_ext = self._extension_for_platform()
|
||||||
|
print
|
||||||
|
print target_ext
|
||||||
|
print
|
||||||
|
for asset in release['assets']:
|
||||||
|
url = asset['browser_download_url']
|
||||||
|
print
|
||||||
|
print url
|
||||||
|
print
|
||||||
|
if os.path.splitext(url)[1] == target_ext:
|
||||||
|
return url
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _extension_for_platform(self):
|
||||||
|
system = platform.system()
|
||||||
|
if system == 'Darwin':
|
||||||
|
return ".dmg"
|
||||||
|
elif system == 'Linux':
|
||||||
|
return ".deb"
|
||||||
|
else:
|
||||||
|
return ".zip"
|
||||||
|
|
||||||
|
def _get_version_from_tag(self, tag):
|
||||||
|
match = re.match('v([\d.]+)', tag)
|
||||||
|
if match:
|
||||||
|
return match.group(1)
|
||||||
|
else:
|
||||||
|
raise Exception('Failed to parse version from tag {}'.format(tag))
|
||||||
|
|
||||||
|
def is_update_available(self):
|
||||||
|
try:
|
||||||
|
return utils.version_is_greater_than(self.version, LBRYNET_VERSION)
|
||||||
|
except TypeError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
class AlwaysSend(object):
|
class AlwaysSend(object):
|
||||||
def __init__(self, value_generator, *args, **kwargs):
|
def __init__(self, value_generator, *args, **kwargs):
|
||||||
|
@ -224,7 +281,6 @@ class Daemon(AuthJSONRPCServer):
|
||||||
self.startup_status = STARTUP_STAGES[0]
|
self.startup_status = STARTUP_STAGES[0]
|
||||||
self.connected_to_internet = True
|
self.connected_to_internet = True
|
||||||
self.connection_status_code = None
|
self.connection_status_code = None
|
||||||
self.git_lbrynet_version = None
|
|
||||||
self.platform = None
|
self.platform = None
|
||||||
self.first_run = None
|
self.first_run = None
|
||||||
self.log_file = conf.settings.get_log_filename()
|
self.log_file = conf.settings.get_log_filename()
|
||||||
|
@ -249,9 +305,10 @@ class Daemon(AuthJSONRPCServer):
|
||||||
self.pending_claims = {}
|
self.pending_claims = {}
|
||||||
self.name_cache = {}
|
self.name_cache = {}
|
||||||
self.exchange_rate_manager = ExchangeRateManager()
|
self.exchange_rate_manager = ExchangeRateManager()
|
||||||
|
self._remote_version = CheckRemoteVersion()
|
||||||
calls = {
|
calls = {
|
||||||
Checker.INTERNET_CONNECTION: LoopingCall(CheckInternetConnection(self)),
|
Checker.INTERNET_CONNECTION: LoopingCall(CheckInternetConnection(self)),
|
||||||
Checker.VERSION: LoopingCall(CheckRemoteVersions(self)),
|
Checker.VERSION: LoopingCall(self._remote_version),
|
||||||
Checker.CONNECTION_STATUS: LoopingCall(self._update_connection_status),
|
Checker.CONNECTION_STATUS: LoopingCall(self._update_connection_status),
|
||||||
Checker.PENDING_CLAIM: LoopingCall(self._check_pending_claims),
|
Checker.PENDING_CLAIM: LoopingCall(self._check_pending_claims),
|
||||||
}
|
}
|
||||||
|
@ -348,9 +405,6 @@ class Daemon(AuthJSONRPCServer):
|
||||||
def _update_connection_status(self):
|
def _update_connection_status(self):
|
||||||
self.connection_status_code = CONNECTION_STATUS_CONNECTED
|
self.connection_status_code = CONNECTION_STATUS_CONNECTED
|
||||||
|
|
||||||
if not self.git_lbrynet_version:
|
|
||||||
self.connection_status_code = CONNECTION_STATUS_VERSION_CHECK
|
|
||||||
|
|
||||||
if not self.connected_to_internet:
|
if not self.connected_to_internet:
|
||||||
self.connection_status_code = CONNECTION_STATUS_NETWORK
|
self.connection_status_code = CONNECTION_STATUS_NETWORK
|
||||||
|
|
||||||
|
@ -1227,11 +1281,6 @@ class Daemon(AuthJSONRPCServer):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
platform_info = self._get_platform()
|
platform_info = self._get_platform()
|
||||||
try:
|
|
||||||
lbrynet_update_available = utils.version_is_greater_than(
|
|
||||||
self.git_lbrynet_version, LBRYNET_VERSION)
|
|
||||||
except TypeError:
|
|
||||||
lbrynet_update_available = False
|
|
||||||
msg = {
|
msg = {
|
||||||
'platform': platform_info['platform'],
|
'platform': platform_info['platform'],
|
||||||
'os_release': platform_info['os_release'],
|
'os_release': platform_info['os_release'],
|
||||||
|
@ -1239,8 +1288,9 @@ class Daemon(AuthJSONRPCServer):
|
||||||
'lbrynet_version': LBRYNET_VERSION,
|
'lbrynet_version': LBRYNET_VERSION,
|
||||||
'lbryum_version': LBRYUM_VERSION,
|
'lbryum_version': LBRYUM_VERSION,
|
||||||
'ui_version': platform_info['ui_version'],
|
'ui_version': platform_info['ui_version'],
|
||||||
'remote_lbrynet': self.git_lbrynet_version,
|
'remote_lbrynet': self._remote_version.version,
|
||||||
'lbrynet_update_available': lbrynet_update_available,
|
'lbrynet_update_available': self._remote_version.is_update_available(),
|
||||||
|
'lbrynet_update_url': self._remote_version.update_url
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("Get version info: " + json.dumps(msg))
|
log.info("Get version info: " + json.dumps(msg))
|
||||||
|
@ -2471,30 +2521,6 @@ class Daemon(AuthJSONRPCServer):
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
|
||||||
def get_lbry_electron_client_version_from_github():
|
|
||||||
return get_version_from_github(
|
|
||||||
'https://api.github.com/repos/lbryio/lbry-electron/releases/latest')
|
|
||||||
|
|
||||||
|
|
||||||
def get_version_from_github(url):
|
|
||||||
"""Return the latest released version from github."""
|
|
||||||
response = requests.get(url, timeout=20)
|
|
||||||
release = response.json()
|
|
||||||
tag = release['tag_name']
|
|
||||||
# githubs documentation claims this should never happen, but we'll check just in case
|
|
||||||
if release['prerelease']:
|
|
||||||
raise Exception('Release {} is a pre-release'.format(tag))
|
|
||||||
return get_version_from_tag(tag)
|
|
||||||
|
|
||||||
|
|
||||||
def get_version_from_tag(tag):
|
|
||||||
match = re.match('v([\d.]+)', tag)
|
|
||||||
if match:
|
|
||||||
return match.group(1)
|
|
||||||
else:
|
|
||||||
raise Exception('Failed to parse version from tag {}'.format(tag))
|
|
||||||
|
|
||||||
|
|
||||||
def get_sd_hash(stream_info):
|
def get_sd_hash(stream_info):
|
||||||
if not stream_info:
|
if not stream_info:
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in a new issue