Interfície en català, botó Esborra i botons d'icona segons l'estat

This commit is contained in:
2026-05-29 21:55:34 +02:00
parent 235a3966d2
commit 694d67f11e
6 changed files with 117 additions and 45 deletions
+39 -13
View File
@@ -8,6 +8,7 @@ from PySide6.QtCore import QThreadPool, Qt
from PySide6.QtGui import QAction
from PySide6.QtWidgets import (
QMainWindow,
QMessageBox,
QPlainTextEdit,
QScrollArea,
QSplitter,
@@ -15,6 +16,7 @@ from PySide6.QtWidgets import (
QWidget,
)
from .. import gitops
from ..config import Config, Game
from ..settings import load_settings, save_settings
from ..workers import CheckUpdatesWorker, DownloadWorker, RunWorker
@@ -53,6 +55,7 @@ class MainWindow(QMainWindow):
row = GameRow(game, root)
row.download_requested.connect(self._on_download)
row.run_requested.connect(self._on_run)
row.delete_requested.connect(self._on_delete)
self.rows[game.id] = row
list_layout.addWidget(row)
list_layout.addStretch(1)
@@ -82,14 +85,14 @@ class MainWindow(QMainWindow):
# --------------------------------------------------------------- menú
def _build_menu(self) -> None:
menu = self.menuBar().addMenu("Opciones")
menu = self.menuBar().addMenu("Opcions")
self.action_hide = QAction("Ocultar juegos no descargados", self, checkable=True)
self.action_hide = QAction("Amaga els jocs no descarregats", self, checkable=True)
self.action_hide.setChecked(self.settings.hide_not_downloaded)
self.action_hide.toggled.connect(self._on_toggle_hide)
menu.addAction(self.action_hide)
self.action_check = QAction("Comprobar actualizaciones", self)
self.action_check = QAction("Comprova actualitzacions", self)
self.action_check.triggered.connect(self._check_updates)
menu.addAction(self.action_check)
@@ -107,7 +110,7 @@ class MainWindow(QMainWindow):
def _check_updates(self) -> None:
self.action_check.setEnabled(False)
self._log("=== Comprobando actualizaciones ===")
self._log("=== Comprovant actualitzacions ===")
worker = CheckUpdatesWorker(self.root, self.config.games)
worker.signals.log.connect(self._log)
worker.signals.result.connect(self._mark_update)
@@ -127,11 +130,11 @@ class MainWindow(QMainWindow):
def _check_done(self, _payload) -> None:
self.action_check.setEnabled(True)
self._log("=== Comprobación de actualizaciones terminada ===")
self._log("=== Comprovació d'actualitzacions acabada ===")
def _check_error(self, msg: str) -> None:
self.action_check.setEnabled(True)
self._log(f"!!! Error comprobando actualizaciones: {msg}")
self._log(f"!!! Error comprovant actualitzacions: {msg}")
# --------------------------------------------------------------- helpers
@@ -146,12 +149,12 @@ class MainWindow(QMainWindow):
worker.signals.finished.connect(lambda *_: self._workers.discard(worker))
worker.signals.error.connect(lambda *_: self._workers.discard(worker))
# --------------------------------------------------------------- acciones
# --------------------------------------------------------------- accions
def _on_download(self, game: Game) -> None:
row = self.rows[game.id]
row.set_busy(True, "Descargando")
self._log(f"=== Download: {game.name} ===")
row.set_busy(True, "Descarregant")
self._log(f"=== Descàrrega: {game.name} ===")
worker = DownloadWorker(self.root, game)
worker.signals.log.connect(self._log)
@@ -161,7 +164,7 @@ class MainWindow(QMainWindow):
self.pool.start(worker)
def _download_done(self, game: Game) -> None:
self._log(f"=== {game.name}: descarga completada ===")
self._log(f"=== {game.name}: descàrrega completada ===")
row = self.rows[game.id]
row.set_busy(False)
row.set_update_available(False) # recién traído del remoto → al día
@@ -174,8 +177,8 @@ class MainWindow(QMainWindow):
def _on_run(self, game: Game) -> None:
row = self.rows[game.id]
row.set_busy(True, "Ejecutando")
self._log(f"=== Run: {game.name} ===")
row.set_busy(True, "Executant")
self._log(f"=== Juga: {game.name} ===")
worker = RunWorker(self.root, game)
worker.signals.log.connect(self._log)
@@ -185,7 +188,7 @@ class MainWindow(QMainWindow):
self.pool.start(worker)
def _run_done(self, game: Game, code: int) -> None:
self._log(f"=== {game.name}: finalizó con código {code} ===")
self._log(f"=== {game.name}: ha finalitzat amb codi {code} ===")
row = self.rows[game.id]
row.set_busy(False)
row.refresh()
@@ -195,3 +198,26 @@ class MainWindow(QMainWindow):
row = self.rows[game.id]
row.set_busy(False)
row.refresh()
def _on_delete(self, game: Game) -> None:
resp = QMessageBox.question(
self,
"Esborrar descàrrega",
f"Segur que vols esborrar la descàrrega local de «{game.name}»?\n\n"
"S'eliminarà el clon i les dades en local (no es treu de la llista).",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No,
)
if resp != QMessageBox.Yes:
return
self._log(f"=== Esborra: {game.name} ===")
gitops.delete_local(self.root, game, log=self._log)
if game.id in self.settings.updates_pending:
self.settings.updates_pending = [
g for g in self.settings.updates_pending if g != game.id
]
save_settings(self.settings)
row = self.rows[game.id]
row.set_update_available(False)
row.refresh()
self._apply_filter() # si està actiu "amaga no descarregats", ara s'amaga