Updated some code and added email_client to work on a separated thread
This commit is contained in:
parent
99d111ed01
commit
c1372d3d96
Binary file not shown.
Binary file not shown.
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
@ -133,6 +130,15 @@ class ThreadsManager:
|
|||
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"""
|
||||
|
|
Binary file not shown.
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue