diff --git a/src/main_window.py b/src/main_window.py index 78a42c9..cd43bbc 100644 --- a/src/main_window.py +++ b/src/main_window.py @@ -201,6 +201,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): "tooltip_text": "", } + # The GUI often starts before the network is up (autostart on login), so the + # GitHub lookups are retried a few times before giving up. + self.version_check_retry_interval = 60000 + self.version_check_max_attempts = 10 + self.client_version_check_attempts = 0 + self.gui_version_check_attempts = 0 + self.refresh_process_status = QTimer() self.refresh_process_status.setSingleShot(False) self.refresh_process_status.timeout.connect(self.onedrive_process_status) @@ -336,7 +343,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): def get_latest_client_version(): latest_url = "https://api.github.com/repos/abraunegg/onedrive/releases/latest" try: - latest_client_version = s.get(latest_url, timeout=1).json()["tag_name"] + latest_client_version = s.get(latest_url, timeout=3).json()["tag_name"] return latest_client_version except Exception as e: @@ -372,8 +379,13 @@ class MainWindow(QMainWindow, Ui_MainWindow): min_requirements_met = False elif not latest_client_version: - version_label_text = "Unable to check for latest OneDrive client version!" - version_tooltip_text = "Unable to check for latest OneDrive client version!" + self.client_version_check_attempts += 1 + if self.client_version_check_attempts < self.version_check_max_attempts: + logging.warning(f"[GUI] Unable to check for latest OneDrive client version, retrying (attempt {self.client_version_check_attempts})") + self.check_client_version.start(self.version_check_retry_interval) + else: + version_label_text = "Unable to check for latest OneDrive client version!" + version_tooltip_text = "Unable to check for latest OneDrive client version!" elif installed_client_version[1] < min_supported_version: version_label_text = ( @@ -427,7 +439,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): """Fetch latest GUI version from GitHub releases""" latest_url = "https://api.github.com/repos/bpozdena/OneDriveGUI/releases/latest" try: - response = s.get(latest_url, timeout=1) + response = s.get(latest_url, timeout=3) latest_gui_version = response.json()["tag_name"] return latest_gui_version except Exception as e: @@ -439,8 +451,11 @@ class MainWindow(QMainWindow, Ui_MainWindow): installed_gui_version = version # From options.py if not latest_gui_version: - # Network issue or API error - don't show warning - logging.warning("[GUI] Unable to check for latest OneDriveGUI version") + # Network issue or API error, do not show a warning, retry later + self.gui_version_check_attempts += 1 + if self.gui_version_check_attempts < self.version_check_max_attempts: + self.check_gui_version.start(self.version_check_retry_interval) + logging.warning(f"[GUI] Unable to check for latest OneDriveGUI version (attempt {self.gui_version_check_attempts})") return # Parse versions for comparison