fix number is save, add extra logging for ids

This commit is contained in:
duffyduck 2025-12-27 21:20:30 +01:00
parent c34eb1c740
commit e7a62efe90
3 changed files with 44 additions and 30 deletions

View File

@ -0,0 +1,3 @@
{
"53884f57-43ed-4047-a32d-429cf976d2d0": "claude_msg_39"
}

View File

@ -740,7 +740,12 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
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) current_since_id = self.last_assistant_message_id
messages = self.chat.get_new_messages(since_id=current_since_id)
# Debug: Zeige was wir suchen und was wir finden
if messages:
logger.info(f"TTS: {len(messages)} neue Nachrichten (since={current_since_id})")
# ════════════════════════════════════════════════════════════════ # ════════════════════════════════════════════════════════════════
# Bei leerem Ergebnis: Prüfe ob wir die ID synchronisieren müssen # Bei leerem Ergebnis: Prüfe ob wir die ID synchronisieren müssen
@ -763,10 +768,12 @@ Erst dann starten die automatischen TICKs mit Bildern!"""
needs_id_sync = False # Erfolgreich gefunden, kein Sync nötig 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}, text={msg.text[:50]}...")
if msg.is_from_assistant: if msg.is_from_assistant:
old_id = self.last_assistant_message_id
self.last_assistant_message_id = msg.id self.last_assistant_message_id = msg.id
logger.info(f"TTS: ID aktualisiert: {old_id} -> {msg.id}")
# State speichern (persistent) # State speichern (persistent)
if self._current_chat_id: if self._current_chat_id:

View File

@ -513,7 +513,38 @@ class ClaudeChatInterface:
if since_id is None: if since_id is None:
return all_messages return all_messages
# Filtere nur neue # ════════════════════════════════════════════════════════════════
# STRATEGIE: Nutze immer den Index aus claude_msg_X
# Die IDs werden bei jedem Aufruf neu generiert, daher können wir
# nicht auf exakte ID-Übereinstimmung vertrauen.
# Stattdessen extrahieren wir den Index und geben alle Nachrichten
# NACH diesem Index zurück.
# ════════════════════════════════════════════════════════════════
if since_id and since_id.startswith("claude_msg_"):
try:
last_index = int(since_id.split("_")[-1])
# Zähle Claude-Nachrichten und gib nur die nach dem Index zurück
claude_msgs = [m for m in all_messages if m.is_from_assistant]
total_claude = len(claude_msgs)
if last_index < total_claude - 1:
# Es gibt neue Nachrichten!
new_claude_msgs = claude_msgs[last_index + 1:]
logger.debug(f"Index-basiert: {len(new_claude_msgs)} neue Claude-Nachrichten (Index {last_index + 1} bis {total_claude - 1})")
return new_claude_msgs
else:
# Keine neuen Nachrichten (last_index ist der letzte oder darüber)
logger.debug(f"Index-basiert: Keine neuen Nachrichten (last={last_index}, total={total_claude})")
return []
except (ValueError, IndexError) as e:
logger.warning(f"Fehler beim Parsen von since_id '{since_id}': {e}")
# Alte Hash-basierte IDs oder ungültiges Format
if since_id and since_id.startswith("claude_"):
logger.debug(f"since_id '{since_id[:30]}...' hat altes Format - überspringe alle")
return []
# Fallback: Exakte ID-Suche (für Nicht-Claude-IDs)
new_messages = [] new_messages = []
found_marker = False found_marker = False
@ -523,33 +554,6 @@ class ClaudeChatInterface:
elif msg.id == since_id: elif msg.id == since_id:
found_marker = True found_marker = True
# WICHTIG: Wenn since_id nicht gefunden wurde, versuche eine Fallback-Logik
if not found_marker and all_messages:
# Neue IDs haben Format "claude_msg_X" wobei X ein Zähler ist
# Alte IDs haben Format "claude_HASH" - diese sind nicht mehr gültig
if since_id and since_id.startswith("claude_msg_"):
# Extrahiere den Zähler und gib alle Nachrichten NACH diesem Index zurück
try:
last_index = int(since_id.split("_")[-1])
# Zähle Claude-Nachrichten und gib nur die nach dem Index zurück
claude_msgs = [m for m in all_messages if m.is_from_assistant]
if last_index < len(claude_msgs):
# Es gibt neue Nachrichten!
new_claude_msgs = claude_msgs[last_index + 1:]
logger.debug(f"Fallback: {len(new_claude_msgs)} neue Claude-Nachrichten ab Index {last_index + 1}")
return new_claude_msgs
else:
# Keine neuen Nachrichten
return []
except (ValueError, IndexError):
pass
# Alte Hash-basierte IDs oder ungültiges Format
if since_id and since_id.startswith("claude_"):
logger.debug(f"since_id '{since_id[:30]}...' hat altes Format oder nicht gefunden - überspringe alle (Neustart-Schutz)")
return []
return []
return new_messages return new_messages
def _get_all_messages(self) -> List[ChatMessage]: def _get_all_messages(self) -> List[ChatMessage]: