diff --git a/__pycache__/controlador.cpython-313.pyc b/__pycache__/controlador.cpython-313.pyc index 2ac4385..e804c6f 100644 Binary files a/__pycache__/controlador.cpython-313.pyc and b/__pycache__/controlador.cpython-313.pyc differ diff --git a/__pycache__/modelo.cpython-313.pyc b/__pycache__/modelo.cpython-313.pyc index 6e3cda6..48bfa93 100644 Binary files a/__pycache__/modelo.cpython-313.pyc and b/__pycache__/modelo.cpython-313.pyc differ diff --git a/__pycache__/vista.cpython-313.pyc b/__pycache__/vista.cpython-313.pyc index 517684d..bcb5e32 100644 Binary files a/__pycache__/vista.cpython-313.pyc and b/__pycache__/vista.cpython-313.pyc differ diff --git a/archivosAdjuntados/MainActivity.java b/archivosAdjuntados/MainActivity.java new file mode 100644 index 0000000..80f37de --- /dev/null +++ b/archivosAdjuntados/MainActivity.java @@ -0,0 +1 @@ +Contenido de prueba \ No newline at end of file diff --git a/archivosAdjuntados/prueba1.txt b/archivosAdjuntados/prueba1.txt new file mode 100644 index 0000000..80f37de --- /dev/null +++ b/archivosAdjuntados/prueba1.txt @@ -0,0 +1 @@ +Contenido de prueba \ No newline at end of file diff --git a/archivosAdjuntados/prueba2.txt b/archivosAdjuntados/prueba2.txt new file mode 100644 index 0000000..80f37de --- /dev/null +++ b/archivosAdjuntados/prueba2.txt @@ -0,0 +1 @@ +Contenido de prueba \ No newline at end of file diff --git a/controlador.py b/controlador.py index bd5b751..e97dd48 100644 --- a/controlador.py +++ b/controlador.py @@ -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) \ No newline at end of file diff --git a/modelo.py b/modelo.py index 843bc88..a274f6e 100644 --- a/modelo.py +++ b/modelo.py @@ -25,11 +25,16 @@ class CorreoModelo: MONGO_CLIENT = "mongodb://localhost:27017/" 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,7 +51,29 @@ 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: mail = poplib.POP3(self.POP3_SERVER, self.POP3_PORT) diff --git a/vista.py b/vista.py index e813726..f01cdf5 100644 --- a/vista.py +++ b/vista.py @@ -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) @@ -232,4 +235,22 @@ class CorreoVista: return self.controlador.cambiar_credenciales(nuevo_usuario, nueva_contraseña) - messagebox.showinfo("✅ Éxito", "Credenciales actualizadas correctamente.") \ No newline at end of file + 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.")