From 05e6515011cd70d635b78cd0dbc5e806c159f9fc Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Fri, 18 Sep 2026 10:24:23 +0200 Subject: [PATCH] fix(auth): lire p.credential sur les objets Profile; sortie propre via Event (plus de SystemExit dans le callback pystray) --- src/ai_typewriter/app.py | 7 ++----- src/ai_typewriter/tray.py | 7 ++++++- src/ai_typewriter/ui/auth_dialog.py | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/ai_typewriter/app.py b/src/ai_typewriter/app.py index 1159be4..37254f6 100644 --- a/src/ai_typewriter/app.py +++ b/src/ai_typewriter/app.py @@ -72,12 +72,9 @@ def run_tray(store: ConfigStore) -> int: app.start() # Maintient le processus en vie ; pystray run() tourne déjà dans un thread. + # On attend l'arrêt déclenché par l'élément « Quitter » (via un Event). try: - # Boucle événementielle tant que l'application n'est pas arrêtée. - while True: - import time - - time.sleep(3600) + app.wait() except KeyboardInterrupt: app.stop() return 0 diff --git a/src/ai_typewriter/tray.py b/src/ai_typewriter/tray.py index 8aa7700..4d6c660 100644 --- a/src/ai_typewriter/tray.py +++ b/src/ai_typewriter/tray.py @@ -48,6 +48,7 @@ class TrayApp: self._icon_thread: threading.Thread | None = None self._icon_factory = icon_factory self._menu_factory = menu_factory + self._exit_event = threading.Event() # -- fenêtre racine cachée (pour les dialogues) -------------------------- @@ -173,4 +174,8 @@ class TrayApp: self._icon.stop() except Exception: pass - raise SystemExit(0) \ No newline at end of file + self._exit_event.set() + + def wait(self) -> None: + """Blocage jusqu'à ce que l'application soit arrêtée (élément « Quitter »).""" + self._exit_event.wait() \ No newline at end of file diff --git a/src/ai_typewriter/ui/auth_dialog.py b/src/ai_typewriter/ui/auth_dialog.py index c6eafef..10ef74a 100644 --- a/src/ai_typewriter/ui/auth_dialog.py +++ b/src/ai_typewriter/ui/auth_dialog.py @@ -84,7 +84,7 @@ class AuthDialog(tk.Toplevel): # typiques et on laisse l'utilisateur vérifier leur existence. known = sorted( set(self._known) - | {p.get("credential", "") for p in self._known_profiles()} + | {p.credential for p in self._known_profiles() if p.credential} ) known = [k for k in known if k] for k in known: