gamelist_check.py - nordicpower/gamelistpower GitHub Wiki

Introduction

Afin de faciliter le travail sur les fichiers gamelist.xml, une petite série de programmes en python ont été écrit afin de réaliser des tâches de base : extraction d'informations, tri, modification selon des règles....

Ceux-ci sont accessibles uniquement en ligne de commande en SSH après avoir installer gamelistpower et sont disponibles sous /recalbox/scripts/gamelistpower

script gamelist_check.py : tester le fichier et extraire des données

usage: gamelist_check.py [-h] [--attribute ATTRIBUTE] {load,empty,list,list_single,count,list_hash_multiple,list_favorite,list_hidden} file

exemple: python gamelist_check.py empty /recalbox/share/roms/megadrive/gamelist.xml --attribut hash

c'est un peu barbare... on va faire des exemples pour expliquer tout cela...

load : test de chargement d'un fichier XML

Ce mode "load" permet de vérifier si le fichier est valide au sens XML, à savoir par exemple si une balise ouvrante <desc> est bien accompagnée par une balise fermante </desc>

exemple : python gamelist_check.py load /recalbox/share/roms/megadrive/gamelist.xml
charset:utf-8
file loading OK

Ces deux messages permettent de connaitre l'encodage du fichier (et donc le support des accents) et s'assurer de la validité XML.
Exemple avec une erreur que j'injecte dans un fichier :
<name>3 NINJAS KICK BACK</name>
je supprime le / de la deuxième balise
<name>3 NINJAS KICK BACK<name>

J'obtiens alors ce message d'erreur:
charset:utf-8
Fichier /recalbox/share/roms/megadrive/gamelist.xml mal formé à la ligne 18 position 4
Conseil : vérifier la ligne ou les précédents avec les ouvertures (<) ou fermetures de tag (>)
Ligne en erreur : </game>

Il devient possible simplement de retrouver l'erreur et de corriger...

empty : recherche des balises vides

Ce mode "empty" permet de rechercher des jeux qui contiennent des balises vides, l'attribut vide à rechercher est défini à la fin de la commande --attribut nom_de_l'attribut

exemple : python gamelist_check.py empty /recalbox/share/roms/megadrive/gamelist.xml --attribut region
game ADDAMS FAMILY without region
game ALADDIN 2 without region

Si on ouvre le fichier gamelist.xlm dans un éditeur de texte, on peut constater que la balise <region> n'est pas visible dans la définition du jeu:
<game id="" source="nordicpower.fr">
<path>./Addams Family.zip</path>
<name>ADDAMS FAMILY</name>
<desc>THE ADDAMS FAMILY...</desc>
<image>./images/Addams Family-image.jpg</image>
<releasedate>1993</releasedate>
<developer>FLYING EDGE</developer>
<publisher>OCEAN</publisher>
<genre>PLATEFORME</genre>
</game>

Très pratique pour savoir quelles données sont manquantes...

list : lister l'ensemble des valeurs d'un attribut

Permet d'afficher avec un tri alphabétique l'ensemble des valeurs d'un attribut. Par exemple, je peux lister tous les noms de jeu. Exemple : python gamelist_check.py list /recalbox/share/roms/megadrive/gamelist.xml --attribut name
3 NINJAS KICK BACK
6-PAK
688 ATTACK SUB
...

list_single : lister l'ensemble des valeurs uniques d'un attribut

Permet d'afficher avec un tri alphabétique l'ensemble des valeurs uniques d'un attribut. Par exemple, je peux lister tous les régions de jeu. Exemple : python gamelist_check.py list_single /recalbox/share/roms/megadrive/gamelist.xml --attribut region
EUROPE
FRANCE
JAPON
USA
...

Très pratique pour vérifier s'il n'y a pas d'erreur de saisie...

count : afficher le nombre d’occurrence d'une valeur dans un attribut

Permet d'afficher un comptage des valeurs (de la + grande à la + faible) de l'ensemble des valeurs uniques d'un attribut. Par exemple, je peux compter toutes les régions Exemple : python gamelist_check.py count /recalbox/share/roms/megadrive/gamelist.xml --attribut region
USA : 283
USA, EUROPE : 266
EUROPE : 257
JAPON : 70
...

Cela permet aussi de rechercher s'il existe des noms de roms en double avec cette commande:
python gamelist_check.py count /recalbox/share/roms/megadrive/gamelist.xml --attribut name
ADDAMS FAMILY : 2
3 NINJAS KICK BACK : 1
...
il existe deux jeux avec le nom ADDAMS FAMILY

mais également par les valeurs de hash python gamelist_check.py count /recalbox/share/roms/megadrive/gamelist.xml --attribut hash
3B3231ED : 3
EC6CD5F0 : 2
...
il existe 3 jeux avec le hash 3B3231ED

list_hash_multiple : identifier les zips contenant plusieurs fichiers

Les roms des jeux peuvent être fournis avec un format zip contenant un ou plusieurs fichiers. Parfois, il arrive que ces fichiers contiennent plusieurs roms, une seule est lancée par recalbox. Généralement il s'agit de version beta ou étrangère par rapport à la version lancée par défaut. La fonction netplay utilise des hash pour identifier les jeux sur le réseau. Si un fichier contient plusieurs roms, il apparaîtra de la manière suivante dans le fichier gamelist.xml.
<game id="" source="nordicpower.fr">
<path>./Addams Family.zip</path>
<name>ADDAMS FAMILY</name>
<desc>THE ADDAMS FAMILY...</desc>
<image>./images/Addams Family-image.jpg</image>
<releasedate>1993</releasedate>
<developer>FLYING EDGE</developer>
<publisher>OCEAN</publisher>
<genre>PLATEFORME</genre>
<hash>71F58614 2803A5CA</hash>
</game>

Ce jeu contient deux roms...Il est possible de créer deux zip au lieu d'un seul pour accéder aux deux jeux.
Nota : les fichiers avec une extension ics ne sont pas une rom mais un patch qui modifie le contenu de la rom dans la mémoire de l'émulateur

exemple : python gamelist_check.py list_hash_multiple /recalbox/share/roms/megadrive/gamelist.xml
game ADDAMS FAMILY with multiple files
game BLASTER MASTER 2 with multiple files

list_favorite : lister le nom des roms en favori

Tout est dans le titre... Cela correspond à cette balise 'yes' exemple : python gamelist_check.py list_favorite /recalbox/share/roms/megadrive/gamelist.xml
AIR BUSTER: TROUBLE SPECIALTY RAID UNIT [JAPON]
ALADDIN 1 [FRANCE]

...

list_favorite : lister le nom des roms en favori

Tout est dans le titre... Cela correspond à cette balise 'yes' exemple : python gamelist_check.py list_favorite /recalbox/share/roms/megadrive/gamelist.xml
AFTER BURNER II [JAPON]
...

⚠️ **GitHub.com Fallback** ⚠️