Bugfix for not displaying information when there is no update available + simplification

pull/618/head
Virgil Grigoras 6 years ago
parent f7872aded0
commit b2b092c190

@ -568,7 +568,7 @@ def get_current_version_info():
return False return False
if is_sha1(content[0]) and len(content[1]) > 0: if is_sha1(content[0]) and len(content[1]) > 0:
return {'sha': content[0], 'datetime': content[1]} return {'hash': content[0], 'datetime': content[1]}
except FileNotFoundError: except FileNotFoundError:
return False return False
return False return False

@ -1090,6 +1090,8 @@ def get_update_status():
'message': '', 'message': '',
'current_commit_hash': '' 'current_commit_hash': ''
} }
parents = []
repository_url = 'https://api.github.com/repos/janeczku/calibre-web' repository_url = 'https://api.github.com/repos/janeczku/calibre-web'
tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone)
@ -1098,7 +1100,7 @@ def get_update_status():
if version is False: if version is False:
status['current_commit_hash'] = _(u'Unknown') status['current_commit_hash'] = _(u'Unknown')
else: else:
status['current_commit_hash'] = version['sha'] status['current_commit_hash'] = version['hash']
try: try:
r = requests.get(repository_url + '/git/refs/heads/master') r = requests.get(repository_url + '/git/refs/heads/master')
@ -1114,83 +1116,92 @@ def get_update_status():
status['message'] = _(u'General error') status['message'] = _(u'General error')
if status['message'] != '': if status['message'] != '':
status['success'] = False
return json.dumps(status) return json.dumps(status)
if 'object' in commit and commit['object']['sha'] != status['current_commit_hash']: if 'object' not in commit:
# a new update is available status['message'] = _(u'Unexpected data while reading update information')
try: return json.dumps(status)
r = requests.get(repository_url + '/git/commits/' + commit['object']['sha'])
r.raise_for_status()
update_data = r.json()
except requests.exceptions.HTTPError as ex:
status['error'] = _(u'HTTP Error') + ' ' + str(ex)
except requests.exceptions.ConnectionError:
status['error'] = _(u'Connection error')
except requests.exceptions.Timeout:
status['error'] = _(u'Timeout while establishing connection')
except requests.exceptions.RequestException:
status['error'] = _(u'General error')
if status['message'] != '':
status['success'] = False
return json.dumps(status)
if 'committer' in update_data and 'message' in update_data:
parents = []
status['update'] = True
status['success'] = True
status['message'] = _(u'A new update is available. Click on the button below update to the latest version.')
new_commit_date = datetime.datetime.strptime(
update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
parents.append(
[
format_datetime(new_commit_date, format='short', locale=get_locale()),
update_data['message'],
update_data['sha']
]
)
# it only makes sense to analyze the parents if we know the current commit hash
if status['current_commit_hash'] != '':
try:
parent_commit = update_data['parents'][0]
# limit the maximum search depth
remaining_parents_cnt = 10
except IndexError:
remaining_parents_cnt = None
if remaining_parents_cnt is not None:
while True:
if remaining_parents_cnt == 0:
break
# check if we are more than one update behind if so, go up the tree if commit['object']['sha'] == status['current_commit_hash']:
if parent_commit['sha'] != status['current_commit_hash']: status.update({
try: 'update': False,
r = requests.get(parent_commit['url']) 'success': True,
r.raise_for_status() 'message': _(u'Now update available. You already have the latest version installed')
parent_data = r.json() })
return json.dumps(status)
parent_commit_date = datetime.datetime.strptime(
parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz # a new update is available
parent_commit_date = format_datetime( status['update'] = True
parent_commit_date, format='short', locale=get_locale())
try:
parents.append([parent_commit_date, parent_data['message'], parent_data['sha']]) r = requests.get(repository_url + '/git/commits/' + commit['object']['sha'])
parent_commit = parent_data['parents'][0] r.raise_for_status()
remaining_parents_cnt -= 1 update_data = r.json()
except Exception: except requests.exceptions.HTTPError as ex:
# it isn't crucial if we can't get information about the parent status['error'] = _(u'HTTP Error') + ' ' + str(ex)
break except requests.exceptions.ConnectionError:
else: status['error'] = _(u'Connection error')
# parent is our current version except requests.exceptions.Timeout:
status['error'] = _(u'Timeout while establishing connection')
except requests.exceptions.RequestException:
status['error'] = _(u'General error')
if status['message'] != '':
return json.dumps(status)
if 'committer' in update_data and 'message' in update_data:
status['success'] = True
status['message'] = _(u'A new update is available. Click on the button below update to the latest version.')
new_commit_date = datetime.datetime.strptime(
update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
parents.append(
[
format_datetime(new_commit_date, format='short', locale=get_locale()),
update_data['message'],
update_data['sha']
]
)
# it only makes sense to analyze the parents if we know the current commit hash
if status['current_commit_hash'] != '':
try:
parent_commit = update_data['parents'][0]
# limit the maximum search depth
remaining_parents_cnt = 10
except IndexError:
remaining_parents_cnt = None
if remaining_parents_cnt is not None:
while True:
if remaining_parents_cnt == 0:
break
# check if we are more than one update behind if so, go up the tree
if parent_commit['sha'] != status['current_commit_hash']:
try:
r = requests.get(parent_commit['url'])
r.raise_for_status()
parent_data = r.json()
parent_commit_date = datetime.datetime.strptime(
parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
parent_commit_date = format_datetime(
parent_commit_date, format='short', locale=get_locale())
parents.append([parent_commit_date, parent_data['message'], parent_data['sha']])
parent_commit = parent_data['parents'][0]
remaining_parents_cnt -= 1
except Exception:
# it isn't crucial if we can't get information about the parent
break break
else: else:
status['success'] = False # parent is our current version
status['message'] = _(u'Could not fetch update information') break
else:
status['success'] = False
status['message'] = _(u'Could not fetch update information')
status['history'] = parents status['history'] = parents
return json.dumps(status) return json.dumps(status)

Loading…
Cancel
Save