Menú d'opcions: ocultar no descarregats i comprovar actualitzacions, amb persistència

This commit is contained in:
2026-05-29 21:29:12 +02:00
parent 9d13c2434b
commit 235a3966d2
7 changed files with 200 additions and 6 deletions
+15 -2
View File
@@ -32,6 +32,7 @@ class GameRow(QFrame):
super().__init__(parent)
self.game = game
self.root = root
self._update_available = False
self.setObjectName("gameRow")
self.setFrameShape(QFrame.StyledPanel)
@@ -79,6 +80,14 @@ class GameRow(QFrame):
# ----------------------------------------------------------------- estado
def is_installed(self) -> bool:
return (repo_dir(self.root, self.game.id) / ".git").exists()
def set_update_available(self, available: bool) -> None:
"""Marca/desmarca la fila como 'tiene actualización pendiente'."""
self._update_available = available
self.refresh()
def refresh(self) -> None:
"""Recarga icono, descripción y estado desde la cache local."""
meta = load_meta(self.root, self.game.id)
@@ -104,11 +113,15 @@ class GameRow(QFrame):
)
def _set_status(self, meta: GameMeta) -> None:
installed = (repo_dir(self.root, self.game.id) / ".git").exists()
if not installed:
if not self.is_installed():
self.status_label.setText("No instalado")
self.status_label.setStyleSheet("color: #cc8855; font-size: 11px;")
self.run_btn.setEnabled(True) # se permite, avisará si no está
elif self._update_available:
self.status_label.setText("⬆ Actualización disponible")
self.status_label.setStyleSheet(
"color: #e0a030; font-weight: bold; font-size: 11px;"
)
else:
ver = f" {meta.version}" if meta.version else ""
self.status_label.setText(f"Instalado{ver}")