TTS startet, lädt gespeicherte ID (falls vorhanden)

Sucht nach neuen Nachrichten - ID nicht gefunden → leere Liste
Synchronisiert ID auf letzte aktuelle Nachricht (ohne vorzulesen)
Ab jetzt werden nur wirklich NEUE Nachrichten vorgelesen
This commit is contained in:
duffyduck 2025-12-27 21:02:07 +01:00
parent b00eec263d
commit 18dc24e86b
2 changed files with 29 additions and 11 deletions

View File

@ -734,13 +734,33 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
self._tts_active.wait() self._tts_active.wait()
logger.info("TTS aktiviert - beginne mit Vorlesen neuer Nachrichten") logger.info("TTS aktiviert - beginne mit Vorlesen neuer Nachrichten")
# Marker ob wir die ID beim ersten Durchlauf synchronisieren müssen
needs_id_sync = True
while self.running: while self.running:
try: try:
# Hole neue Nachrichten # Hole neue Nachrichten
messages = self.chat.get_new_messages(since_id=self.last_assistant_message_id) messages = self.chat.get_new_messages(since_id=self.last_assistant_message_id)
# ════════════════════════════════════════════════════════════════
# Bei leerem Ergebnis: Prüfe ob wir die ID synchronisieren müssen
# Das passiert wenn die gespeicherte ID nicht mehr existiert
# (z.B. nach Neustart, Chat-Änderungen, etc.)
# ════════════════════════════════════════════════════════════════
if not messages and needs_id_sync:
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: ID synchronisiert (alt: {old_id[:20] if old_id else 'None'}... -> neu: {last_msg.id[:20]}...)")
console.print("[dim]TTS: Position synchronisiert, warte auf neue Nachrichten[/dim]")
needs_id_sync = False # Nur einmal pro Session
if messages: if messages:
logger.debug(f"TTS: {len(messages)} neue Nachrichten gefunden") logger.debug(f"TTS: {len(messages)} neue Nachrichten gefunden")
needs_id_sync = False # Erfolgreich gefunden, kein Sync nötig
for msg in messages: for msg in messages:
logger.debug(f"TTS: Nachricht - assistant={msg.is_from_assistant}, id={msg.id[:20]}..., text={msg.text[:50]}...") logger.debug(f"TTS: Nachricht - assistant={msg.is_from_assistant}, id={msg.id[:20]}..., text={msg.text[:50]}...")

View File

@ -526,19 +526,17 @@ class ClaudeChatInterface:
# WICHTIG: Wenn since_id nicht gefunden wurde, könnte es sein dass: # WICHTIG: Wenn since_id nicht gefunden wurde, könnte es sein dass:
# 1. Der Chat gewechselt wurde # 1. Der Chat gewechselt wurde
# 2. Die Seite neu geladen wurde # 2. Die Seite neu geladen wurde
# 3. Die ID-Generierung sich geändert hat # 3. Die ID-Generierung sich geändert hat (Hashes sind nicht 100% stabil)
# In diesem Fall: Gib die LETZTE Nachricht zurück (nicht alle!) #
# So wird nur die neueste vorgelesen statt alles nochmal # LÖSUNG: Gib KEINE Nachrichten zurück um Wiederholungen zu vermeiden!
# Bei Neustart würden sonst alle alten Nachrichten nochmal vorgelesen.
# Der TTS-State sollte bei echtem Chat-Wechsel manuell gelöscht werden.
if not found_marker and all_messages: if not found_marker and all_messages:
# Prüfe ob since_id ein altes Format hat (mit Index)
# z.B. "claude_0_123456" vs neues Format "claude_123456"
if since_id and since_id.startswith("claude_"): if since_id and since_id.startswith("claude_"):
logger.debug(f"since_id '{since_id[:30]}...' nicht gefunden, gebe nur letzte Nachricht zurück") logger.debug(f"since_id '{since_id[:30]}...' nicht gefunden in {len(all_messages)} Nachrichten - überspringe alle (Neustart-Schutz)")
# Nur die letzte Assistant-Nachricht zurückgeben # Aktualisiere intern auf die letzte bekannte Nachricht
for msg in reversed(all_messages): # damit zukünftige NEUE Nachrichten erkannt werden
if msg.is_from_assistant: return []
return [msg]
# Wenn keine Assistant-Nachricht, gib leere Liste zurück
return [] return []
return new_messages return new_messages