From 59e85cf47b434a582218e720978b396e830a0659 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:09:37 +0000 Subject: [PATCH 1/3] Initial plan From 9f55fa5417c280d52edb7907b0ba38c438d4f2a2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:25:21 +0000 Subject: [PATCH 2/3] Clean up code: remove duplicates, unused variables, and improve error handling Co-authored-by: RetroGameSets <102905084+RetroGameSets@users.noreply.github.com> --- ports/RGSX/__main__.py | 7 ++----- ports/RGSX/controls.py | 5 ----- ports/RGSX/display.py | 41 ----------------------------------------- ports/RGSX/network.py | 8 ++++---- ports/RGSX/utils.py | 11 ++++++----- 5 files changed, 12 insertions(+), 60 deletions(-) diff --git a/ports/RGSX/__main__.py b/ports/RGSX/__main__.py index 3ed29a2..dbf6252 100644 --- a/ports/RGSX/__main__.py +++ b/ports/RGSX/__main__.py @@ -12,7 +12,7 @@ from language import handle_language_menu_events, _ from network import test_internet, download_rom, is_1fichier_url, download_from_1fichier, check_for_updates from controls import handle_controls, validate_menu_state, process_key_repeats from controls_mapper import load_controls_config, map_controls, draw_controls_mapping, ACTIONS -from utils import detect_non_pc, load_sources, check_extension_before_download, extract_zip_data, play_random_music +from utils import detect_non_pc, load_sources, check_extension_before_download, extract_zip_data, play_random_music, load_accessibility_settings, load_music_config from history import load_history, save_history import config from config import OTA_data_ZIP @@ -34,9 +34,8 @@ except Exception as e: logger = logging.getLogger(__name__) -# Initialisation de Pygame et des polices +# Initialisation de Pygame pygame.init() -config.init_font() pygame.joystick.init() logger.debug("--------------------------------------------------------------------") logger.debug("---------------------------DEBUT LOG--------------------------------") @@ -44,7 +43,6 @@ logger.debug("------------------------------------------------------------------ # Chargement des paramètres d'accessibilité -from utils import load_accessibility_settings config.accessibility_settings = load_accessibility_settings() for i, scale in enumerate(config.font_scale_options): if scale == config.accessibility_settings.get("font_scale", 1.0): @@ -138,7 +136,6 @@ if pygame.joystick.get_count() > 0: # Initialisation du mixer Pygame pygame.mixer.pre_init(44100, -16, 2, 4096) pygame.mixer.init() -from utils import load_music_config load_music_config() diff --git a/ports/RGSX/controls.py b/ports/RGSX/controls.py index 3a84b0b..26fc4a8 100644 --- a/ports/RGSX/controls.py +++ b/ports/RGSX/controls.py @@ -17,10 +17,6 @@ from language import _ # Import de la fonction de traduction logger = logging.getLogger(__name__) -# Délais spécifiques pour les contrôles -JOYHAT_DEBOUNCE = 150 # Délai anti-rebond pour JOYHATMOTION (ms) -JOYAXIS_DEBOUNCE = 150 # Délai anti-rebond pour JOYAXISMOTION (ms) - # Variables globales pour la répétition key_states = {} # Dictionnaire pour suivre l'état des touches @@ -33,7 +29,6 @@ VALID_STATES = [ ] def validate_menu_state(state): - valid_states = ["platform", "game", "download_progress", "download_result", "confirm_exit", "extension_warning", "pause_menu", "controls_help", "controls_mapping", "redownload_game_cache", "restart_popup", "confirm_clear_history", "language_select"] if state not in VALID_STATES: logger.debug(f"État invalide {state}, retour à platform") return "platform" diff --git a/ports/RGSX/display.py b/ports/RGSX/display.py index 8c4a647..10970f1 100644 --- a/ports/RGSX/display.py +++ b/ports/RGSX/display.py @@ -1251,56 +1251,15 @@ def draw_pause_menu(screen, selected_option): def draw_controls_help(screen, previous_state): """Affiche la liste des contrôles avec un style moderne.""" # Définir les noms d'actions traduits en dehors des f-strings pour éviter les problèmes de syntaxe - confirm_text = _("controls_action_confirm") - cancel_text = _("controls_action_cancel") start_text = _("controls_action_start") progress_text = _("controls_action_progress") up_text = _("controls_action_up") down_text = _("controls_action_down") - page_up_text = _("controls_action_page_up") - page_down_text = _("controls_action_page_down") filter_text = _("controls_action_filter") history_text = _("controls_action_history") delete_text = _("controls_action_delete") space_text = _("controls_action_space") - common_controls = { - "confirm": lambda action: f"{get_control_display('confirm', 'A')} : {action}", - "cancel": lambda action: f"{get_control_display('cancel', 'B')} : {action}", - "start": lambda: f"{get_control_display('start', 'Start')} : {start_text}", - "progress": lambda action: f"{get_control_display('progress', 'X')} : {action}", - "up": lambda action: f"{get_control_display('up', '↑')} : {action}", - "down": lambda action: f"{get_control_display('down', '↓')} : {action}", - "left": lambda action: f"{get_control_display('left', '←')} : {action}", - "right": lambda action: f"{get_control_display('right', '→')} : {action}", - "page_up": lambda action: f"{get_control_display('page_up', 'LB')} : {action}", - "page_down": lambda action: f"{get_control_display('page_down', 'RB')} : {action}", - "filter": lambda action: f"{get_control_display('filter', 'Select')} : {action}", - "history": lambda action: f"{get_control_display('history', 'Y')} : {action}", - "delete": lambda: f"{get_control_display('delete', 'Suppr')} : {delete_text}", - "space": lambda: f"{get_control_display('space', 'Espace')} : {space_text}" - } - - # Utiliser des variables pour les traductions d'actions - action_translations = { - "retry": _("action_retry"), - "quit": _("action_quit"), - "select": _("action_select"), - "history": _("action_history"), - "progress": _("action_progress"), - "download": _("action_download"), - "filter": _("action_filter"), - "cancel": _("action_cancel"), - "back": _("action_back"), - "navigate": _("action_navigate"), - "page": _("action_page"), - "cancel_download": _("action_cancel_download"), - "background": _("action_background"), - "confirm": _("action_confirm"), - "redownload": _("action_redownload"), - "clear_history": _("action_clear_history") - } - # Catégories de contrôles nav_text = _("controls_navigation") pages_text = _("controls_pages") diff --git a/ports/RGSX/network.py b/ports/RGSX/network.py index 6af19e0..a96ae33 100644 --- a/ports/RGSX/network.py +++ b/ports/RGSX/network.py @@ -8,7 +8,7 @@ import zipfile import asyncio import config from config import OTA_VERSION_ENDPOINT,APP_FOLDER, UPDATE_FOLDER, OTA_UPDATE_ZIP -from utils import sanitize_filename, extract_zip, extract_rar, load_api_key_1fichier +from utils import sanitize_filename, extract_zip, extract_rar, load_api_key_1fichier, normalize_platform_name from history import save_history import logging import datetime @@ -179,11 +179,11 @@ async def download_rom(url, platform, game_name, is_zip_non_supported=False, tas dest_dir = None for platform_dict in config.platform_dicts: if platform_dict["platform"] == platform: - dest_dir = os.path.join(config.ROMS_FOLDER, platform_dict.get("folder", platform.lower().replace(" ", ""))) + dest_dir = os.path.join(config.ROMS_FOLDER, platform_dict.get("folder", normalize_platform_name(platform))) logger.debug(f"Répertoire de destination trouvé pour {platform}: {dest_dir}") break if not dest_dir: - dest_dir = os.path.join(os.path.dirname(os.path.dirname(config.APP_FOLDER)), platform.lower().replace(" ", "")) + dest_dir = os.path.join(os.path.dirname(os.path.dirname(config.APP_FOLDER)), normalize_platform_name(platform)) os.makedirs(dest_dir, exist_ok=True) if not os.access(dest_dir, os.W_OK): @@ -380,7 +380,7 @@ async def download_from_1fichier(url, platform, game_name, is_zip_non_supported= dest_dir = None for platform_dict in config.platform_dicts: if platform_dict["platform"] == platform: - dest_dir = os.path.join(config.ROMS_FOLDER, platform_dict.get("folder", platform.lower().replace(" ", ""))) + dest_dir = os.path.join(config.ROMS_FOLDER, platform_dict.get("folder", normalize_platform_name(platform))) break if not dest_dir: logger.warning(f"Aucun dossier 'folder' trouvé pour la plateforme {platform}") diff --git a/ports/RGSX/utils.py b/ports/RGSX/utils.py index da20120..0e2820f 100644 --- a/ports/RGSX/utils.py +++ b/ports/RGSX/utils.py @@ -11,7 +11,6 @@ import threading import zipfile import time import random -import random from config import JSON_EXTENSIONS, SAVE_FOLDER def load_accessibility_settings(): @@ -39,8 +38,6 @@ from history import save_history from language import _ # Import de la fonction de traduction from datetime import datetime -from datetime import datetime - logger = logging.getLogger(__name__) # Désactiver les logs DEBUG de urllib3 e requests pour supprimer les messages de connexion HTTP @@ -642,12 +639,12 @@ def handle_ps3(dest_dir): for f in files: try: os.chmod(os.path.join(root, f), 0o644) - except: + except (OSError, PermissionError): pass for d in dirs: try: os.chmod(os.path.join(root, d), 0o755) - except: + except (OSError, PermissionError): pass if os.path.exists(new_path): @@ -873,3 +870,7 @@ def save_music_config(): except Exception as e: logger.error(f"Erreur lors de la sauvegarde de music_config.json: {str(e)}") + +def normalize_platform_name(platform): + """Normalise un nom de plateforme en supprimant espaces et convertissant en minuscules.""" + return platform.lower().replace(" ", "") From 26bdad97d528f8ef985493932d7499a531662856 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:32:04 +0000 Subject: [PATCH 3/3] Improve code formatting: break long import lines for better readability Co-authored-by: RetroGameSets <102905084+RetroGameSets@users.noreply.github.com> --- ports/RGSX/__main__.py | 14 ++++++++++++-- ports/RGSX/controls.py | 6 +++++- ports/RGSX/utils.py | 15 --------------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/ports/RGSX/__main__.py b/ports/RGSX/__main__.py index dbf6252..133bd30 100644 --- a/ports/RGSX/__main__.py +++ b/ports/RGSX/__main__.py @@ -7,12 +7,22 @@ import logging import requests import queue import datetime -from display import init_display, draw_loading_screen, draw_error_screen, draw_platform_grid, draw_progress_screen, draw_controls, draw_virtual_keyboard, draw_popup_result_download, draw_extension_warning, draw_pause_menu, draw_controls_help, draw_game_list, draw_history_list, draw_clear_history_dialog, draw_cancel_download_dialog, draw_confirm_dialog, draw_redownload_game_cache_dialog, draw_popup, draw_gradient, THEME_COLORS +from display import ( + init_display, draw_loading_screen, draw_error_screen, draw_platform_grid, + draw_progress_screen, draw_controls, draw_virtual_keyboard, draw_popup_result_download, + draw_extension_warning, draw_pause_menu, draw_controls_help, draw_game_list, + draw_history_list, draw_clear_history_dialog, draw_cancel_download_dialog, + draw_confirm_dialog, draw_redownload_game_cache_dialog, draw_popup, draw_gradient, + THEME_COLORS +) from language import handle_language_menu_events, _ from network import test_internet, download_rom, is_1fichier_url, download_from_1fichier, check_for_updates from controls import handle_controls, validate_menu_state, process_key_repeats from controls_mapper import load_controls_config, map_controls, draw_controls_mapping, ACTIONS -from utils import detect_non_pc, load_sources, check_extension_before_download, extract_zip_data, play_random_music, load_accessibility_settings, load_music_config +from utils import ( + detect_non_pc, load_sources, check_extension_before_download, extract_zip_data, + play_random_music, load_accessibility_settings, load_music_config +) from history import load_history, save_history import config from config import OTA_data_ZIP diff --git a/ports/RGSX/controls.py b/ports/RGSX/controls.py index 26fc4a8..9acb898 100644 --- a/ports/RGSX/controls.py +++ b/ports/RGSX/controls.py @@ -9,7 +9,11 @@ import json import os from display import draw_validation_transition from network import download_rom, download_from_1fichier, is_1fichier_url -from utils import load_games, check_extension_before_download, is_extension_supported, load_extensions_json, play_random_music, sanitize_filename, load_api_key_1fichier, save_music_config +from utils import ( + load_games, check_extension_before_download, is_extension_supported, + load_extensions_json, play_random_music, sanitize_filename, + load_api_key_1fichier, save_music_config +) from history import load_history, clear_history, add_to_history, save_history import logging from language import _ # Import de la fonction de traduction diff --git a/ports/RGSX/utils.py b/ports/RGSX/utils.py index 0e2820f..ee66fe1 100644 --- a/ports/RGSX/utils.py +++ b/ports/RGSX/utils.py @@ -162,21 +162,6 @@ def load_games(platform_id): 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 not in (200, 303): # Ne logger que les codes autres que 200 et 303 - # logger.debug(f"https://{first_url} \"HEAD {first_url} HTTP/1.1\" {response.status_code} 0") - # if response.status_code == 404: - # logger.error(f"URL non accessible pour {platform_id} : {first_url} (code 404)") - # unavailable_systems.append(platform_id) # Assurez-vous que unavailable_systems est défini - # 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: