Comprovació d'updates a l'inici opcional + timeouts de xarxa configurables
- Opció marcable «Comprova actualitzacions a l'inici» al menú; persisteix a settings.json i llança la comprovació diferida en obrir la finestra. - Tolerància a repos offline/inalcanzables: low-speed abort + techo dur de temps a les operacions git de xarxa (fetch/clone), evitant cuelgues. - Timeouts exposats a settings.json (git_fetch_timeout, git_clone_timeout, http_timeout, git_stall_limit, git_stall_time) via NetConfig, propagats UI -> workers -> gitops. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from PySide6.QtCore import QThreadPool, Qt
|
||||
from PySide6.QtCore import QThreadPool, Qt, QTimer
|
||||
from PySide6.QtGui import QAction
|
||||
from PySide6.QtWidgets import (
|
||||
QInputDialog,
|
||||
@@ -84,6 +84,22 @@ class MainWindow(QMainWindow):
|
||||
self.rows[game_id].set_update_available(True)
|
||||
self._apply_filter()
|
||||
|
||||
# Comprobación automática de updates al iniciar (si está activada). Se difiere
|
||||
# con un timer 0 para que la ventana se muestre antes de lanzar el worker.
|
||||
if self.settings.check_updates_on_start:
|
||||
QTimer.singleShot(0, self._check_updates)
|
||||
|
||||
def _net_config(self) -> gitops.NetConfig:
|
||||
"""Construye la config de red/timeouts a partir de las preferencias guardadas."""
|
||||
s = self.settings
|
||||
return gitops.NetConfig(
|
||||
fetch_timeout=s.git_fetch_timeout,
|
||||
clone_timeout=s.git_clone_timeout,
|
||||
http_timeout=s.http_timeout,
|
||||
stall_limit=s.git_stall_limit,
|
||||
stall_time=s.git_stall_time,
|
||||
)
|
||||
|
||||
# --------------------------------------------------------------- menú
|
||||
|
||||
def _build_menu(self) -> None:
|
||||
@@ -98,6 +114,13 @@ class MainWindow(QMainWindow):
|
||||
self.action_check.triggered.connect(self._check_updates)
|
||||
menu.addAction(self.action_check)
|
||||
|
||||
self.action_check_on_start = QAction(
|
||||
"Comprova actualitzacions a l'inici", self, checkable=True
|
||||
)
|
||||
self.action_check_on_start.setChecked(self.settings.check_updates_on_start)
|
||||
self.action_check_on_start.toggled.connect(self._on_toggle_check_on_start)
|
||||
menu.addAction(self.action_check_on_start)
|
||||
|
||||
menu.addSeparator()
|
||||
self.action_delete = QAction("Esborra un joc", self, checkable=True)
|
||||
self.action_delete.toggled.connect(self._set_delete_mode)
|
||||
@@ -129,6 +152,10 @@ class MainWindow(QMainWindow):
|
||||
save_settings(self.settings)
|
||||
self._apply_filter()
|
||||
|
||||
def _on_toggle_check_on_start(self, checked: bool) -> None:
|
||||
self.settings.check_updates_on_start = checked
|
||||
save_settings(self.settings)
|
||||
|
||||
def _apply_filter(self) -> None:
|
||||
hide = self.action_hide.isChecked()
|
||||
for row in self.rows.values():
|
||||
@@ -139,7 +166,9 @@ class MainWindow(QMainWindow):
|
||||
def _check_updates(self) -> None:
|
||||
self.action_check.setEnabled(False)
|
||||
self._log("=== Comprovant actualitzacions ===")
|
||||
worker = CheckUpdatesWorker(self.root, self.config.games, self.settings.gitea_token)
|
||||
worker = CheckUpdatesWorker(
|
||||
self.root, self.config.games, self.settings.gitea_token, self._net_config()
|
||||
)
|
||||
worker.signals.log.connect(self._log)
|
||||
worker.signals.result.connect(self._mark_update)
|
||||
worker.signals.finished.connect(self._check_done)
|
||||
@@ -208,7 +237,9 @@ class MainWindow(QMainWindow):
|
||||
row.set_busy(True, "Descarregant…")
|
||||
self._log(f"=== Descàrrega: {game.name} ===")
|
||||
|
||||
worker = DownloadWorker(self.root, game, self.settings.gitea_token)
|
||||
worker = DownloadWorker(
|
||||
self.root, game, self.settings.gitea_token, self._net_config()
|
||||
)
|
||||
worker.signals.log.connect(self._log)
|
||||
worker.signals.finished.connect(lambda _meta, g=game: self._download_done(g))
|
||||
worker.signals.error.connect(lambda msg, g=game: self._op_error(g, msg))
|
||||
|
||||
Reference in New Issue
Block a user