import os import zipfile import database_utilities ######################################################## def filtrar_correos_nuevos(emails): """ Verifica cuáles correos son nuevos (no están en la BD), los guarda y retorna la lista filtrada de los que tienen adjuntos. """ if not emails: return [] # 1. Verificar cuáles ya existen en la BD ids = [e['id'] for e in emails] existentes = database_utilities.get_existing_ids(ids) # Solo nos quedamos con los que NO están en la BD nuevos = [e for e in emails if e['id'] not in existentes] print(f"Correos nuevos detectados: {len(nuevos)}") if nuevos: print("Guardando nuevos correos en la base de datos...") database_utilities.save_emails(nuevos) # 2. Filtrar para quedarse solo con los que tienen adjuntos con_adjuntos = [e for e in nuevos if e['has_attach']] print(f"Correos nuevos con adjuntos: {len(con_adjuntos)}") return con_adjuntos ######################################################## def descomprimir_adjuntos(archivos, ruta): """ Descomprime archivos .zip en la ruta especificada y actualiza la lista de archivos. Remueve el .zip original de la lista y añade los contenidos extraídos. """ archivos_finales = [] for archivo in archivos: ruta_archivo = os.path.join(ruta, archivo) if archivo.lower().endswith('.zip') and os.path.exists(ruta_archivo): try: with zipfile.ZipFile(ruta_archivo, 'r') as zip_ref: nombres_extraidos = zip_ref.namelist() zip_ref.extractall(ruta) archivos_finales.extend(nombres_extraidos) except Exception as e: print(f" ⚠️ Error descomprimiendo {archivo}: {e}") archivos_finales.append(archivo) else: archivos_finales.append(archivo) return archivos_finales ######################################################## def filtrar_archivos_validos(archivos): """ Retorna una lista solo con archivos .pdf y .xml (ignora mayúsculas/minúsculas). """ extensiones_validas = ('.pdf', '.xml') return [a for a in archivos if a.lower().endswith(extensiones_validas)] ######################################################## def procesar_adjuntos_email(e, archivos, ruta_descarga): """ Descomprime y filtra los archivos de un correo. Retorna la lista de archivos válidos si existen, de lo contrario lista vacía. """ # 1. Descomprimir archivos ZIP si existen archivos_procesados = descomprimir_adjuntos(archivos, ruta_descarga) # 2. Filtrar solo PDF y XML archivos_validos = filtrar_archivos_validos(archivos_procesados) if archivos_validos: e['archivos'] = archivos_validos return archivos_validos return [] ########################################################