| .. | .. |
|---|
| 20 | 20 | import '../services/audio_service.dart'; |
|---|
| 21 | 21 | import '../services/message_store.dart'; |
|---|
| 22 | 22 | import '../services/mqtt_service.dart'; |
|---|
| 23 | +import '../services/navigate_notifier.dart'; |
|---|
| 23 | 24 | import '../services/push_service.dart'; |
|---|
| 24 | 25 | import '../theme/app_theme.dart'; |
|---|
| 25 | 26 | import '../widgets/command_bar.dart'; |
|---|
| .. | .. |
|---|
| 61 | 62 | int _lastSeq = 0; |
|---|
| 62 | 63 | bool _isCatchingUp = false; |
|---|
| 63 | 64 | bool _screenshotForChat = false; |
|---|
| 65 | + // FIFO dedup queue: O(1) eviction by removing from front when over cap. |
|---|
| 66 | + final List<int> _seenSeqsList = []; |
|---|
| 64 | 67 | final Set<int> _seenSeqs = {}; |
|---|
| 65 | 68 | bool _sessionReady = false; |
|---|
| 66 | 69 | final List<Map<String, dynamic>> _pendingMessages = []; |
|---|
| .. | .. |
|---|
| 222 | 225 | debugPrint('MQTT error: $error'); |
|---|
| 223 | 226 | }; |
|---|
| 224 | 227 | |
|---|
| 225 | | - NavigateNotifier.instance = NavigateNotifier( |
|---|
| 228 | + ref.read(navigateNotifierProvider.notifier).state = NavigateNotifier( |
|---|
| 226 | 229 | sendKey: (key, sessionId) { |
|---|
| 227 | 230 | _sendCommand('nav', {'key': key}); |
|---|
| 228 | 231 | }, |
|---|
| .. | .. |
|---|
| 262 | 265 | // Dedup: skip messages we've already processed |
|---|
| 263 | 266 | if (_seenSeqs.contains(seq)) return; |
|---|
| 264 | 267 | _seenSeqs.add(seq); |
|---|
| 265 | | - // Keep set bounded |
|---|
| 266 | | - if (_seenSeqs.length > 500) { |
|---|
| 267 | | - final sorted = _seenSeqs.toList()..sort(); |
|---|
| 268 | | - _seenSeqs.removeAll(sorted.sublist(0, sorted.length - 300)); |
|---|
| 268 | + _seenSeqsList.add(seq); |
|---|
| 269 | + // Keep bounded at 500 with O(1) FIFO eviction (drop oldest first) |
|---|
| 270 | + if (_seenSeqsList.length > 500) { |
|---|
| 271 | + final evict = _seenSeqsList.removeAt(0); |
|---|
| 272 | + _seenSeqs.remove(evict); |
|---|
| 269 | 273 | } |
|---|
| 270 | 274 | if (seq > _lastSeq) { |
|---|
| 271 | 275 | _lastSeq = seq; |
|---|