import tkinter as tk from tkinter import ttk, messagebox import threading class InboxTab: def __init__(self, parent, email_client): """ Inicializa la pestaña de la bandeja de entrada. Args: parent (tk.Notebook): Contenedor de pestañas. email_client (MailClient): Cliente de correo para gestionar la recepción y eliminación de correos. """ self.email_client = email_client # Crear un nuevo frame en la pestaña self.frame = ttk.Frame(parent) parent.add(self.frame, text="Bandeja de Entrada") # Campos de entrada para el correo y contraseña ttk.Label(self.frame, text="Correo electrónico:").grid(row=0, column=0, sticky="e", padx=5, pady=5) self.entry_email = ttk.Entry(self.frame, width=40) self.entry_email.grid(row=0, column=1, padx=5, pady=5) ttk.Label(self.frame, text="Contraseña:").grid(row=1, column=0, sticky="e", padx=5, pady=5) self.entry_password = ttk.Entry(self.frame, show="*", width=40) self.entry_password.grid(row=1, column=1, padx=5, pady=5) # Botón para cargar correos self.load_button = ttk.Button(self.frame, text="Cargar Correos", command=self.load_emails_thread) self.load_button.grid(row=2, column=1, sticky="e", padx=5, pady=5) # Lista para mostrar los correos self.email_listbox = tk.Listbox(self.frame, width=80, height=20) self.email_listbox.grid(row=3, column=0, columnspan=2, padx=5, pady=5) self.email_listbox.bind("", self.show_email) # Botón para eliminar un correo seleccionado self.delete_button = ttk.Button(self.frame, text="Eliminar Correo", command=self.delete_email_thread) self.delete_button.grid(row=4, column=1, sticky="e", padx=5, pady=5) self.emails = [] def load_emails_thread(self): """Carga los correos en un hilo separado.""" threading.Thread(target=self.load_emails).start() def delete_email_thread(self): """Elimina un correo en un hilo separado.""" threading.Thread(target=self.delete_email).start() def load_emails(self): """Obtiene la lista de correos desde el servidor y la muestra en la lista.""" email_address = self.entry_email.get() password = self.entry_password.get() if not email_address or not password: messagebox.showerror("Error", "Debe ingresar su correo y contraseña.") return self.emails = [] self.email_listbox.delete(0, tk.END) # Obtener los correos usando el cliente de correos emails = self.email_client.fetch_emails(email_address, password) if isinstance(emails, str): messagebox.showerror("Error", emails) return for email_id, subject, sender in emails: self.email_listbox.insert(tk.END, f"{subject} - {sender}") self.emails.append((email_id, subject, sender)) def delete_email(self): """Elimina un correo seleccionado en la lista.""" selected_index = self.email_listbox.curselection() if not selected_index: messagebox.showwarning("Advertencia", "Seleccione un correo para eliminar.") return email_id, _, _ = self.emails[selected_index[0]] email_address = self.entry_email.get() password = self.entry_password.get() # Eliminar el correo usando el cliente result = self.email_client.delete_email(email_address, password, email_id) if "eliminado" in result: self.email_listbox.delete(selected_index) messagebox.showinfo("Éxito", result) else: messagebox.showerror("Error", result) def show_email(self, event): """Muestra el contenido del correo seleccionado.""" selected_index = self.email_listbox.curselection() if selected_index: email_id, subject, sender = self.emails[selected_index[0]] messagebox.showinfo("Correo", f"Asunto: {subject}\nDe: {sender}")