Barra de progrés per a la comprovació d'actualitzacions
- CheckUpdatesWorker emet progress(done, total) per cada joc intentat (èxit o error), amb total = jocs descarregats; així la barra arriba al final encara que algun repo doni timeout. - QProgressBar a la status bar (amagada per defecte) que es mostra durant la comprovació i s'amaga en acabar o en error. Reutilitzada pel check manual i l'automàtic a l'inici. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+11
-5
@@ -20,6 +20,7 @@ class _Signals(QObject):
|
||||
finished = Signal(object) # payload según el worker (GameMeta o int exit code)
|
||||
error = Signal(str) # mensaje de error
|
||||
result = Signal(str, bool) # (game_id, has_update) — CheckUpdatesWorker
|
||||
progress = Signal(int, int) # (done, total) — CheckUpdatesWorker
|
||||
|
||||
|
||||
class DownloadWorker(QRunnable):
|
||||
@@ -94,9 +95,13 @@ class CheckUpdatesWorker(QRunnable):
|
||||
|
||||
def run(self) -> None: # noqa: D401 - API de QRunnable
|
||||
try:
|
||||
for game in self.games:
|
||||
if not gitops.is_installed(self.root, game):
|
||||
continue
|
||||
# Total = juegos descargados (los no instalados no se comprueban). Emitimos
|
||||
# progress por cada juego *intentado*, éxito o error, para que la barra
|
||||
# llegue siempre al final aunque algún repo dé timeout.
|
||||
installed = [g for g in self.games if gitops.is_installed(self.root, g)]
|
||||
total = len(installed)
|
||||
self.signals.progress.emit(0, total)
|
||||
for done, game in enumerate(installed, start=1):
|
||||
try:
|
||||
has_update = gitops.check_update(
|
||||
self.root,
|
||||
@@ -107,8 +112,9 @@ class CheckUpdatesWorker(QRunnable):
|
||||
)
|
||||
except Exception as exc: # noqa: BLE001 - no abortar el resto
|
||||
self.signals.log.emit(f"check {game.id}: {exc}")
|
||||
continue
|
||||
self.signals.result.emit(game.id, has_update)
|
||||
else:
|
||||
self.signals.result.emit(game.id, has_update)
|
||||
self.signals.progress.emit(done, total)
|
||||
except Exception as exc: # noqa: BLE001 - reportar a la UI
|
||||
self.signals.error.emit(str(exc))
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user