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()
|
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]}...")
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue