Files
scripts/fbneo_roms_by_manufacturer.py
T

152 lines
5.4 KiB
Python

# Script para copiar roms a partir de un xml de fbneo
# Copia las roms por desarrollador y sin clones
# Por hacer:
# pasar por parametro si se quieren clones
import os
import shutil
import sys
import getopt
from xml.dom import minidom
opt_manufacturer = ''
opt_list = 'no'
opt_dat = ''
opt_src_roms = ''
opt_dst_roms = ''
opt_copy = 'no'
opt_sort = 'no'
ignore_list = ["DECO Cassette"]
try:
opts, args = getopt.getopt(sys.argv[1:],"hd:lm:ci:o:s",["list","manufacturer=","dat=","copy","input=","output=","sort"])
except getopt.GetoptError:
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('test.py -i <inputfile> -o <outputfile>')
sys.exit()
elif opt in ("-l", "--list"):
opt_list = "yes"
elif opt in ("-m", "--manufacturer"):
opt_manufacturer = arg
elif opt == '-d':
opt_dat = arg
elif opt in ("-c", "--copy"):
opt_copy = "yes"
elif opt in ("-i", "--input"):
opt_src_roms = arg
elif opt in ("-o", "--output"):
opt_dst_roms = arg
elif opt in ("-s", "--sort"):
opt_sort = "yes"
# Importa el xml
if opt_dat == '' or not os.path.isfile(opt_dat):
sys.exit(2)
print("Parsing {} file".format(opt_dat))
file = minidom.parse(opt_dat)
# Lista los desarrolladores
if opt_list == "yes" and opt_manufacturer == '':
print("List of all manufacturers:")
manufacturers = []
games = file.getElementsByTagName("game")
for game in games:
manufacturer = game.getElementsByTagName("manufacturer")[0]
manufacturers.append(manufacturer.firstChild.data)
# Elimina los duplicados
manufacturers = list(dict.fromkeys(manufacturers))
# Ordena la lista
manufacturers.sort()
# Imprime la lista
for i in manufacturers:
print(i)
# Lista los juegos de un desarrollador
if opt_list == "yes" and opt_manufacturer != '':
print("List of all {} games".format(opt_manufacturer))
games = file.getElementsByTagName("game")
for game in games:
cloneof = game.getAttribute("cloneof")
isbios = game.getAttribute("isbios")
manufacturer = game.getElementsByTagName("manufacturer")[0]
description = game.getElementsByTagName("description")[0]
if manufacturer.firstChild.data == opt_manufacturer and not cloneof and not isbios:
print("%s" % (description.firstChild.data))
# Copia los juegos seleccionados
if opt_copy == "yes" and os.path.isdir(opt_src_roms) and os.path.isdir(opt_dst_roms) and opt_manufacturer != '':
print("Copying all {} games".format(opt_manufacturer))
notfound = []
ignored_games = []
games = file.getElementsByTagName("game")
for game in games:
isignored = False
name = game.getAttribute("name") + ".zip"
cloneof = game.getAttribute("cloneof")
isbios = game.getAttribute("isbios")
manufacturer = game.getElementsByTagName("manufacturer")[0]
description = game.getElementsByTagName("description")[0]
if manufacturer.firstChild.data == opt_manufacturer and not cloneof and not isbios:
for element in ignore_list:
if description.firstChild.data.find(element) != -1:
ignored_games.append(description.firstChild.data)
isignored = True
if not isignored:
src = os.path.join(opt_src_roms, name)
if opt_sort == "yes":
x = manufacturer.firstChild.data
x = x.replace(r'/', r'-')
dst = os.path.join(opt_dst_roms, x, name)
if not os.path.isdir(os.path.join(opt_dst_roms, x)):
os.mkdir(os.path.join(opt_dst_roms, x))
else:
dst = os.path.join(opt_dst_roms, name)
if os.path.isfile(src):
shutil.copyfile(src, dst)
print("%s" % (description.firstChild.data))
else:
notfound.append(description.firstChild.data)
print("\nMissing games:")
for game in notfound:
print(game)
print("\nIgnored games:")
for game in ignored_games:
print(game)
# Copia todos los juegos
if opt_copy == "yes" and os.path.isdir(opt_src_roms) and os.path.isdir(opt_dst_roms) and opt_manufacturer == '':
print("Copying all games")
notfound = []
games = file.getElementsByTagName("game")
for game in games:
name = game.getAttribute("name") + ".zip"
cloneof = game.getAttribute("cloneof")
isbios = game.getAttribute("isbios")
manufacturer = game.getElementsByTagName("manufacturer")[0]
description = game.getElementsByTagName("description")[0]
if not cloneof and not isbios:
src = os.path.join(opt_src_roms, name)
if opt_sort == "yes":
x = manufacturer.firstChild.data
x = x.replace(r'/', r'-')
dst = os.path.join(opt_dst_roms, x, name)
if not os.path.isdir(os.path.join(opt_dst_roms, x)):
os.mkdir(os.path.join(opt_dst_roms, x))
else:
dst = os.path.join(opt_dst_roms, name)
if os.path.isfile(src):
shutil.copyfile(src, dst)
print("%s" % (description.firstChild.data))
else:
notfound.append(description.firstChild.data)
print("\nMissing games:")
for game in notfound:
print(game)