From 4ce7878539fbca1150edc467c15b111979bfd4a7 Mon Sep 17 00:00:00 2001 From: Winston Lowe Date: Thu, 26 Mar 2026 16:46:01 -0700 Subject: [PATCH] Refactor contact handling by removing unnecessary mapping and improving clarity across multiple screens --- lib/screens/channel_message_path_screen.dart | 13 ++--- lib/screens/companion_radio_stats_screen.dart | 2 + lib/screens/map_screen.dart | 47 ++++++++++--------- lib/screens/path_trace_map.dart | 4 +- lib/utils/gpx_export.dart | 16 ++----- 5 files changed, 37 insertions(+), 45 deletions(-) diff --git a/lib/screens/channel_message_path_screen.dart b/lib/screens/channel_message_path_screen.dart index 89e2fdd..de83ac6 100644 --- a/lib/screens/channel_message_path_screen.dart +++ b/lib/screens/channel_message_path_screen.dart @@ -40,12 +40,7 @@ class ChannelMessagePathScreen extends StatelessWidget { final primaryPath = !channelMessage && !message.isOutgoing ? Uint8List.fromList(primaryPathTmp.reversed.toList()) : primaryPathTmp; -<<<<<<< HEAD final hops = _buildPathHops(primaryPath, connector, l10n); -======= - final contacts = connector.allContactsUnfiltered; - final hops = _buildPathHops(primaryPath, contacts, l10n); ->>>>>>> da74560 (Enhance contact handling and UI updates across multiple screens) final hasHopDetails = primaryPath.isNotEmpty; final observedLabel = _formatObservedHops( primaryPath.length, @@ -390,10 +385,7 @@ class _ChannelMessagePathMapScreenState : selectedPathTmp; final selectedIndex = _indexForPath(selectedPath, observedPaths); - final contacts = connector.allContactsUnfiltered - .map((c) => connector.getFromDiscovered(c)) - .toList(); - final hops = _buildPathHops(selectedPath, contacts, context.l10n); + final hops = _buildPathHops(selectedPath, connector, context.l10n); final points = []; @@ -830,7 +822,8 @@ List<_PathHop> _buildPathHops( ) { if (pathBytes.isEmpty) return const []; final candidatesByPrefix = >{}; - for (final contact in connector.allContacts) { + final allContacts = connector.allContacts; + for (final contact in allContacts) { if (contact.publicKey.isEmpty) continue; if (contact.type != advTypeRepeater && contact.type != advTypeRoom) { continue; diff --git a/lib/screens/companion_radio_stats_screen.dart b/lib/screens/companion_radio_stats_screen.dart index 01fb64d..9c37676 100644 --- a/lib/screens/companion_radio_stats_screen.dart +++ b/lib/screens/companion_radio_stats_screen.dart @@ -24,6 +24,7 @@ class _CompanionRadioStatsScreenState extends State { final c = context.read(); _connector = c; c.acquireRadioStatsPolling(); + c.setPollingInterval(1); c.radioStatsNotifier.addListener(_onStatsUpdate); } @@ -44,6 +45,7 @@ class _CompanionRadioStatsScreenState extends State { void dispose() { _connector?.radioStatsNotifier.removeListener(_onStatsUpdate); _connector?.releaseRadioStatsPolling(); + _connector?.setPollingInterval(30); super.dispose(); } diff --git a/lib/screens/map_screen.dart b/lib/screens/map_screen.dart index e2d5fa3..b26730b 100644 --- a/lib/screens/map_screen.dart +++ b/lib/screens/map_screen.dart @@ -139,9 +139,7 @@ class _MapScreenState extends State { builder: (context, connector, settingsService, pathHistory, child) { final tileCache = context.read(); final settings = settingsService.settings; - final allContacts = connector.allContacts - .map((c) => connector.getFromDiscovered(c)) - .toList(); + final allContacts = connector.allContacts; final contacts = settings.mapShowDiscoveryContacts ? allContacts @@ -491,10 +489,11 @@ class _MapScreenState extends State { ), ), ), - ..._buildGuessedMarker( - guessedLocations, - showLabels: _showNodeLabels, - ), + if (!settings.mapShowOverlaps) + ..._buildGuessedMarker( + guessedLocations, + showLabels: _showNodeLabels, + ), ..._buildMarkers( contactsWithLocation, settings, @@ -881,23 +880,29 @@ class _MapScreenState extends State { addContact = true; } - final hasOverlap = contacts - .where( - (c) => - c.publicKeyHex != contact.publicKeyHex && - c.publicKey.first == contact.publicKey.first && - (c.type == advTypeRepeater || c.type == advTypeRoom) && - (contact.type == advTypeRepeater || - contact.type == advTypeRoom), - ) - .firstOrNull; - - if (hasOverlap == null && - settings.mapShowOverlaps && - !_isBuildingPathTrace) { + if (contact.type == advTypeChat && _isBuildingPathTrace) { addContact = false; } + if (settings.mapShowOverlaps) { + final hasOverlap = contacts + .where( + (c) => + c.publicKeyHex != contact.publicKeyHex && + c.publicKey.first == contact.publicKey.first && + (c.type == advTypeRepeater || c.type == advTypeRoom) && + (contact.type == advTypeRepeater || + contact.type == advTypeRoom), + ) + .firstOrNull; + + if (hasOverlap == null && + settings.mapShowOverlaps && + !_isBuildingPathTrace) { + addContact = false; + } + } + if (addContact) { filtered.add(contact); } diff --git a/lib/screens/path_trace_map.dart b/lib/screens/path_trace_map.dart index 1064320..7f3b4eb 100644 --- a/lib/screens/path_trace_map.dart +++ b/lib/screens/path_trace_map.dart @@ -283,9 +283,7 @@ class _PathTraceMapScreenState extends State { if (widget.pathContacts != null) { pathContacts = {for (var c in widget.pathContacts!) c.publicKey[0]: c}; } else { - final contacts = connector.allContactsUnfiltered - .map((c) => connector.getFromDiscovered(c)) - .toList(); + final contacts = connector.allContactsUnfiltered; contacts.where((c) => c.type != advTypeChat).forEach((repeater) { if (lastContact.latitude != null && lastContact.longitude != null && diff --git a/lib/utils/gpx_export.dart b/lib/utils/gpx_export.dart index 021bb17..296cc3a 100644 --- a/lib/utils/gpx_export.dart +++ b/lib/utils/gpx_export.dart @@ -58,10 +58,9 @@ class GpxExport { } void addRepeaters() { - final contacts = _connector.allContacts - .where((c) => c.type == advTypeRepeater || c.type == advTypeRoom) - .map((c) => _connector.getFromDiscovered(c)) - .toList(); + final contacts = _connector.allContacts.where( + (c) => c.type == advTypeRepeater || c.type == advTypeRoom, + ); for (var contact in contacts) { if (contact.latitude == null || contact.longitude == null) { continue; @@ -80,10 +79,7 @@ class GpxExport { } void addContacts() { - final contacts = _connector.allContacts - .where((c) => c.type == advTypeChat) - .map((c) => _connector.getFromDiscovered(c)) - .toList(); + final contacts = _connector.allContacts.where((c) => c.type == advTypeChat); for (var contact in contacts) { if (contact.latitude == null || contact.longitude == null) { continue; @@ -102,9 +98,7 @@ class GpxExport { } void addAll() { - final contacts = _connector.allContacts - .map((c) => _connector.getFromDiscovered(c)) - .toList(); + final contacts = _connector.allContacts; for (var contact in contacts) { if (contact.latitude == null || contact.longitude == null) { continue;