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