Mode esborrar des del menú: tria un joc descarregat i s'elimina

This commit is contained in:
2026-05-29 22:13:58 +02:00
parent 0334e79480
commit bfa01f31e3
2 changed files with 47 additions and 6 deletions
+27 -3
View File
@@ -34,6 +34,7 @@ class MainWindow(QMainWindow):
self.settings = load_settings()
self.pool = QThreadPool.globalInstance()
self.rows: dict[str, GameRow] = {}
self._delete_mode = False
# Mantener referencias a los workers en vuelo: si no, Python los recolecta
# (junto a su objeto de señales) antes de que la señal en cola `finished`
# llegue al hilo principal, y la UI nunca se refresca.
@@ -95,6 +96,11 @@ class MainWindow(QMainWindow):
self.action_check.triggered.connect(self._check_updates)
menu.addAction(self.action_check)
menu.addSeparator()
self.action_delete = QAction("Esborra un joc", self, checkable=True)
self.action_delete.toggled.connect(self._set_delete_mode)
menu.addAction(self.action_delete)
def _on_toggle_hide(self, checked: bool) -> None:
self.settings.hide_not_downloaded = checked
save_settings(self.settings)
@@ -150,9 +156,25 @@ class MainWindow(QMainWindow):
# --------------------------------------------------------------- accions
def _set_delete_mode(self, on: bool) -> None:
self._delete_mode = on
for row in self.rows.values():
row.set_delete_mode(on)
if on:
self._log(
"Mode esborrar: tria un joc descarregat per eliminar-lo "
"(o desmarca «Esborra un joc» per cancel·lar)."
)
def _on_activate(self, game: Game) -> None:
"""Clic sobre la fila: descarrega/actualitza si cal, si no juga."""
"""Clic sobre la fila. En mode esborrar elimina; si no, descarrega/actualitza o juga."""
row = self.rows[game.id]
if self._delete_mode:
if not row.is_installed():
return # res a esborrar; segueix en mode esborrar
if self._on_delete(game):
self.action_delete.setChecked(False) # surt del mode esborrar
return
if row.primary_action_is_download():
self._on_download(game)
else:
@@ -206,7 +228,8 @@ class MainWindow(QMainWindow):
row.set_busy(False)
row.refresh()
def _on_delete(self, game: Game) -> None:
def _on_delete(self, game: Game) -> bool:
"""Esborra la descàrrega local (amb confirmació). Retorna True si s'ha esborrat."""
resp = QMessageBox.question(
self,
"Esborrar descàrrega",
@@ -216,7 +239,7 @@ class MainWindow(QMainWindow):
QMessageBox.No,
)
if resp != QMessageBox.Yes:
return
return False
self._log(f"=== Esborra: {game.name} ===")
gitops.delete_local(self.root, game, log=self._log)
if game.id in self.settings.updates_pending:
@@ -228,3 +251,4 @@ class MainWindow(QMainWindow):
row.set_update_available(False)
row.refresh()
self._apply_filter() # si està actiu "amaga no descarregats", ara s'amaga
return True