From d43c60aef243d8ff633a87b705ef4b2212f46c77 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Mon, 29 Dec 2025 00:54:34 +0100 Subject: [PATCH] tts loop fix --- python_bridge/chat_audio_bridge.py | 3 ++- python_bridge/chat_web_interface.py | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/python_bridge/chat_audio_bridge.py b/python_bridge/chat_audio_bridge.py index 3fb34e1..644f963 100755 --- a/python_bridge/chat_audio_bridge.py +++ b/python_bridge/chat_audio_bridge.py @@ -553,7 +553,8 @@ Erst dann starten die automatischen TICKs mit Bildern!""" # Warte auf [READY] - KEIN Timeout-Fallback! # Heartbeat startet NUR wenn Claude wirklich [READY] sendet - if self.chat.wait_for_ready_signal(timeout=300): # 5 Minuten max + # stop_check prüft ob Q gedrückt wurde (self.running = False) + if self.chat.wait_for_ready_signal(timeout=300, stop_check=lambda: not self.running): # 5 Minuten max # ════════════════════════════════════════════════════════════════ # Chat-ID ermitteln und gespeicherten TTS-State laden # ════════════════════════════════════════════════════════════════ diff --git a/python_bridge/chat_web_interface.py b/python_bridge/chat_web_interface.py index 3a09760..f9a4e9e 100644 --- a/python_bridge/chat_web_interface.py +++ b/python_bridge/chat_web_interface.py @@ -997,7 +997,7 @@ class ClaudeChatInterface: logger.debug(f"Fehler bei typing-check: {e}") return False - def wait_for_ready_signal(self, timeout: int = 120) -> bool: + def wait_for_ready_signal(self, timeout: int = 120, stop_check: callable = None) -> bool: """ Wartet bis Claude [READY] sendet. @@ -1006,9 +1006,11 @@ class ClaudeChatInterface: Args: timeout: Maximale Wartezeit in Sekunden + stop_check: Optionale Funktion die True zurückgibt wenn abgebrochen werden soll + (z.B. lambda: not bridge.running) Returns: - True wenn [READY] empfangen, False bei Timeout + True wenn [READY] empfangen, False bei Timeout oder Abbruch """ logger.info(f"Warte auf [READY] Signal in letzter Claude-Nachricht (max {timeout}s)...") start_time = time.time() @@ -1018,10 +1020,19 @@ class ClaudeChatInterface: logger.debug(f"Initiale Claude-Nachrichten: {initial_count}") while time.time() - start_time < timeout: + # Prüfe ob abgebrochen werden soll (z.B. Q gedrückt) + if stop_check and stop_check(): + logger.info("wait_for_ready abgebrochen (stop_check)") + return False + # Warte bis Claude fertig ist mit Tippen typing_wait_start = time.time() while self.is_claude_typing(): time.sleep(0.5) + # Prüfe auch hier auf Abbruch + if stop_check and stop_check(): + logger.info("wait_for_ready abgebrochen während typing-wait") + return False # Timeout für typing-wait (max 60s) if time.time() - typing_wait_start > 60: logger.debug("Typing-Wait Timeout, prüfe trotzdem...")