Updated some code and added email_client to work on a separated thread

This commit is contained in:
Dennis Eckerskorn 2025-01-09 22:25:02 +01:00
parent 99d111ed01
commit c1372d3d96
6 changed files with 32 additions and 12 deletions

View File

@ -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):

View File

@ -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"""

View File

@ -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)