Ja separa els jocs anteriors a 1993 dels posteriors

This commit is contained in:
2024-11-12 20:05:34 +01:00
parent abb026ece0
commit 84c1495bc6
+83 -88
View File
@@ -46,7 +46,7 @@ temp_file = r"/tmp/zxdb.download.tmp"
should_clear_destination_path = True # Establece si se limpia primero la carpeta de destino should_clear_destination_path = True # Establece si se limpia primero la carpeta de destino
wait = True # Establece una pausa aleatoria entre descargas wait = True # Establece una pausa aleatoria entre descargas
min_wait = 2 # Segundos mínimos a esperar entre descargas min_wait = 2 # Segundos mínimos a esperar entre descargas
max_wait = min_wait + 1 # Segundos máximos a esperar entre descargas max_wait = min_wait + 2 # Segundos máximos a esperar entre descargas
elements = [] elements = []
filetypes_on_root = [ filetypes_on_root = [
"Tape image", "Tape image",
@@ -251,31 +251,48 @@ def download_file(url, dest):
# Descomprime los ficheros que coinciden con la lista de extensiones # Descomprime los ficheros que coinciden con la lista de extensiones
def unzip_file(src, dst): def unzip_file(src, dst):
# with zipfile.ZipFile(src, "r") as zip_ref:
# zip_ref.extractall(dst)
archive = src archive = src
directory = dst directory = dst
extensions = (".z80", ".sna", ".tzx", ".tap", "dsk", ".trd", ".Z80", ".SNA", ".TZX", ".TAP", "DSK", ".TRD") extensions = (".z80", ".sna", ".tzx", ".tap", ".dsk", ".trd")
zip_file = zipfile.ZipFile(archive, "r")
[ try:
zip_file.extract(file, directory) with zipfile.ZipFile(archive, "r") as zip_file:
for file in zip_file.namelist() for file in zip_file.namelist():
if file.endswith(extensions) if file.lower().endswith(extensions):
] zip_file.extract(file, directory)
zip_file.close() # logging.info(f"Archivo {file} extraído a {directory}")
except zipfile.BadZipFile:
logging.error("El archivo ZIP está corrupto.")
except FileNotFoundError:
logging.error("El archivo ZIP no se encontró.")
except Exception as e:
logging.error(f"Ocurrió un error: {e}")
# Obtiene los ficheros de la consulta desde internet o desde la caché # Obtiene los ficheros de la consulta desde internet o desde la caché
# y los deposita en la carpeta destino, descomprimiendo los archivos necesarios # y los deposita en la carpeta destino, descomprimiendo los archivos necesarios
def get_files(): def get_files():
# Configuración del logger
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# Variables para la presentación en pantalla de la descarga # Variables para la presentación en pantalla de la descarga
current_file = 0 current_file = 0
total_files = len(elements) total_files = len(elements)
total_files_width = len(str(total_files)) total_files_width = len(str(total_files))
last_game_folder = "" last_game_folder = ""
for element in elements: for element in elements:
# Carpeta del juego en destino y en caché # Carpeta del juego en destino y en caché
release_year = element["release_year"]
if release_year == "none" or release_year is None or release_year >= 1993:
classification_folder = "modern/" + element["root_folder"]
else:
classification_folder = "classics/" + element["root_folder"]
game_folder = element["root_folder"] game_folder = element["root_folder"]
destination_folder = os.path.join(destination_path, element["root_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["root_folder"])
cache_subfolder = os.path.join(cache_folder, element["subfolder"]) cache_subfolder = os.path.join(cache_folder, element["subfolder"])
@@ -285,96 +302,74 @@ def get_files():
cache_file = os.path.join(cache_subfolder, element["file_name"]) cache_file = os.path.join(cache_subfolder, element["file_name"])
# Actualiza las variables de presentación # Actualiza las variables de presentación
current_file = current_file + 1 current_file += 1
if game_folder != last_game_folder: if game_folder != last_game_folder:
print("\n{}".format(game_folder)) print("\n{}".format(game_folder))
last_game_folder = game_folder last_game_folder = game_folder
#print( try:
# "(WORKING : {} ({})".format( # Comprueba si ya existe el fichero a descargar
# element["file_name"], if not os.path.isfile(destination_file) and not os.path.isfile(os.path.join(destination_subfolder, element["non_zip_file_name"])):
# element["filetype"] # Comprueba si ya existe el fichero en la cache
# ) if os.path.isfile(cache_file):
#) # Si encuentra el fichero en cache, crea las carpetas de destino y lo copia o lo extrae
os.makedirs(destination_subfolder, exist_ok=True)
# Comprueba si ya existe el fichero a descargar if cache_file.endswith(".zip") and element["subfolder"] == "":
if not os.path.isfile(destination_file) and ( unzip_file(cache_file, destination_subfolder)
not os.path.isfile( else:
os.path.join(destination_subfolder, element["non_zip_file_name"]) shutil.copyfile(cache_file, destination_file)
) print(
): "({:{width}} / {}) : cached : {} ({})".format(
# Comprueba si ya existe el fichero en la cache current_file,
if os.path.isfile(cache_file): total_files,
# Si encuentra el fichero en cache, crea las carpetas de destino y lo copia o lo extrae element["file_name"],
if not os.path.isdir(destination_folder): element["filetype"],
os.mkdir(destination_folder) width=total_files_width,
if not os.path.isdir(destination_subfolder): )
os.mkdir(destination_subfolder) )
if cache_file.endswith(".zip") and element["subfolder"] == "": # El fichero no está en la cache
unzip_file(cache_file, destination_subfolder)
else: else:
shutil.copyfile(cache_file, destination_file) status = "not found "
print( if download_file(element["url"], temp_file):
"({:{width}} / {}) : cached : {} ({})".format( status = "downloaded"
current_file, if os.path.isfile(temp_file):
total_files, # Copia el fichero temporal a la cache
element["file_name"], os.makedirs(cache_subfolder, exist_ok=True)
element["filetype"], shutil.copyfile(temp_file, cache_file)
width=total_files_width, os.remove(temp_file)
# Copia el fichero de la cache al destino
if os.path.isfile(cache_file):
os.makedirs(destination_subfolder, exist_ok=True)
if cache_file.endswith(".zip") and element["subfolder"] == "":
unzip_file(cache_file, destination_folder)
else:
shutil.copyfile(cache_file, destination_file)
print(
"({:{width}} / {}) : {} : {} ({})".format(
current_file,
total_files,
status,
element["file_name"],
element["filetype"],
width=total_files_width,
)
) )
) if wait:
# El fichero no está en la cache time.sleep(random.randint(min_wait, max_wait))
# El fichero ya existe en el destino
else: else:
status = "not found "
if download_file(element["url"], temp_file):
status = "downloaded"
if os.path.isfile(temp_file):
# Copia el fichero temnporal a la cache
if not os.path.isdir(cache_folder):
os.mkdir(cache_folder)
if not os.path.isdir(cache_subfolder):
os.mkdir(cache_subfolder)
shutil.copyfile(temp_file, cache_file)
os.remove(temp_file)
# Copia el fichero de la cache al destino
if os.path.isfile(cache_file):
if not os.path.isdir(destination_folder):
os.mkdir(destination_folder)
if not os.path.isdir(destination_subfolder):
os.mkdir(destination_subfolder)
if (
cache_file.endswith(".zip")
and element["subfolder"] == ""
):
unzip_file(cache_file, destination_folder)
else:
shutil.copyfile(cache_file, destination_file)
print( print(
"({:{width}} / {}) : {} : {} ({})".format( "({:{width}} / {}) : skipping : {} ({})".format(
current_file, current_file,
total_files, total_files,
status,
element["file_name"], element["file_name"],
element["filetype"], element["filetype"],
width=total_files_width, width=total_files_width,
) )
) )
if wait: except Exception as e:
time.sleep(random.randint(min_wait, max_wait)) logging.error(f"Error al procesar el fichero {element['file_name']}: {e}")
# El fichero ya existe en el destino
else:
print(
"({:{width}} / {}) : skipping : {} ({})".format(
current_file,
total_files,
element["file_name"],
element["filetype"],
width=total_files_width,
)
)
# Elimina los caracteres ilegales de la cadena de texto # Elimina los caracteres ilegales de la cadena de texto
def normalize_path(path): def normalize_path(path):
@@ -424,8 +419,8 @@ def main():
connect(query_index=0) connect(query_index=0)
process_elements() process_elements()
print_elements(mode=1) print_elements(mode=1)
#clear_destination_folder() clear_destination_folder()
#get_files() get_files()
if __name__ == "__main__": if __name__ == "__main__":
main() main()