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