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 [folder.decode().split(' "/" ')[-1] for folder in folders]
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def list_emails(self, limit=10):
|
def list_emails(self, folder="INBOX", limit=10):
|
||||||
"""Lista de correos más recientes"""
|
"""Lista de correos más recientes"""
|
||||||
self.imap_conn.select("INBOX")
|
self.imap_conn.select(folder)
|
||||||
status, response = self.imap_conn.search(None, "ALL")
|
status, response = self.imap_conn.search(None, "ALL")
|
||||||
email_ids = response[0].split()[-limit:]
|
email_ids = response[0].split()[-limit:]
|
||||||
emails = []
|
emails = []
|
||||||
for email_id in email_ids:
|
for email_id in email_ids:
|
||||||
status, msg_data = self.imap_conn.fetch(email_id, "(RFC822)")
|
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
|
return emails
|
||||||
|
|
||||||
def send_mail(self, to_address, subject, body):
|
def send_mail(self, to_address, subject, body):
|
||||||
|
|
|
@ -18,6 +18,7 @@ class ThreadsManager:
|
||||||
"time": ThreadenTask(),
|
"time": ThreadenTask(),
|
||||||
"temperature": ThreadenTask(),
|
"temperature": ThreadenTask(),
|
||||||
"emails":ThreadenTask(),
|
"emails":ThreadenTask(),
|
||||||
|
"email_client":ThreadenTask(),
|
||||||
"tetris_game":ThreadenTask(),
|
"tetris_game":ThreadenTask(),
|
||||||
"scrapper":ThreadenTask(),
|
"scrapper":ThreadenTask(),
|
||||||
"radio_player": ThreadenTask(),
|
"radio_player": ThreadenTask(),
|
||||||
|
@ -45,7 +46,7 @@ class ThreadsManager:
|
||||||
self.tasks["time"].start(self.update_time)
|
self.tasks["time"].start(self.update_time)
|
||||||
self.tasks["temperature"].start(self.update_temperature)
|
self.tasks["temperature"].start(self.update_temperature)
|
||||||
self.tasks["emails"].start(self.update_emails)
|
self.tasks["emails"].start(self.update_emails)
|
||||||
|
self.tasks["email_client"].start(self.manage_email_client())
|
||||||
|
|
||||||
if self.system_monitor:
|
if self.system_monitor:
|
||||||
for metric in self.system_monitor.metrics.keys():
|
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}"))
|
self.ui_instance.after(0, lambda: self.ui_instance.info_labels["fecha"].configure(text=f"Fecha: {current_date}"))
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def update_temperature(self):
|
def update_temperature(self):
|
||||||
API_KEY = "4ba2b87d7fa32934530b5b4a5a83ebf7" # Reemplaza con tu clave de OpenWeatherMap
|
API_KEY = "4ba2b87d7fa32934530b5b4a5a83ebf7" # Reemplaza con tu clave de OpenWeatherMap
|
||||||
CITY = "Madrid" # Cambia por tu ciudad
|
CITY = "Madrid" # Cambia por tu ciudad
|
||||||
|
@ -121,8 +120,6 @@ class ThreadsManager:
|
||||||
print(f"Error al obtener la temperatura: {e}")
|
print(f"Error al obtener la temperatura: {e}")
|
||||||
time.sleep(600) # Actualiza cada 10 minutos
|
time.sleep(600) # Actualiza cada 10 minutos
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_real_temperature(self, api_key, city):
|
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"
|
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
|
@ -133,6 +130,15 @@ class ThreadsManager:
|
||||||
print(f"Error al obtener la temperatura: {response.status_code}")
|
print(f"Error al obtener la temperatura: {response.status_code}")
|
||||||
return None
|
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):
|
def update_emails(self):
|
||||||
"""Actualiza la cantidad de correos no leidos en tiempo real"""
|
"""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:
|
# Inicializacion de la clase:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.title(title)
|
self.title(title)
|
||||||
|
self.after_tasks = []
|
||||||
|
|
||||||
#Configurar Email Client
|
#Configurar Email Client
|
||||||
self.email_client = EmailClient(
|
self.email_client = EmailClient(
|
||||||
|
@ -46,8 +47,13 @@ class CenteredWindow(ctk.CTk):
|
||||||
|
|
||||||
self.protocol("WM_DELETE_WINDOW", self.on_close)
|
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):
|
def configure_window(self):
|
||||||
# Configuracion de la ventana:
|
# Configuración de la ventana:
|
||||||
self.configure(bg_color="lightgray")
|
self.configure(bg_color="lightgray")
|
||||||
self.create_left_panel()
|
self.create_left_panel()
|
||||||
self.create_right_panel()
|
self.create_right_panel()
|
||||||
|
@ -70,10 +76,14 @@ class CenteredWindow(ctk.CTk):
|
||||||
if hasattr(self.thread_manager, "scrapper"):
|
if hasattr(self.thread_manager, "scrapper"):
|
||||||
self.thread_manager.scrapper.stop_scraping()
|
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()
|
self.destroy()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def create_left_panel(self):
|
def create_left_panel(self):
|
||||||
# Panel izquierdo
|
# Panel izquierdo
|
||||||
left_panel = ctk.CTkFrame(self, width=200)
|
left_panel = ctk.CTkFrame(self, width=200)
|
||||||
|
|
Loading…
Reference in New Issue