From 59a9917225dd64cdc77bfcd3b280054728b26cd1 Mon Sep 17 00:00:00 2001
From: Matthias Nott <mnott@mnsoft.org>
Date: Wed, 01 Apr 2026 18:14:33 +0200
Subject: [PATCH] fix: L1 privacy manifest, L2 privacy policy, M3-M5 code quality, version/icon confirmed

---
 lib/screens/chat_screen.dart |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/lib/screens/chat_screen.dart b/lib/screens/chat_screen.dart
index 77af560..7d8503a 100644
--- a/lib/screens/chat_screen.dart
+++ b/lib/screens/chat_screen.dart
@@ -20,6 +20,7 @@
 import '../services/audio_service.dart';
 import '../services/message_store.dart';
 import '../services/mqtt_service.dart';
+import '../services/navigate_notifier.dart';
 import '../services/push_service.dart';
 import '../theme/app_theme.dart';
 import '../widgets/command_bar.dart';
@@ -61,6 +62,8 @@
   int _lastSeq = 0;
   bool _isCatchingUp = false;
   bool _screenshotForChat = false;
+  // FIFO dedup queue: O(1) eviction by removing from front when over cap.
+  final List<int> _seenSeqsList = [];
   final Set<int> _seenSeqs = {};
   bool _sessionReady = false;
   final List<Map<String, dynamic>> _pendingMessages = [];
@@ -222,7 +225,7 @@
       debugPrint('MQTT error: $error');
     };
 
-    NavigateNotifier.instance = NavigateNotifier(
+    ref.read(navigateNotifierProvider.notifier).state = NavigateNotifier(
       sendKey: (key, sessionId) {
         _sendCommand('nav', {'key': key});
       },
@@ -262,10 +265,11 @@
       // 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));
+      _seenSeqsList.add(seq);
+      // Keep bounded at 500 with O(1) FIFO eviction (drop oldest first)
+      if (_seenSeqsList.length > 500) {
+        final evict = _seenSeqsList.removeAt(0);
+        _seenSeqs.remove(evict);
       }
       if (seq > _lastSeq) {
         _lastSeq = seq;

--
Gitblit v1.3.1