diff --git a/src/services/__pycache__/email_client.cpython-312.pyc b/src/services/__pycache__/email_client.cpython-312.pyc index c4b6ea3..9926095 100644 Binary files a/src/services/__pycache__/email_client.cpython-312.pyc and b/src/services/__pycache__/email_client.cpython-312.pyc differ diff --git a/src/services/__pycache__/threads_manager.cpython-312.pyc b/src/services/__pycache__/threads_manager.cpython-312.pyc index 9f5ff84..08978d3 100644 Binary files a/src/services/__pycache__/threads_manager.cpython-312.pyc and b/src/services/__pycache__/threads_manager.cpython-312.pyc differ diff --git a/src/services/email_client.py b/src/services/email_client.py index 6d151ba..b657cea 100644 --- a/src/services/email_client.py +++ b/src/services/email_client.py @@ -61,15 +61,19 @@ class EmailClient: return [folder.decode().split(' "/" ')[-1] for folder in folders] return [] - def list_emails(self, limit=10): + def list_emails(self, folder="INBOX", limit=10): """Lista de correos más recientes""" - self.imap_conn.select("INBOX") + self.imap_conn.select(folder) status, response = self.imap_conn.search(None, "ALL") email_ids = response[0].split()[-limit:] emails = [] for email_id in email_ids: status, msg_data = self.imap_conn.fetch(email_id, "(RFC822)") - emails.append(msg_data[0][1].decode("utf-8")) + msg = message_from_bytes(msg_data[0][1]) + subject, encoding = decode_header(msg["Subject"])[0] + if isinstance(subject, bytes): + subject = subject.decode(encoding or "utf-8") + emails.append(subject) return emails def send_mail(self, to_address, subject, body): diff --git a/src/services/threads_manager.py b/src/services/threads_manager.py index 35856d7..77b5605 100644 --- a/src/services/threads_manager.py +++ b/src/services/threads_manager.py @@ -18,6 +18,7 @@ class ThreadsManager: "time": ThreadenTask(), "temperature": ThreadenTask(), "emails":ThreadenTask(), + "email_client":ThreadenTask(), "tetris_game":ThreadenTask(), "scrapper":ThreadenTask(), "radio_player": ThreadenTask(), @@ -45,7 +46,7 @@ class ThreadsManager: self.tasks["time"].start(self.update_time) self.tasks["temperature"].start(self.update_temperature) self.tasks["emails"].start(self.update_emails) - + self.tasks["email_client"].start(self.manage_email_client()) if self.system_monitor: for metric in self.system_monitor.metrics.keys(): @@ -104,8 +105,6 @@ class ThreadsManager: self.ui_instance.after(0, lambda: self.ui_instance.info_labels["fecha"].configure(text=f"Fecha: {current_date}")) time.sleep(1) - - def update_temperature(self): API_KEY = "4ba2b87d7fa32934530b5b4a5a83ebf7" # Reemplaza con tu clave de OpenWeatherMap CITY = "Madrid" # Cambia por tu ciudad @@ -121,8 +120,6 @@ class ThreadsManager: print(f"Error al obtener la temperatura: {e}") time.sleep(600) # Actualiza cada 10 minutos - - def get_real_temperature(self, api_key, city): url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric" response = requests.get(url) @@ -132,7 +129,16 @@ class ThreadsManager: else: print(f"Error al obtener la temperatura: {response.status_code}") return None - + + def manage_email_client(self): + while self.tasks["email_client"].running: + try: + if not self.email_client.is_connected(): + self.email_client.reconnect() + time.sleep(10) + except Exception as e: + print(f"Error en el EmailClient: {e}") + time.sleep(10) def update_emails(self): """Actualiza la cantidad de correos no leidos en tiempo real""" diff --git a/src/ui/__pycache__/centered_window.cpython-312.pyc b/src/ui/__pycache__/centered_window.cpython-312.pyc index 753da6f..c51fc63 100644 Binary files a/src/ui/__pycache__/centered_window.cpython-312.pyc and b/src/ui/__pycache__/centered_window.cpython-312.pyc differ diff --git a/src/ui/centered_window.py b/src/ui/centered_window.py index e62e07a..8d3a646 100644 --- a/src/ui/centered_window.py +++ b/src/ui/centered_window.py @@ -14,6 +14,7 @@ class CenteredWindow(ctk.CTk): # Inicializacion de la clase: super().__init__() self.title(title) + self.after_tasks = [] #Configurar Email Client self.email_client = EmailClient( @@ -46,8 +47,13 @@ class CenteredWindow(ctk.CTk): self.protocol("WM_DELETE_WINDOW", self.on_close) + def schedule_tasks(self, delay, callback): + task_id = self.after(delay, callback) + self.after_tasks.append(task_id) + return task_id + def configure_window(self): - # Configuracion de la ventana: + # Configuración de la ventana: self.configure(bg_color="lightgray") self.create_left_panel() self.create_right_panel() @@ -70,10 +76,14 @@ class CenteredWindow(ctk.CTk): if hasattr(self.thread_manager, "scrapper"): self.thread_manager.scrapper.stop_scraping() + if self.system_monitor: + self.system_monitor.running = False + + for task in self.after_tasks: + self.after_cancel(task) + self.destroy() - - def create_left_panel(self): # Panel izquierdo left_panel = ctk.CTkFrame(self, width=200)