e0a93a9c28
UI: - Files amb estil de targeta: icona arrodonida, títol gran, subtítol atenuat i 'pills' amb estat, versió, data de llançament, jugadors, autor i topics. Els pills envolten amb un FlowLayout nou quan no caben. - Submenú Opcions > Tema amb Sistema/Clar/Fosc; persisteix a settings.json (theme) i s'aplica a l'instant. El watcher del SO només actua en mode Sistema. Dades: - GameMeta guarda topics i created_at, llegits de la resposta de Gitea que ja demanàvem (gratis, auto-sincronitzats). - games.toml: camps opcionals players i author per joc (la resta surt de Gitea). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
"""Punto de entrada: arranca la QApplication y la ventana principal."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
|
|
from PySide6.QtWidgets import QApplication, QMessageBox
|
|
|
|
from .config import load_config
|
|
from .paths import config_file, data_root
|
|
from .ui.main_window import MainWindow
|
|
from .ui.theme import apply_theme
|
|
|
|
|
|
def main() -> int:
|
|
app = QApplication(sys.argv)
|
|
app.setApplicationName("jlauncher")
|
|
# Tema del sistema para el posible diálogo de error previo a la ventana;
|
|
# MainWindow re-aplica el modo guardado (system/light/dark) y vigila los cambios.
|
|
apply_theme(app)
|
|
|
|
cfg_path = config_file()
|
|
try:
|
|
config = load_config(cfg_path)
|
|
except Exception as exc: # noqa: BLE001 - mostrar cualquier error de carga al usuario
|
|
QMessageBox.critical(
|
|
None,
|
|
"Error carregant games.toml",
|
|
f"No s'ha pogut llegir la configuració a:\n{cfg_path}\n\n{exc}",
|
|
)
|
|
return 1
|
|
|
|
window = MainWindow(config, data_root(config.data_dir))
|
|
window.show()
|
|
return app.exec()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|