Tried some more to close conections
This commit is contained in:
parent
36e1a225e6
commit
9e52887ebb
|
@ -2,7 +2,7 @@
|
|||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.13" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.12" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
|
@ -3,5 +3,5 @@
|
|||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.13" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12" project-jdk-type="Python SDK" />
|
||||
</project>
|
Binary file not shown.
Binary file not shown.
|
@ -19,6 +19,7 @@ class EmailClientPOP:
|
|||
self.smtp_port = smtp_port
|
||||
self.pop_conn = None
|
||||
self.smtp_conn = None
|
||||
self.running = True
|
||||
|
||||
# Ruta del archivo SQLite:
|
||||
self.db_file = os.path.join("resources/db_email", "emails.db")
|
||||
|
@ -59,7 +60,7 @@ class EmailClientPOP:
|
|||
def connect_pop(self):
|
||||
"""Conexión al servidor POP"""
|
||||
try:
|
||||
self.pop_conn = poplib.POP3(self.pop_server, self.pop_port)
|
||||
self.pop_conn = poplib.POP3(self.pop_server, self.pop_port, timeout=10)
|
||||
self.pop_conn.user(self.email)
|
||||
self.pop_conn.pass_(self.password)
|
||||
print("Conexión POP exitosa")
|
||||
|
@ -70,7 +71,7 @@ class EmailClientPOP:
|
|||
def connect_smtp(self):
|
||||
"""Conexión al servidor SMTP"""
|
||||
try:
|
||||
self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port)
|
||||
self.smtp_conn = smtplib.SMTP(self.smtp_server, self.smtp_port, timeout=10)
|
||||
self.smtp_conn.login(self.email, self.password)
|
||||
print("Conexión SMTP exitosa")
|
||||
except Exception as e:
|
||||
|
@ -84,7 +85,11 @@ class EmailClientPOP:
|
|||
def reconnect(self):
|
||||
"""Intenta reconectar a los servidores POP y SMTP"""
|
||||
print("Intentando reconectar al servidor de correo...")
|
||||
if not self.running:
|
||||
return
|
||||
if self.pop_conn is None:
|
||||
self.connect_pop()
|
||||
if self.smtp_conn is None:
|
||||
self.connect_smtp()
|
||||
|
||||
def fetch_unread_count(self):
|
||||
|
@ -203,7 +208,18 @@ class EmailClientPOP:
|
|||
|
||||
def close_connections(self):
|
||||
"""Cierra las conexiones POP y SMTP"""
|
||||
try:
|
||||
if self.pop_conn:
|
||||
self.pop_conn.quit()
|
||||
self.pop_conn = None
|
||||
print("Conexión POP cerrada.")
|
||||
except Exception as e:
|
||||
print(f"Error al cerrar conexión POP: {e}")
|
||||
|
||||
try:
|
||||
if self.smtp_conn:
|
||||
self.smtp_conn.quit()
|
||||
self.smtp_conn = None
|
||||
print("Conexión SMTP cerrada.")
|
||||
except Exception as e:
|
||||
print(f"Error al cerrar conexión SMTP: {e}")
|
||||
|
|
|
@ -9,6 +9,7 @@ from src.services.threaden_task import ThreadenTask
|
|||
|
||||
class ThreadsManager:
|
||||
"""Constructor"""
|
||||
|
||||
def __init__(self, ui_instance, email_client):
|
||||
self.ui_instance = ui_instance
|
||||
self.email_client = email_client
|
||||
|
@ -17,10 +18,10 @@ class ThreadsManager:
|
|||
self.tasks = {
|
||||
"time": ThreadenTask(),
|
||||
"temperature": ThreadenTask(),
|
||||
"emails":ThreadenTask(),
|
||||
"email_client":ThreadenTask(),
|
||||
"tetris_game":ThreadenTask(),
|
||||
"scrapper":ThreadenTask(),
|
||||
"emails": ThreadenTask(),
|
||||
"email_client": ThreadenTask(),
|
||||
"tetris_game": ThreadenTask(),
|
||||
"scrapper": ThreadenTask(),
|
||||
"radio_player": ThreadenTask(),
|
||||
}
|
||||
self.system_monitor_tasks = {}
|
||||
|
@ -58,13 +59,13 @@ class ThreadsManager:
|
|||
if hasattr(self.ui_instance, "tetris_game"):
|
||||
self.tasks["tetris_game"].start(self.update_tetris_game)
|
||||
|
||||
|
||||
|
||||
def stop_threads(self):
|
||||
"""Recorre tasks y para los hilos"""
|
||||
"""Detiene todos los hilos y cierra las conexiones."""
|
||||
for name, task in self.tasks.items():
|
||||
task.stop()
|
||||
print(f"Hilo '{name}' detenido")
|
||||
if name == "email_client" and hasattr(self.email_client, "close_connections"):
|
||||
self.email_client.close_connections()
|
||||
|
||||
for name, task in self.system_monitor_tasks.items():
|
||||
task.stop()
|
||||
|
@ -73,7 +74,6 @@ class ThreadsManager:
|
|||
if self.system_monitor:
|
||||
self.system_monitor.running = False
|
||||
|
||||
|
||||
def update_tetris_game(self):
|
||||
"""Ciclo de actualizacion del tetris game"""
|
||||
while self.tasks["tetris_game"].running:
|
||||
|
@ -85,7 +85,6 @@ class ThreadsManager:
|
|||
print(f"Error en update_tetris_game: {e}")
|
||||
break
|
||||
|
||||
|
||||
def update_system_metric(self, metric):
|
||||
"""Actualiza una métrica específica del monitor del sistema."""
|
||||
while self.system_monitor_tasks[metric].running:
|
||||
|
@ -95,14 +94,14 @@ class ThreadsManager:
|
|||
except Exception as e:
|
||||
print(f"Error updating metric {metric}: {e}")
|
||||
|
||||
|
||||
|
||||
def update_time(self):
|
||||
while self.tasks["time"].running:
|
||||
current_time = datetime.datetime.now().strftime('%H:%M:%S')
|
||||
current_date = datetime.datetime.now().strftime('%d/%m/%Y')
|
||||
self.ui_instance.after(0, lambda: self.ui_instance.info_labels["hora"].configure(text=f"Hora: {current_time}"))
|
||||
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["hora"].configure(text=f"Hora: {current_time}"))
|
||||
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):
|
||||
|
@ -114,7 +113,8 @@ class ThreadsManager:
|
|||
if temperature is not None:
|
||||
self.ui_instance.after(
|
||||
0,
|
||||
lambda: self.ui_instance.info_labels["temperatura"].configure(text=f"Temperatura local: {temperature}°C")
|
||||
lambda: self.ui_instance.info_labels["temperatura"].configure(
|
||||
text=f"Temperatura local: {temperature}°C")
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"Error al obtener la temperatura: {e}")
|
||||
|
@ -139,9 +139,12 @@ class ThreadsManager:
|
|||
except Exception as e:
|
||||
print(f"Error en el EmailClient: {e}")
|
||||
time.sleep(10)
|
||||
finally:
|
||||
self.email_client.close_connections()
|
||||
print("Cliente de correo detenido y conexiones cerradas")
|
||||
|
||||
def update_emails(self):
|
||||
"""Actualiza la cantidad de correos no leidos en tiempo real"""
|
||||
"""Actualiza la cantidad de correos no leídos en tiempo real."""
|
||||
while self.tasks["emails"].running:
|
||||
try:
|
||||
if not self.email_client.is_connected():
|
||||
|
@ -149,6 +152,7 @@ class ThreadsManager:
|
|||
|
||||
if self.email_client.is_connected():
|
||||
unread_count = self.email_client.fetch_unread_count()
|
||||
if self.ui_instance.winfo_exists(): # Verifica si la ventana aún existe
|
||||
self.ui_instance.after(
|
||||
0,
|
||||
lambda: self.ui_instance.info_labels["emails"].configure(
|
||||
|
@ -157,16 +161,7 @@ class ThreadsManager:
|
|||
)
|
||||
else:
|
||||
print("No hay conexión al servidor de correo")
|
||||
self.ui_instance.after(
|
||||
0,
|
||||
lambda: self.ui_instance.info_labels["emails"].configure(
|
||||
text="Servidor no disponible"
|
||||
)
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"Error en el hilo de correos: {e}")
|
||||
time.sleep(60)
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Binary file not shown.
|
@ -64,24 +64,37 @@ class CenteredWindow(ctk.CTk):
|
|||
|
||||
def on_close(self):
|
||||
"""Maneja el cierre de la ventana"""
|
||||
try:
|
||||
# Establecer bandera de cierre para el cliente de correo
|
||||
if hasattr(self, "email_client") and self.email_client:
|
||||
self.email_client.running = False
|
||||
|
||||
# Detener todos los hilos
|
||||
self.thread_manager.stop_threads()
|
||||
|
||||
# Cancelar tareas programadas en Tkinter
|
||||
for task in self.after_tasks:
|
||||
try:
|
||||
self.after_cancel(task)
|
||||
except Exception as e:
|
||||
print(f"Error al cancelar tarea programada: {e}")
|
||||
|
||||
# Cerrar conexiones del cliente POP/SMTP
|
||||
if hasattr(self, "email_client") and self.email_client:
|
||||
self.email_client.close_connections()
|
||||
|
||||
# Detener tareas adicionales (Tetris, scraping)
|
||||
if hasattr(self, "tetris_game") and self.tetris_game.running:
|
||||
self.tetris_game.stop_game()
|
||||
|
||||
if "tetris_game" in self.thread_manager.tasks:
|
||||
self.thread_manager.tasks["tetris_game"].stop()
|
||||
|
||||
if hasattr(self.thread_manager, "scrapper"):
|
||||
if hasattr(self.thread_manager, "scrapper") and 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)
|
||||
|
||||
# Destruir la ventana principal
|
||||
self.destroy()
|
||||
print("Aplicación cerrada correctamente.")
|
||||
except Exception as e:
|
||||
print(f"Error al cerrar la aplicación: {e}")
|
||||
|
||||
def create_left_panel(self):
|
||||
# Panel izquierdo
|
||||
|
@ -335,7 +348,7 @@ class CenteredWindow(ctk.CTk):
|
|||
listbox_frame.grid(row=0, column=0, sticky="nsew", padx=10, pady=10)
|
||||
|
||||
# Crear una lista de correos con un scrollbar
|
||||
self.email_listbox = ctk.CTkTextbox(listbox_frame, width=800, height=800)
|
||||
self.email_listbox = ctk.CTkTextbox(listbox_frame, width=600, height=600)
|
||||
self.email_listbox.grid(row=0, column=0, sticky="nsew", padx=10, pady=10)
|
||||
self.email_listbox.configure(state="disabled") # Inicialmente deshabilitada
|
||||
|
||||
|
@ -375,9 +388,11 @@ class CenteredWindow(ctk.CTk):
|
|||
|
||||
if self.email_client.is_connected():
|
||||
emails = self.email_client.fetch_emails()
|
||||
self.email_listbox.delete(0, tk.END)
|
||||
self.email_listbox.configure(state="normal")
|
||||
self.email_listbox.delete("1.0", tk.END) # Borra todo el contenido actual
|
||||
for email in emails:
|
||||
self.email_listbox.insert(tk.END, f"{email['subject']} - {email['from']}")
|
||||
self.email_listbox.insert(tk.END, f"De: {email['sender']}\nAsunto: {email['subject']}\n\n")
|
||||
self.email_listbox.configure(state="disabled")
|
||||
else:
|
||||
print("No hay conexión al servidor de correo.")
|
||||
except Exception as e:
|
||||
|
|
Loading…
Reference in New Issue