From 798112d632b970ab1649af541a43de6912d2d43a Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Sun, 22 Mar 2026 11:04:17 +0100
Subject: [PATCH] fix: seq-based dedup prevents catch_up from duplicating messages
---
lib/screens/chat_screen.dart | 17 ++++++++++++++---
1 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/lib/screens/chat_screen.dart b/lib/screens/chat_screen.dart
index cc58220..e60e02a 100644
--- a/lib/screens/chat_screen.dart
+++ b/lib/screens/chat_screen.dart
@@ -42,6 +42,7 @@
int _lastSeq = 0;
bool _isCatchingUp = false;
bool _screenshotForChat = false;
+ final Set<int> _seenSeqs = {};
@override
void initState() {
@@ -153,9 +154,19 @@
void _handleMessage(Map<String, dynamic> msg) {
// Track sequence numbers for catch_up protocol
final seq = msg['seq'] as int?;
- if (seq != null && seq > _lastSeq) {
- _lastSeq = seq;
- _saveLastSeq();
+ if (seq != null) {
+ // Dedup: skip messages we've already processed
+ if (_seenSeqs.contains(seq)) return;
+ _seenSeqs.add(seq);
+ // Keep set bounded
+ if (_seenSeqs.length > 500) {
+ final sorted = _seenSeqs.toList()..sort();
+ _seenSeqs.removeAll(sorted.sublist(0, sorted.length - 300));
+ }
+ if (seq > _lastSeq) {
+ _lastSeq = seq;
+ _saveLastSeq();
+ }
}
final type = msg['type'] as String?;
--
Gitblit v1.3.1