1
0
forked from Mirrors/RGSX

Ajout verification des liens dispo au demarrage, création d'un fichier txt dans le dossier log pour indiquer les systèmes hs

This commit is contained in:
skymike03
2025-07-11 00:34:06 +02:00
parent dd028c6c95
commit 0c9cbea9b3
4 changed files with 61 additions and 55 deletions

View File

@@ -12,7 +12,7 @@ from display import init_display, draw_loading_screen, draw_error_screen, draw_p
from network import test_internet, download_rom, check_extension_before_download, extract_zip from network import test_internet, download_rom, check_extension_before_download, extract_zip
from controls import handle_controls, validate_menu_state from controls import handle_controls, validate_menu_state
from controls_mapper import load_controls_config, map_controls, draw_controls_mapping, ACTIONS from controls_mapper import load_controls_config, map_controls, draw_controls_mapping, ACTIONS
from utils import load_games from utils import load_games, write_unavailable_systems
from history import load_history from history import load_history
import config import config
@@ -159,6 +159,7 @@ def load_sources():
games = load_games(platform) games = load_games(platform)
config.games_count[platform] = len(games) config.games_count[platform] = len(games)
logger.debug(f"Jeux chargés pour {platform}: {len(games)} jeux") logger.debug(f"Jeux chargés pour {platform}: {len(games)} jeux")
write_unavailable_systems()
logger.debug(f"load_sources: platforms={config.platforms}, platform_names={config.platform_names}, games_count={config.games_count}") logger.debug(f"load_sources: platforms={config.platforms}, platform_names={config.platform_names}, games_count={config.games_count}")
return sources return sources
except Exception as e: except Exception as e:

View File

@@ -5,7 +5,7 @@ import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
# Version actuelle de l'application # Version actuelle de l'application
app_version = "1.9.0" app_version = "1.9.1"
# Variables d'état # Variables d'état
platforms = [] platforms = []

View File

@@ -18,21 +18,6 @@ logger = logging.getLogger(__name__)
JSON_EXTENSIONS = "/userdata/roms/ports/RGSX/rom_extensions.json" JSON_EXTENSIONS = "/userdata/roms/ports/RGSX/rom_extensions.json"
cache = {} cache = {}
CACHE_TTL = 3600 # 1 heure CACHE_TTL = 3600 # 1 heure
def fetch_data(url):
"""Récupère des données depuis une URL avec mise en cache."""
current_time = time.time()
if url in cache and current_time - cache[url]["timestamp"] < CACHE_TTL:
return cache[url]["data"]
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
cache[url] = {"data": data, "timestamp": current_time}
return data
except requests.RequestException as e:
logging.error(f"Erreur lors de la requête {url} : {e}")
return None
def test_internet(): def test_internet():
logger.debug("Test de connexion Internet") logger.debug("Test de connexion Internet")

View File

@@ -2,28 +2,69 @@ import pygame # type: ignore
import re import re
import json import json
import os import os
import config
import logging import logging
import requests
from datetime import datetime
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def create_placeholder(width=400): # Liste globale pour stocker les systèmes avec une erreur 404
"""Crée une image de substitution pour les jeux sans vignette.""" unavailable_systems = []
logger.debug(f"Création placeholder: largeur={width}")
if config.font is None:
# Police de secours si config.font nest pas initialisé
fallback_font = pygame.font.SysFont("arial", 24)
text = fallback_font.render("No Image", True, (255, 255, 255))
else:
text = config.font.render("No Image", True, (255, 255, 255))
height = int(150 * (width / 200))
placeholder = pygame.Surface((width, height))
placeholder.fill((50, 50, 50))
text_rect = text.get_rect(center=(width // 2, height // 2))
placeholder.blit(text, text_rect)
return placeholder
def load_games(platform_id):
"""Charge les jeux pour une plateforme donnée en utilisant platform_id et teste la première URL."""
games_path = f"/userdata/roms/ports/RGSX/games/{platform_id}.json"
try:
with open(games_path, 'r', encoding='utf-8') as f:
games = json.load(f)
# Tester la première URL si la liste n'est pas vide
if games and len(games) > 0 and len(games[0]) > 1:
first_url = games[0][1]
try:
response = requests.head(first_url, timeout=5, allow_redirects=True)
if response.status_code == 404:
logger.error(f"URL non accessible pour {platform_id} : {first_url} (code 404)")
unavailable_systems.append(platform_id) # Ajouter à la liste globale
except requests.RequestException as e:
logger.error(f"Erreur lors du test de l'URL pour {platform_id} : {first_url} ({str(e)})")
else:
logger.debug(f"Aucune URL à tester pour {platform_id} (liste vide ou mal formée)")
logger.debug(f"Jeux chargés pour {platform_id}: {len(games)} jeux")
return games
except Exception as e:
logger.error(f"Erreur lors du chargement des jeux pour {platform_id} : {str(e)}")
return []
def write_unavailable_systems():
"""Écrit la liste des systèmes avec une erreur 404 dans un fichier texte."""
if not unavailable_systems:
logger.debug("Aucun système avec une erreur 404, aucun fichier écrit")
return
# Formater la date et l'heure pour le nom du fichier
current_time = datetime.now()
timestamp = current_time.strftime("%d-%m-%Y-%H-%M")
log_dir = "/userdata/roms/ports/logs/RGSX"
log_file = f"{log_dir}/systemes_unavailable_{timestamp}.txt"
try:
# Créer le répertoire s'il n'existe pas
os.makedirs(log_dir, exist_ok=True)
# Écrire les systèmes dans le fichier
with open(log_file, 'w', encoding='utf-8') as f:
f.write("Systèmes avec une erreur 404 :\n")
for system in unavailable_systems:
f.write(f"{system}\n")
logger.debug(f"Fichier écrit : {log_file} avec {len(unavailable_systems)} systèmes")
except Exception as e:
logger.error(f"Erreur lors de l'écriture du fichier {log_file} : {str(e)}")
def truncate_text_middle(text, font, max_width): def truncate_text_middle(text, font, max_width):
"""Tronque le texte en insérant '...' au milieu, en préservant le début et la fin, sans extension de fichier.""" """Tronque le texte en insérant '...' au milieu, en préservant le début et la fin, sans extension de fichier."""
# Supprimer l'extension de fichier # Supprimer l'extension de fichier
@@ -149,24 +190,3 @@ def load_system_image(platform_dict):
except Exception as e: except Exception as e:
logger.error(f"Erreur lors du chargement de l'image pour {platform_name} : {str(e)}") logger.error(f"Erreur lors du chargement de l'image pour {platform_name} : {str(e)}")
return None return None
def load_games(platform_id):
"""Charge les jeux pour une plateforme donnée en utilisant platform_id."""
games_path = f"/userdata/roms/ports/RGSX/games/{platform_id}.json"
#logger.debug(f"Chargement des jeux pour {platform_id} depuis {games_path}")
try:
with open(games_path, 'r', encoding='utf-8') as f:
games = json.load(f)
return games
except Exception as e:
logger.error(f"Erreur lors du chargement des jeux pour {platform_id} : {str(e)}")
return []
def load_json_file(path, default=None):
"""Charge un fichier JSON avec gestion d'erreur."""
try:
with open(path, "r") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError) as e:
logging.error(f"Erreur lors de la lecture de {path} : {e}")
return default if default is not None else {}