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:
parent
b00eec263d
commit
18dc24e86b
|
|
@ -734,13 +734,33 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
|
|||
self._tts_active.wait()
|
||||
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:
|
||||
try:
|
||||
# Hole neue Nachrichten
|
||||
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:
|
||||
logger.debug(f"TTS: {len(messages)} neue Nachrichten gefunden")
|
||||
needs_id_sync = False # Erfolgreich gefunden, kein Sync nötig
|
||||
|
||||
for msg in messages:
|
||||
logger.debug(f"TTS: Nachricht - assistant={msg.is_from_assistant}, id={msg.id[:20]}..., text={msg.text[:50]}...")
|
||||
|
|
|
|||
|
|
@ -526,19 +526,17 @@ class ClaudeChatInterface:
|
|||
# WICHTIG: Wenn since_id nicht gefunden wurde, könnte es sein dass:
|
||||
# 1. Der Chat gewechselt wurde
|
||||
# 2. Die Seite neu geladen wurde
|
||||
# 3. Die ID-Generierung sich geändert hat
|
||||
# In diesem Fall: Gib die LETZTE Nachricht zurück (nicht alle!)
|
||||
# So wird nur die neueste vorgelesen statt alles nochmal
|
||||
# 3. Die ID-Generierung sich geändert hat (Hashes sind nicht 100% stabil)
|
||||
#
|
||||
# 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:
|
||||
# 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_"):
|
||||
logger.debug(f"since_id '{since_id[:30]}...' nicht gefunden, gebe nur letzte Nachricht zurück")
|
||||
# Nur die letzte Assistant-Nachricht zurückgeben
|
||||
for msg in reversed(all_messages):
|
||||
if msg.is_from_assistant:
|
||||
return [msg]
|
||||
# Wenn keine Assistant-Nachricht, gib leere Liste zurück
|
||||
logger.debug(f"since_id '{since_id[:30]}...' nicht gefunden in {len(all_messages)} Nachrichten - überspringe alle (Neustart-Schutz)")
|
||||
# Aktualisiere intern auf die letzte bekannte Nachricht
|
||||
# damit zukünftige NEUE Nachrichten erkannt werden
|
||||
return []
|
||||
return []
|
||||
|
||||
return new_messages
|
||||
|
|
|
|||
Loading…
Reference in New Issue