catch strange behavior of strptime in get_zsync

This commit is contained in:
Dominik Demuth 2023-04-04 16:43:14 +00:00
parent ebf3e9635d
commit 2fbaa94109

View File

@ -1,6 +1,5 @@
from __future__ import annotations from __future__ import annotations
import sys
from functools import lru_cache from functools import lru_cache
from os import getenv, stat from os import getenv, stat
from os.path import exists from os.path import exists
@ -116,29 +115,29 @@ class UpdateDialog(QtWidgets.QDialog):
# Download zsync file of latest Appimage, look for SHA-1 hash and compare with hash of AppImage # Download zsync file of latest Appimage, look for SHA-1 hash and compare with hash of AppImage
is_updateble, m_time_file, m_time_zsync = self.updater.get_update_information(filename) is_updateble, m_time_file, m_time_zsync = self.updater.get_update_information(filename)
if m_time_zsync is None: label_text = ''
label_text = '<p>Retrieval of version information failed.</p>' \
'<p>Please try later (or complain to people that it does not work).</p>' if is_updateble is None:
label_text += '<p>Could not determine if this version is newer, please update manually (if necessary).</p>'
dialog_bttns = QtWidgets.QDialogButtonBox.Close dialog_bttns = QtWidgets.QDialogButtonBox.Close
elif is_updateble:
label_text += '<p>Newer version available. Press Ok to download new version, Cancel to ignore.</p>'
dialog_bttns = QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel
else: else:
label_text = f'<p>Date of most recent AppImage: {m_time_zsync.strftime("%d %B %Y %H:%M")}</p>' label_text += '<p>Version may be already up-to-date.</p>'
dialog_bttns = QtWidgets.QDialogButtonBox.Close
if m_time_zsync is None:
label_text += '<p>Creation date of remote version is unknown.</p>'
else:
label_text += f'<p>Date of most recent AppImage: {m_time_zsync.strftime("%d %B %Y %H:%M")}</p>'
if m_time_file is None: if m_time_file is None:
label_text += 'No AppImage file found, press Ok to download latest version.' label_text += 'No AppImage file found, press Ok to download latest version.'
dialog_bttns = QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.Close dialog_bttns = QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Close
else: else:
label_text += f'<p>Date of used AppImage: {m_time_file.strftime("%d %B %Y %H:%M")}</p>' label_text += f'<p>Date of used AppImage: {m_time_file.strftime("%d %B %Y %H:%M")}</p>'
if is_updateble is None:
self.status.setText('Could not determine if this version is newer, please update manually (if necessary).')
dialog_bttns = QtWidgets.QDialogButtonBox.Close
elif is_updateble:
self.status.setText(f'<p>Newer version available. Press Ok to download new version, Cancel to ignore.')
dialog_bttns = QtWidgets.QDialogButtonBox.Ok|QtWidgets.QDialogButtonBox.Cancel
else:
self.status.setText(f'Version may be already up-to-date.')
dialog_bttns = QtWidgets.QDialogButtonBox.Close
self.label.setText(label_text) self.label.setText(label_text)
self.dialog_button.setStandardButtons(dialog_bttns) self.dialog_button.setStandardButtons(dialog_bttns)
@ -241,8 +240,13 @@ class Updater:
for line in zsync_file.split(b'\n'): for line in zsync_file.split(b'\n'):
try: try:
kw, val = line.split(b': ') kw, val = line.split(b': ')
time_string = str(val, encoding='utf-8')
time_format = '%a, %d %b %Y %H:%M:%S %z'
if kw == b'MTime': if kw == b'MTime':
m_time_zsync = datetime.strptime(str(val, encoding='utf-8'), '%a, %d %b %Y %H:%M:%S %z').astimezone(None) try:
m_time_zsync = datetime.strptime(time_string, time_format).astimezone(None)
except ValueError:
logger.warning(f'zsync time "{time_string}" does not match "{time_format}"')
elif kw == b'SHA-1': elif kw == b'SHA-1':
checksum_zsync = str(val, encoding='utf-8') checksum_zsync = str(val, encoding='utf-8')
elif kw == b'Filename': elif kw == b'Filename':
@ -277,7 +281,7 @@ class Updater:
m_time_file, checksum_file = Updater.get_appimage_info(filename) m_time_file, checksum_file = Updater.get_appimage_info(filename)
logger.info(f'zsync information {m_time_zsync}, {checksum_zsync}, {appname}') logger.info(f'zsync information {m_time_zsync}, {checksum_zsync}, {appname}')
logger.info(f'file information {m_time_file}, {checksum_zsync}') logger.info(f'file information {m_time_file}, {checksum_file}')
if not ((checksum_file is not None) and (checksum_zsync is not None)): if not ((checksum_file is not None) and (checksum_zsync is not None)):
return None, m_time_file, m_time_zsync return None, m_time_file, m_time_zsync