fix tts clearing
This commit is contained in:
parent
72008cf97a
commit
4e394888b0
|
|
@ -658,10 +658,23 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
|
|||
if self._awaiting_tts.is_set():
|
||||
logger.info("Heartbeat: Warte auf TTS (Nachricht wurde gesendet)...")
|
||||
|
||||
# Warte bis TTS komplett fertig ist (kein Timeout!)
|
||||
# Warte bis TTS komplett fertig ist (mit Timeout als Fallback!)
|
||||
# Timeout verhindert dass Heartbeat ewig hängt wenn TTS die
|
||||
# Nachricht nicht findet (z.B. bei ID-Mismatch oder nur Steuercodes)
|
||||
tts_wait_start = time.time()
|
||||
tts_timeout = 30.0 # Maximal 30 Sekunden warten
|
||||
|
||||
while self.running and self._awaiting_tts.is_set():
|
||||
if self._speaking.is_set():
|
||||
logger.debug("Heartbeat: Claude spricht gerade...")
|
||||
|
||||
# Timeout-Check
|
||||
if time.time() - tts_wait_start > tts_timeout:
|
||||
logger.warning(f"Heartbeat: TTS-Timeout nach {tts_timeout}s - fahre trotzdem fort")
|
||||
console.print("[yellow]⚠️ TTS-Timeout - Nachricht evtl. nicht vorgelesen[/yellow]")
|
||||
self._awaiting_tts.clear() # Forciere Weiterfahren
|
||||
break
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
logger.info("Heartbeat: TTS fertig, fahre fort")
|
||||
|
|
@ -831,6 +844,8 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
|
|||
|
||||
# Marker ob wir die ID beim ersten Durchlauf synchronisieren müssen
|
||||
needs_id_sync = True
|
||||
# Zähler für leere Polls während _awaiting_tts gesetzt ist
|
||||
empty_polls_while_awaiting = 0
|
||||
|
||||
while self.running:
|
||||
try:
|
||||
|
|
@ -841,6 +856,7 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
|
|||
# Debug: Zeige was wir suchen und was wir finden
|
||||
if messages:
|
||||
logger.info(f"TTS: {len(messages)} neue Nachrichten (since={current_since_id})")
|
||||
empty_polls_while_awaiting = 0 # Reset bei Erfolg
|
||||
|
||||
# ════════════════════════════════════════════════════════════════
|
||||
# Bei leerem Ergebnis: Prüfe ob wir die ID synchronisieren müssen
|
||||
|
|
@ -858,6 +874,30 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
|
|||
console.print("[dim]TTS: Position synchronisiert, warte auf neue Nachrichten[/dim]")
|
||||
needs_id_sync = False # Nur einmal pro Session
|
||||
|
||||
# ════════════════════════════════════════════════════════════════
|
||||
# FALLBACK: Wenn wir auf TTS warten aber keine Nachrichten finden,
|
||||
# nach einigen Versuchen die ID neu synchronisieren und _awaiting_tts
|
||||
# clearen damit Heartbeat nicht ewig hängt.
|
||||
# ════════════════════════════════════════════════════════════════
|
||||
if not messages and self._awaiting_tts.is_set():
|
||||
empty_polls_while_awaiting += 1
|
||||
logger.debug(f"TTS: Keine Nachrichten gefunden, awaiting_tts gesetzt (Versuch {empty_polls_while_awaiting}/20)")
|
||||
|
||||
if empty_polls_while_awaiting >= 20: # Nach ca. 10 Sekunden (20 * 0.5s)
|
||||
logger.warning("TTS: Keine Nachricht gefunden nach 10s - synchronisiere ID neu")
|
||||
last_msg = self.chat.get_last_assistant_message()
|
||||
if last_msg:
|
||||
old_id = self.last_assistant_message_id
|
||||
self.last_assistant_message_id = last_msg.id
|
||||
if self._current_chat_id:
|
||||
self._save_tts_state(self._current_chat_id, last_msg.id)
|
||||
logger.info(f"TTS: Notfall-Sync (alt: {old_id[:20] if old_id else 'None'}... -> neu: {last_msg.id[:20]}...)")
|
||||
# _awaiting_tts clearen damit Heartbeat weitermachen kann
|
||||
self._awaiting_tts.clear()
|
||||
logger.info("TTS: _awaiting_tts.clear() (Notfall-Timeout)")
|
||||
console.print("[yellow]⚠️ TTS: Nachricht nicht gefunden - übersprungen[/yellow]")
|
||||
empty_polls_while_awaiting = 0
|
||||
|
||||
if messages:
|
||||
logger.debug(f"TTS: {len(messages)} neue Nachrichten gefunden")
|
||||
needs_id_sync = False # Erfolgreich gefunden, kein Sync nötig
|
||||
|
|
|
|||
Loading…
Reference in New Issue