diff --git a/media_definitions.py b/media_definitions.py new file mode 100644 index 0000000..c432047 --- /dev/null +++ b/media_definitions.py @@ -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}'") \ No newline at end of file diff --git a/scrapped_media_mover.py b/scrapped_media_mover.py new file mode 100644 index 0000000..39a9a40 --- /dev/null +++ b/scrapped_media_mover.py @@ -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 = ["", "", "", "", "", "", "