pos ja estaria
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
media_table = {
|
||||
"boxart": "covers",
|
||||
"cartridge": "physicalmedia",
|
||||
"marquee": "marquees",
|
||||
"mix": "miximages",
|
||||
"screenshot": "screenshots",
|
||||
"video": "videos"
|
||||
}
|
||||
|
||||
def get_media_name(media_name):
|
||||
"""Traduce un nombre basado en la tabla de traducción."""
|
||||
# Diccionario de sistemas definido dentro de la función
|
||||
return media_table.get(media_name, f"Traducción no encontrada para '{media_name}'")
|
||||
@@ -0,0 +1,206 @@
|
||||
from systems_definitions import get_system_name, filter_translatable_systems
|
||||
from media_definitions import media_table, get_media_name
|
||||
import os
|
||||
import shutil
|
||||
import pprint
|
||||
|
||||
SOURCE_FOLDER = "/home/sergio/roms/batocera_arrm_scrapped"
|
||||
DEST_FOLDER = "/home/sergio/roms/es-de_from_batocera"
|
||||
|
||||
def list_directories(path):
|
||||
"""Devuelve una lista de directorios en la ruta especificada."""
|
||||
# Lista los nombres en la ruta y verifica cuáles son directorios
|
||||
directories = [name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))]
|
||||
return directories
|
||||
|
||||
|
||||
def list_files(path):
|
||||
"""Devuelve una lista de ficheros (no directorios) en la ruta especificada, excluyendo archivos *.xml."""
|
||||
files = [
|
||||
name for name in os.listdir(path)
|
||||
if os.path.isfile(os.path.join(path, name)) and not name.endswith(".xml")
|
||||
]
|
||||
return files
|
||||
|
||||
|
||||
def directory_exists(path):
|
||||
"""Comprueba si un directorio existe."""
|
||||
return os.path.isdir(path)
|
||||
|
||||
|
||||
def get_file_name_without_extension(file_path):
|
||||
"""Devuelve el nombre del fichero sin su extensión."""
|
||||
file_name, _ = os.path.splitext(os.path.basename(file_path))
|
||||
return file_name
|
||||
|
||||
|
||||
def find_file_extension(folder, base_name):
|
||||
"""Busca un archivo que coincida con el nombre base y el sufijo, y devuelve solo la extensión."""
|
||||
for file in os.listdir(folder):
|
||||
if file.startswith(base_name):
|
||||
_, extension = os.path.splitext(file) # Obtiene la extensión del archivo
|
||||
return extension # Devuelve solo la extensión
|
||||
return None
|
||||
|
||||
|
||||
def create_file_list():
|
||||
system_list = filter_translatable_systems(list_directories(SOURCE_FOLDER))
|
||||
file_list = []
|
||||
|
||||
for system in system_list:
|
||||
folder = os.path.join(SOURCE_FOLDER, system)
|
||||
|
||||
# Saltar sistemas sin la carpeta "downloaded_images"
|
||||
if not directory_exists(os.path.join(folder, "downloaded_images")):
|
||||
continue
|
||||
|
||||
# Añade las roms de la carpeta excluyendo ficheros .xml
|
||||
roms = list_files(folder)
|
||||
|
||||
# Gestiona la lista de roms
|
||||
for rom in roms:
|
||||
rom_name = get_file_name_without_extension(rom)
|
||||
element = {}
|
||||
|
||||
# Configuración básica del rom
|
||||
element["name"] = rom_name
|
||||
element["rom_source"] = os.path.join(folder, rom)
|
||||
element["rom_dest"] = os.path.join(DEST_FOLDER, "ROMs", system, rom)
|
||||
|
||||
# Crear el diccionario "media" con dos claves por entrada
|
||||
media_dict = {}
|
||||
for key in media_table.keys():
|
||||
base_folder = os.path.join(folder, "downloaded_images")
|
||||
base_name = f"{rom_name}-{key}"
|
||||
|
||||
# Llamar a la función para obtener la extensión
|
||||
extension = find_file_extension(base_folder, base_name)
|
||||
|
||||
# Verificar si se encontró la extensión
|
||||
if extension:
|
||||
media_dict[f"{key}_source"] = os.path.join(base_folder, base_name + extension)
|
||||
media_dict[f"{key}_dest"] = os.path.join(DEST_FOLDER, "ES-DE", "downloaded_media", get_system_name(system), media_table[key], rom_name + extension)
|
||||
|
||||
# Asignar el diccionario "media" al elemento
|
||||
element["media"] = media_dict
|
||||
|
||||
# Añadir el elemento a la lista de ficheros
|
||||
file_list.append(element)
|
||||
print(system + " - " + rom_name)
|
||||
|
||||
# Gestiona el fichero "gamelist.xml"
|
||||
file_name = "gamelist.xml"
|
||||
gamelist = os.path.join(folder, file_name)
|
||||
if os.path.isfile(gamelist):
|
||||
element = {}
|
||||
element["name"] = "gamelist"
|
||||
element["rom_source"] = os.path.join(folder, file_name)
|
||||
element["rom_dest"] = os.path.join(DEST_FOLDER, "ES-DE", "gamelists", system, file_name)
|
||||
file_list.append(element)
|
||||
|
||||
return file_list
|
||||
|
||||
|
||||
def copy_file(source_path, dest_path):
|
||||
"""
|
||||
Copia un archivo desde la ruta source_path a dest_path, creando directorios si es necesario.
|
||||
Si el archivo de destino ya existe, no hace nada.
|
||||
Si el archivo tiene una extensión no permitida, no lo copia.
|
||||
Si el archivo es un .xml, se usa un método especial para copiarlo.
|
||||
"""
|
||||
# Lista de extensiones no permitidas
|
||||
forbidden_extensions = [".mp4"]
|
||||
|
||||
if not source_path or not dest_path:
|
||||
print(f"Source o destino inválido: {source_path}, {dest_path}. Saltando...")
|
||||
return
|
||||
|
||||
# Verificar si el archivo tiene una extensión no permitida
|
||||
_, extension = os.path.splitext(source_path)
|
||||
if extension in forbidden_extensions:
|
||||
print(f"Archivo con extensión no permitida ({extension}): {source_path}. Saltando...")
|
||||
return
|
||||
|
||||
# Manejo especial para archivos .xml
|
||||
if extension == ".xml":
|
||||
copy_xml_file(source_path, dest_path) # Llamar al método especial para XML
|
||||
return
|
||||
|
||||
# Crear el directorio de destino si no existe
|
||||
dest_dir = os.path.dirname(dest_path)
|
||||
if not os.path.exists(dest_dir):
|
||||
os.makedirs(dest_dir)
|
||||
print(f"Directorio creado: {dest_dir}")
|
||||
|
||||
# Verificar si el archivo de destino ya existe
|
||||
if os.path.exists(dest_path):
|
||||
print(f"El archivo ya existe: {dest_path}. No se realiza la copia.")
|
||||
return
|
||||
|
||||
# Copiar el archivo
|
||||
try:
|
||||
shutil.copy2(source_path, dest_path) # Usa copy2 para preservar metadata
|
||||
print(f"Copiado: {source_path} -> {dest_path}")
|
||||
except FileNotFoundError:
|
||||
print(f"Archivo fuente no encontrado: {source_path}. Saltando...")
|
||||
except Exception as e:
|
||||
print(f"Error al copiar {source_path} a {dest_path}: {e}")
|
||||
|
||||
|
||||
def copy_xml_file(source_path, dest_path):
|
||||
"""
|
||||
Copia un archivo XML omitiendo las líneas que contienen ciertos textos no deseados.
|
||||
"""
|
||||
# Lista de textos a omitir
|
||||
texts_to_omit = ["<image>", "<wheel>", "<boxart>", "<screenshot>", "<cartridge>", "<mix>", "<video>", "<marquee>", "<thumbnail />"]
|
||||
|
||||
# Crear el directorio de destino si no existe
|
||||
dest_dir = os.path.dirname(dest_path)
|
||||
if not os.path.exists(dest_dir):
|
||||
os.makedirs(dest_dir)
|
||||
print(f"Directorio creado: {dest_dir}")
|
||||
|
||||
try:
|
||||
# Leer el archivo fuente y escribir solo las líneas permitidas en el archivo destino
|
||||
with open(source_path, "r", encoding="utf-8") as source_file, open(dest_path, "w", encoding="utf-8") as dest_file:
|
||||
for line in source_file:
|
||||
# Si ninguna de las etiquetas a omitir está en la línea, escríbela en el destino
|
||||
if not any(text in line for text in texts_to_omit):
|
||||
dest_file.write(line)
|
||||
|
||||
print(f"Archivo XML procesado y copiado: {source_path} -> {dest_path}")
|
||||
except FileNotFoundError:
|
||||
print(f"Archivo XML fuente no encontrado: {source_path}. Saltando...")
|
||||
except Exception as e:
|
||||
print(f"Error al procesar el archivo XML {source_path} a {dest_path}: {e}")
|
||||
|
||||
|
||||
def copy_files_with_structure(data):
|
||||
"""
|
||||
Copia los archivos apuntados por las claves *_source a sus homólogos *_dest.
|
||||
Incluye rom_source y rom_dest. Crea las carpetas de destino si no existen.
|
||||
"""
|
||||
# Manejar archivos de media (claves *_source y *_dest)
|
||||
if "media" in data:
|
||||
for key, source_path in data["media"].items():
|
||||
if key.endswith("_source"):
|
||||
# Buscar la clave _dest correspondiente
|
||||
dest_key = key.replace("_source", "_dest")
|
||||
dest_path = data["media"].get(dest_key)
|
||||
copy_file(source_path, dest_path)
|
||||
|
||||
# Manejar archivo de rom_source -> rom_dest
|
||||
if "rom_source" in data and "rom_dest" in data:
|
||||
copy_file(data["rom_source"], data["rom_dest"])
|
||||
|
||||
|
||||
def main():
|
||||
"""Función principal del programa."""
|
||||
file_list = create_file_list()
|
||||
# pprint.pprint(file_list, width=200)
|
||||
for game in file_list:
|
||||
copy_files_with_structure(game)
|
||||
|
||||
# Verifica si este archivo se ejecuta como script principal
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,49 @@
|
||||
# Diccionario de sistemas definido globalmente
|
||||
systems_table = {
|
||||
"dreamcast": "dreamcast",
|
||||
"fbneo": "fbneo",
|
||||
"gamegear": "gamegear",
|
||||
"gb": "gb",
|
||||
"gba": "gba",
|
||||
"gbc": "gbc",
|
||||
"lynx": "atarilynx",
|
||||
"mastersystem": "mastersystem",
|
||||
"megadrive": "megadrive",
|
||||
"neogeo": "neogeo",
|
||||
"neogeocd": "neogeocd",
|
||||
"nes": "nes",
|
||||
"ngp": "ngp",
|
||||
"ngpc": "ngpc",
|
||||
"pcengine": "pcengine",
|
||||
"pcenginecd": "pcenginecd",
|
||||
"ps2": "ps2",
|
||||
"psp": "psp",
|
||||
"psx": "psx",
|
||||
"saturn": "saturn",
|
||||
"sega32x": "sega32x",
|
||||
"segacd": "segacd",
|
||||
"sg1000": "sg-1000",
|
||||
"snes": "snes",
|
||||
"wswan": "wonderswan",
|
||||
"wswanc": "wonderswancolor"
|
||||
}
|
||||
|
||||
# Método para obtener la equivalencia del nombre de un sistema
|
||||
def get_system_name(system_name):
|
||||
"""Obtiene la equivalencia del nombre de un sistema."""
|
||||
return systems_table.get(system_name, f"Traducción no encontrada para '{system_name}'")
|
||||
|
||||
# Método para filtrar los sistemas con traducción disponible
|
||||
def filter_translatable_systems(system_names):
|
||||
"""Filtra y devuelve los sistemas que tienen traducción disponible."""
|
||||
return [name for name in system_names if name in systems_table]
|
||||
|
||||
# Ejemplo de uso
|
||||
# input_systems = ["dreamcast", "gamegear", "invalid_system", "psx", "nonexistent"]
|
||||
# translatable = filter_translatable_systems(input_systems)
|
||||
# print(f"Sistemas traducibles: {translatable}")
|
||||
|
||||
# Ejemplo de traducción de un sistema
|
||||
# name_to_translate = "lynx"
|
||||
# translated_name = get_system_name(name_to_translate)
|
||||
# print(f"Nombre traducido: {translated_name}")
|
||||
Reference in New Issue
Block a user