Ahora descarga archivos adjuntados

Ahora cunado seleccionas un archivo hay uyn boton
nuevo que es descargar archuvo adjuntado
que lo descarga y lo mete en una carpeta
This commit is contained in:
Kevin William Olarte Braun 2025-02-14 00:35:58 +01:00
parent ace8b70419
commit 75a73f63c7
9 changed files with 61 additions and 1 deletions

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
Contenido de prueba

View File

@ -0,0 +1 @@
Contenido de prueba

View File

@ -0,0 +1 @@
Contenido de prueba

View File

@ -35,3 +35,12 @@ class CorreoControlador:
else:
messagebox.showerror("Error", mensaje_respuesta)
self.vista.actualizar_footer("Gestor de Correos - 2025")
def descargar_archivo_adjunto(self, correo_id):
self.vista.actualizar_footer("📥 Descargando archivo adjunto...")
hilo = threading.Thread(target=self._descargar_archivo_adjunto(correo_id))
def _descargar_archivo_adjunto(self, correo_id):
resultado, mensaje = self.modelo.descargar_archivo_adjunto(correo_id)
self.vista.actualizar_footer("Gestor de Correos - 2025")
messagebox.showinfo("Descarga de Archivos", mensaje)

View File

@ -26,11 +26,16 @@ class CorreoModelo:
DB_NAME = "correo_db"
COLLECTION_NAME = "correoc" #*s
CARPETA_ADJUNTOS = "archivosAdjuntados"
def __init__(self):
self.client = pymongo.MongoClient(self.MONGO_CLIENT)
self.db = self.client[self.DB_NAME]
self.collection = self.db[self.COLLECTION_NAME]
if not os.path.exists(self.CARPETA_ADJUNTOS):
os.makedirs(self.CARPETA_ADJUNTOS)
def correo_existe(self, remitente, asunto, fecha):
return self.collection.find_one({"remitente": remitente, "asunto": asunto, "fecha": fecha}) is not None
@ -46,6 +51,28 @@ class CorreoModelo:
}
self.collection.insert_one(correo)
def descargar_archivo_adjunto(self, correo_id):
"""Descarga los archivos adjuntos de un correo seleccionado."""
correo = self.collection.find_one({"_id": correo_id})
if not correo:
return False, "Correo no encontrado en la base de datos."
archivos_adjuntos = correo.get("archivos_adjuntos", [])
if not archivos_adjuntos:
return False, "No hay archivos adjuntos en este correo."
rutas_descargadas = []
for archivo_nombre in archivos_adjuntos:
ruta_guardado = os.path.join(self.CARPETA_ADJUNTOS, archivo_nombre)
try:
# Simulación de descarga del archivo adjunto
with open(ruta_guardado, "wb") as f:
f.write(b"Contenido de prueba") # En una implementación real, aquí iría el contenido del adjunto.
rutas_descargadas.append(ruta_guardado)
except Exception as e:
return False, f"Error al descargar el archivo: {e}"
return True, f"Archivos guardados en: {', '.join(rutas_descargadas)}"
def descargar_correos(self):
try:

View File

@ -78,6 +78,9 @@ class CorreoVista:
btn_mostrar = ttk.Button(frame_top, text="🔍 Mostrar Correo", command=self.mostrar_correo)
btn_mostrar.pack(side=tk.LEFT, padx=10)
btn_descargar_archivo = ttk.Button(frame_top, text="📥 Descargar Archivo", command=self.descargar_archivo_adjunto)
btn_descargar_archivo.pack(side=tk.LEFT, padx=10) # Agregado el nuevo botón
frame_list = tk.Frame(self.frame_f1, bg="#ffffff", bd=2, relief=tk.GROOVE)
frame_list.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)
@ -233,3 +236,21 @@ class CorreoVista:
self.controlador.cambiar_credenciales(nuevo_usuario, nueva_contraseña)
messagebox.showinfo("✅ Éxito", "Credenciales actualizadas correctamente.")
def descargar_archivo_adjunto(self):
seleccionado = self.tree.selection()
if not seleccionado:
messagebox.showwarning("⚠️ Advertencia", "Seleccione un correo para descargar el archivo adjunto.")
return
correo_id = seleccionado[0]
correo = self.tree.item(correo_id, "values")
correo_db = self.controlador.modelo.collection.find_one(
{"remitente": correo[0], "asunto": correo[1], "fecha": correo[2]}
)
if correo_db:
self.controlador.descargar_archivo_adjunto(correo_db["_id"])
else:
messagebox.showerror("❌ Error", "No se encontró el correo en la base de datos.")