Fix: al no posar el nom del desarrollador en la carpeta quan s'ordenava per desarrollador, no trobava la cache
This commit is contained in:
@@ -112,7 +112,6 @@ def select(cursor, query_index=0):
|
||||
# Registro de consulta ejecutada
|
||||
logging.info(f"Consulta {query_index} ejecutada correctamente con {len(ELEMENTS)} resultados.")
|
||||
|
||||
|
||||
def connect(query_index=0):
|
||||
"""
|
||||
Establece la conexión a la base de datos y ejecuta la consulta.
|
||||
@@ -148,7 +147,6 @@ def connect(query_index=0):
|
||||
except Exception as e:
|
||||
logging.error(f"Error inesperado: {e}")
|
||||
|
||||
|
||||
def update_url(element, url_prefix):
|
||||
"""
|
||||
Añade un prefijo a la URL en el diccionario `element` según el prefijo proporcionado en `url_prefix`.
|
||||
@@ -175,7 +173,6 @@ def update_url(element, url_prefix):
|
||||
elif url.startswith("/nvg"):
|
||||
element["url"] = url_prefix["nvg"] + url[4:]
|
||||
|
||||
|
||||
def process_elements():
|
||||
"""
|
||||
Procesa todos los elementos, modificando cada uno de sus parámetros.
|
||||
@@ -190,7 +187,7 @@ def process_elements():
|
||||
- Calcula el nombre del fichero si es un zip.
|
||||
|
||||
Modifica:
|
||||
- ELEMENTS (list): Actualiza cada diccionario en ELEMENTS con las claves 'root_folder', 'url', 'file_name', 'subfolder', 'is_zip', y 'non_zip_file_name'.
|
||||
- ELEMENTS (list): Actualiza cada diccionario en ELEMENTS con las claves 'game_folder_name', 'url', 'file_name', 'subfolder', 'is_zip', y 'non_zip_file_name'.
|
||||
|
||||
Ejemplo:
|
||||
>>> process_elements()
|
||||
@@ -198,11 +195,8 @@ def process_elements():
|
||||
global ELEMENTS
|
||||
for i in range(len(ELEMENTS)):
|
||||
# Construye el nombre de la carpeta raiz
|
||||
if SHOULD_SORT_BY_DEVELOPER:
|
||||
ELEMENTS[i]["root_folder"] = f"{ELEMENTS[i]['title']} ({ELEMENTS[i]['release_year']})"
|
||||
else:
|
||||
ELEMENTS[i]["root_folder"] = f"{ELEMENTS[i]['title']} ({ELEMENTS[i]['release_year']})({ELEMENTS[i]['developer']})"
|
||||
ELEMENTS[i]["root_folder"] = normalize_path(ELEMENTS[i]["root_folder"])
|
||||
ELEMENTS[i]["game_folder_name"] = f"{ELEMENTS[i]['title']} ({ELEMENTS[i]['release_year']})({ELEMENTS[i]['developer']})"
|
||||
ELEMENTS[i]["game_folder_name"] = normalize_path(ELEMENTS[i]["game_folder_name"])
|
||||
|
||||
# Añade el prefijo a la url y normaliza los enlaces de "wos"
|
||||
update_url(ELEMENTS[i], URL_PREFIX)
|
||||
@@ -219,7 +213,6 @@ def process_elements():
|
||||
# Calcula el nombre del fichero si es un zip
|
||||
ELEMENTS[i]["non_zip_file_name"] = ELEMENTS[i]["file_name"][:-4] if ELEMENTS[i]["is_zip"] else ELEMENTS[i]["file_name"]
|
||||
|
||||
|
||||
def url_filename(url):
|
||||
"""
|
||||
Devuelve el fichero que forma la parte final de una URL.
|
||||
@@ -240,7 +233,6 @@ def url_filename(url):
|
||||
filename = os.path.basename(path)
|
||||
return filename
|
||||
|
||||
|
||||
def download_file(url, destination):
|
||||
"""
|
||||
Descarga un fichero a partir de una URL.
|
||||
@@ -279,7 +271,6 @@ def download_file(url, destination):
|
||||
logging.error(f"Error al descargar el archivo: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def unzip_file(src, dst):
|
||||
"""
|
||||
Descomprime los ficheros que coinciden con la lista de extensiones.
|
||||
@@ -321,7 +312,6 @@ def unzip_file(src, dst):
|
||||
except Exception as e:
|
||||
logging.error(f"Ocurrió un error: {e}")
|
||||
|
||||
|
||||
def print_status(current_file, total_files, element, total_files_width, status="cached"):
|
||||
"""
|
||||
Imprime el estado de un archivo en el proceso de descarga.
|
||||
@@ -352,15 +342,14 @@ def print_status(current_file, total_files, element, total_files_width, status="
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def get_final_destination_folder(developer, year, root_folder):
|
||||
def get_final_destination_folder(title, year, developer):
|
||||
"""
|
||||
Compone la carpeta de destino en función de varios parámetros.
|
||||
|
||||
Parámetros:
|
||||
developer (str): Nombre del desarrollador del juego.
|
||||
year (int o str): Año de lanzamiento del juego.
|
||||
root_folder (str): Nombre de la carpeta raíz.
|
||||
game_folder_name (str): Nombre de la carpeta raíz.
|
||||
|
||||
Retorna:
|
||||
str: La ruta completa de la carpeta de destino final.
|
||||
@@ -376,7 +365,7 @@ def get_final_destination_folder(developer, year, root_folder):
|
||||
>>> get_final_destination_folder("Nintendo", 1985, "Super Mario")
|
||||
'by_developer/N/Nintendo/1985/Super Mario'
|
||||
"""
|
||||
# Carpeta basada en los años de vida comercial del spectrum
|
||||
# Carpeta basada en los años de vida comercial del spectrum o el tipo de agrupación
|
||||
folder1 = ""
|
||||
if SHOULD_SPLIT_MODERN_AND_CLASSIC:
|
||||
if year == "none" or year is None or year > LAST_CLASSIC_YEAR:
|
||||
@@ -402,18 +391,16 @@ def get_final_destination_folder(developer, year, root_folder):
|
||||
# Carpeta basada en la primera letra del nombre de la carpeta raíz
|
||||
folder4 = ""
|
||||
if SHOULD_SORT_BY_LETTER:
|
||||
if root_folder[0].isdigit():
|
||||
if game_folder_name[0].isdigit():
|
||||
folder4 = "0-9"
|
||||
else:
|
||||
folder4 = root_folder[0].upper()
|
||||
folder4 = game_folder_name[0].upper()
|
||||
|
||||
# Asegurarse de que root_folder es una cadena
|
||||
root_folder = root_folder or ""
|
||||
# Compone el nombre de la carpeta de destino del juego
|
||||
game_folder_name = f"{title} ({year})" if SHOULD_SORT_BY_DEVELOPER else f"{title} ({year})({developer})"
|
||||
|
||||
# Combina los prefijos y la carpeta raíz para obtener la carpeta de destino final
|
||||
return os.path.join(folder1, folder2, folder3, folder4, root_folder)
|
||||
|
||||
|
||||
return os.path.join(folder1, folder2, folder3, folder4, game_folder_name)
|
||||
|
||||
def process_cache_file(cache_file, destination_subfolder, destination_file, element):
|
||||
"""
|
||||
@@ -439,7 +426,6 @@ def process_cache_file(cache_file, destination_subfolder, destination_file, elem
|
||||
else:
|
||||
shutil.copyfile(cache_file, destination_file)
|
||||
|
||||
|
||||
def get_files():
|
||||
"""
|
||||
Obtiene los ficheros de la consulta desde internet o desde la caché y los deposita en la carpeta destino,
|
||||
@@ -466,11 +452,11 @@ def get_files():
|
||||
last_game_folder = ""
|
||||
|
||||
for element in ELEMENTS:
|
||||
classification_folder = get_final_destination_folder(element["developer"], element["release_year"], element["root_folder"])
|
||||
classification_folder = get_final_destination_folder(element["title"], element["release_year"], element["developer"])
|
||||
|
||||
destination_folder = os.path.join(DESTINATION_PATH, classification_folder)
|
||||
destination_subfolder = os.path.join(destination_folder, element["subfolder"])
|
||||
cache_folder = os.path.join(CACHE_PATH, element["root_folder"])
|
||||
cache_folder = os.path.join(CACHE_PATH, element["game_folder_name"])
|
||||
cache_subfolder = os.path.join(cache_folder, element["subfolder"])
|
||||
|
||||
# Ruta completa hasta el fichero de destino y de caché
|
||||
@@ -480,9 +466,9 @@ def get_files():
|
||||
# Actualiza las variables de presentación
|
||||
current_file += 1
|
||||
|
||||
if element["root_folder"] != last_game_folder:
|
||||
print("\n{}".format(element["root_folder"]))
|
||||
last_game_folder = element["root_folder"]
|
||||
if element["game_folder_name"] != last_game_folder:
|
||||
print("\n{}".format(element["game_folder_name"]))
|
||||
last_game_folder = element["game_folder_name"]
|
||||
|
||||
try:
|
||||
# Si el fichero no existe en la carpeta de destino
|
||||
@@ -517,7 +503,6 @@ def get_files():
|
||||
except Exception as e:
|
||||
logging.error(f"Error al procesar el fichero {element['file_name']}: {e}")
|
||||
|
||||
|
||||
def normalize_path(path):
|
||||
"""
|
||||
Elimina los caracteres ilegales de la cadena de texto.
|
||||
@@ -543,7 +528,6 @@ def normalize_path(path):
|
||||
path = unidecode(path.replace(char, replace_with))
|
||||
return path
|
||||
|
||||
|
||||
def remove_empty_directories(path):
|
||||
"""
|
||||
Elimina los subdirectorios vacíos.
|
||||
@@ -570,7 +554,6 @@ def remove_empty_directories(path):
|
||||
# El directorio no está vacío o ocurrió otro error
|
||||
pass
|
||||
|
||||
|
||||
def clear_destination_folder():
|
||||
"""
|
||||
Limpia la carpeta de destino.
|
||||
@@ -598,7 +581,6 @@ def clear_destination_folder():
|
||||
except Exception as e:
|
||||
logging.error(f'No se pudo eliminar {file_path}. Razón: {e}')
|
||||
|
||||
|
||||
def print_elements(mode=0):
|
||||
"""
|
||||
Imprime la lista de elementos en diferentes modos.
|
||||
@@ -610,7 +592,7 @@ def print_elements(mode=0):
|
||||
|
||||
Comportamiento:
|
||||
- Modo 0: Recorre todos los elementos en ELEMENTS e imprime cada clave y valor en un formato legible.
|
||||
- Modo 1: Elimina duplicados basándose en la carpeta raíz ('root_folder') y los imprime. Luego, muestra el número total de entradas únicas.
|
||||
- Modo 1: Elimina duplicados basándose en la carpeta raíz ('game_folder_name') y los imprime. Luego, muestra el número total de entradas únicas.
|
||||
|
||||
Ejemplo:
|
||||
>>> print_elements(0)
|
||||
@@ -626,14 +608,13 @@ def print_elements(mode=0):
|
||||
# Segundo bucle for con eliminación de duplicados
|
||||
seen = set()
|
||||
for element in ELEMENTS:
|
||||
root_folder = element['root_folder']
|
||||
if root_folder not in seen:
|
||||
print(root_folder)
|
||||
seen.add(root_folder)
|
||||
game_folder_name = element['game_folder_name']
|
||||
if game_folder_name not in seen:
|
||||
print(game_folder_name)
|
||||
seen.add(game_folder_name)
|
||||
# Imprimir el número de elementos únicos
|
||||
print(f"Número de entradas: {len(seen)}")
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Bucle principal que ejecuta las principales funciones del programa.
|
||||
|
||||
Reference in New Issue
Block a user