10b4e8cf20
Muestra contadores de ficheros por estado (caché, descargados, no encontrados, omitidos) tanto al finalizar normalmente como al interrumpir con Ctrl+C. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
import logging
|
|
import os
|
|
import shutil
|
|
|
|
import config
|
|
|
|
|
|
def print_status(current_file, total_files, element, total_files_width, status="cached"):
|
|
"""
|
|
Imprime el estado de un archivo en el proceso de descarga.
|
|
|
|
Parámetros:
|
|
current_file (int): El número del archivo actual en el proceso de descarga.
|
|
total_files (int): El número total de archivos en el proceso de descarga.
|
|
element (dict): Diccionario con información del archivo actual ('file_name' y 'filetype').
|
|
total_files_width (int): Ancho del campo para el número total de archivos.
|
|
status (str): El estado del archivo (predeterminado es "cached").
|
|
"""
|
|
print(
|
|
"({:{width}} / {}) : {:<10} : {} ({})".format(
|
|
current_file,
|
|
total_files,
|
|
status,
|
|
element["file_name"],
|
|
element["filetype"],
|
|
width=total_files_width,
|
|
)
|
|
)
|
|
|
|
|
|
def print_elements(elements, mode=0):
|
|
"""
|
|
Imprime la lista de elementos en diferentes modos.
|
|
|
|
Parámetros:
|
|
elements (list): Lista de diccionarios con los datos de los elementos.
|
|
mode (int): El modo de impresión.
|
|
- Si es 0, imprime todos los elementos con sus claves y valores.
|
|
- Si es 1, imprime los nombres de carpeta únicos y el número total.
|
|
"""
|
|
if mode == 0:
|
|
for element in elements:
|
|
print('')
|
|
for key, value in element.items():
|
|
print(key, ':', value)
|
|
elif mode == 1:
|
|
seen = set()
|
|
for element in elements:
|
|
game_folder_name = element['game_folder_name']
|
|
if game_folder_name not in seen:
|
|
print(game_folder_name)
|
|
seen.add(game_folder_name)
|
|
print(f"Número de entradas: {len(seen)}")
|
|
|
|
|
|
def clear_destination_folder():
|
|
"""
|
|
Limpia la carpeta de destino si la opción está habilitada en la configuración.
|
|
"""
|
|
if config.SHOULD_CLEAR_DESTINATION_PATH:
|
|
logging.info("Limpiando la carpeta de destino ...")
|
|
for filename in os.listdir(config.DESTINATION_PATH):
|
|
file_path = os.path.join(config.DESTINATION_PATH, filename)
|
|
try:
|
|
if os.path.isfile(file_path) or os.path.islink(file_path):
|
|
os.unlink(file_path)
|
|
logging.info(f"Archivo eliminado: {file_path}")
|
|
elif os.path.isdir(file_path):
|
|
shutil.rmtree(file_path)
|
|
logging.info(f"Directorio eliminado: {file_path}")
|
|
except Exception as e:
|
|
logging.error(f'No se pudo eliminar {file_path}. Razón: {e}')
|
|
|
|
|
|
def print_summary(stats: dict) -> None:
|
|
print("\n--- Resumen ---")
|
|
print(f" Caché: {stats.get('cached', 0)}")
|
|
print(f" Descargados: {stats.get('downloaded', 0)}")
|
|
print(f" No encontrados: {stats.get('not_found', 0)}")
|
|
print(f" Omitidos: {stats.get('skipped', 0)}")
|
|
|
|
|
|
def remove_empty_directories(path):
|
|
"""
|
|
Elimina los subdirectorios vacíos de forma recursiva.
|
|
|
|
Parámetros:
|
|
path (str): La ruta del directorio raíz desde donde se inicia la eliminación.
|
|
"""
|
|
for root, dirs, files in os.walk(path, topdown=False):
|
|
for dir in dirs:
|
|
dir_path = os.path.join(root, dir)
|
|
try:
|
|
os.rmdir(dir_path)
|
|
logging.info(f"Directorio vacío eliminado: {dir_path}")
|
|
except OSError:
|
|
pass
|