import os from ..constants import PROJECTS_DIR from ..connection import connect from ..db_path import db_path from .project_slug import build_slug def list_games(): """Scanne projects/ : structure par utilisateur (voir db/games/project_slug.py) — projects///game.db, deux niveaux — plus le repli sur l'ancien rangement plat projects//game.db pour tout slug pas encore migré (voir scripts/migrate_flat_project_slugs.py).""" games = [] if not os.path.isdir(PROJECTS_DIR): return games for entry in sorted(os.listdir(PROJECTS_DIR)): entry_path = os.path.join(PROJECTS_DIR, entry) if not os.path.isdir(entry_path): continue if os.path.isfile(os.path.join(entry_path, "game.db")): # Repli : un ancien dossier plat porte directement game.db. _append_game(games, entry) continue for project_part in sorted(os.listdir(entry_path)): slug = build_slug(entry, project_part) if os.path.isfile(db_path(slug)): _append_game(games, slug) return games def _append_game(games, slug): conn = connect(slug) row = conn.execute("SELECT value FROM _meta WHERE key = 'name'").fetchone() conn.close() games.append({"slug": slug, "name": row["value"] if row else slug})