mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-26 05:26:37 +10:00
Refactor contact handling by removing unnecessary mapping and improving clarity across multiple screens
This commit is contained in:
@@ -40,12 +40,7 @@ class ChannelMessagePathScreen extends StatelessWidget {
|
|||||||
final primaryPath = !channelMessage && !message.isOutgoing
|
final primaryPath = !channelMessage && !message.isOutgoing
|
||||||
? Uint8List.fromList(primaryPathTmp.reversed.toList())
|
? Uint8List.fromList(primaryPathTmp.reversed.toList())
|
||||||
: primaryPathTmp;
|
: primaryPathTmp;
|
||||||
<<<<<<< HEAD
|
|
||||||
final hops = _buildPathHops(primaryPath, connector, l10n);
|
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 hasHopDetails = primaryPath.isNotEmpty;
|
||||||
final observedLabel = _formatObservedHops(
|
final observedLabel = _formatObservedHops(
|
||||||
primaryPath.length,
|
primaryPath.length,
|
||||||
@@ -390,10 +385,7 @@ class _ChannelMessagePathMapScreenState
|
|||||||
: selectedPathTmp;
|
: selectedPathTmp;
|
||||||
|
|
||||||
final selectedIndex = _indexForPath(selectedPath, observedPaths);
|
final selectedIndex = _indexForPath(selectedPath, observedPaths);
|
||||||
final contacts = connector.allContactsUnfiltered
|
final hops = _buildPathHops(selectedPath, connector, context.l10n);
|
||||||
.map((c) => connector.getFromDiscovered(c))
|
|
||||||
.toList();
|
|
||||||
final hops = _buildPathHops(selectedPath, contacts, context.l10n);
|
|
||||||
|
|
||||||
final points = <LatLng>[];
|
final points = <LatLng>[];
|
||||||
|
|
||||||
@@ -830,7 +822,8 @@ List<_PathHop> _buildPathHops(
|
|||||||
) {
|
) {
|
||||||
if (pathBytes.isEmpty) return const [];
|
if (pathBytes.isEmpty) return const [];
|
||||||
final candidatesByPrefix = <int, List<Contact>>{};
|
final candidatesByPrefix = <int, List<Contact>>{};
|
||||||
for (final contact in connector.allContacts) {
|
final allContacts = connector.allContacts;
|
||||||
|
for (final contact in allContacts) {
|
||||||
if (contact.publicKey.isEmpty) continue;
|
if (contact.publicKey.isEmpty) continue;
|
||||||
if (contact.type != advTypeRepeater && contact.type != advTypeRoom) {
|
if (contact.type != advTypeRepeater && contact.type != advTypeRoom) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ class _CompanionRadioStatsScreenState extends State<CompanionRadioStatsScreen> {
|
|||||||
final c = context.read<MeshCoreConnector>();
|
final c = context.read<MeshCoreConnector>();
|
||||||
_connector = c;
|
_connector = c;
|
||||||
c.acquireRadioStatsPolling();
|
c.acquireRadioStatsPolling();
|
||||||
|
c.setPollingInterval(1);
|
||||||
c.radioStatsNotifier.addListener(_onStatsUpdate);
|
c.radioStatsNotifier.addListener(_onStatsUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,6 +45,7 @@ class _CompanionRadioStatsScreenState extends State<CompanionRadioStatsScreen> {
|
|||||||
void dispose() {
|
void dispose() {
|
||||||
_connector?.radioStatsNotifier.removeListener(_onStatsUpdate);
|
_connector?.radioStatsNotifier.removeListener(_onStatsUpdate);
|
||||||
_connector?.releaseRadioStatsPolling();
|
_connector?.releaseRadioStatsPolling();
|
||||||
|
_connector?.setPollingInterval(30);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+26
-21
@@ -139,9 +139,7 @@ class _MapScreenState extends State<MapScreen> {
|
|||||||
builder: (context, connector, settingsService, pathHistory, child) {
|
builder: (context, connector, settingsService, pathHistory, child) {
|
||||||
final tileCache = context.read<MapTileCacheService>();
|
final tileCache = context.read<MapTileCacheService>();
|
||||||
final settings = settingsService.settings;
|
final settings = settingsService.settings;
|
||||||
final allContacts = connector.allContacts
|
final allContacts = connector.allContacts;
|
||||||
.map((c) => connector.getFromDiscovered(c))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
final contacts = settings.mapShowDiscoveryContacts
|
final contacts = settings.mapShowDiscoveryContacts
|
||||||
? allContacts
|
? allContacts
|
||||||
@@ -491,10 +489,11 @@ class _MapScreenState extends State<MapScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
..._buildGuessedMarker(
|
if (!settings.mapShowOverlaps)
|
||||||
guessedLocations,
|
..._buildGuessedMarker(
|
||||||
showLabels: _showNodeLabels,
|
guessedLocations,
|
||||||
),
|
showLabels: _showNodeLabels,
|
||||||
|
),
|
||||||
..._buildMarkers(
|
..._buildMarkers(
|
||||||
contactsWithLocation,
|
contactsWithLocation,
|
||||||
settings,
|
settings,
|
||||||
@@ -881,23 +880,29 @@ class _MapScreenState extends State<MapScreen> {
|
|||||||
addContact = true;
|
addContact = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
final hasOverlap = contacts
|
if (contact.type == advTypeChat && _isBuildingPathTrace) {
|
||||||
.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;
|
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) {
|
if (addContact) {
|
||||||
filtered.add(contact);
|
filtered.add(contact);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -283,9 +283,7 @@ class _PathTraceMapScreenState extends State<PathTraceMapScreen> {
|
|||||||
if (widget.pathContacts != null) {
|
if (widget.pathContacts != null) {
|
||||||
pathContacts = {for (var c in widget.pathContacts!) c.publicKey[0]: c};
|
pathContacts = {for (var c in widget.pathContacts!) c.publicKey[0]: c};
|
||||||
} else {
|
} else {
|
||||||
final contacts = connector.allContactsUnfiltered
|
final contacts = connector.allContactsUnfiltered;
|
||||||
.map((c) => connector.getFromDiscovered(c))
|
|
||||||
.toList();
|
|
||||||
contacts.where((c) => c.type != advTypeChat).forEach((repeater) {
|
contacts.where((c) => c.type != advTypeChat).forEach((repeater) {
|
||||||
if (lastContact.latitude != null &&
|
if (lastContact.latitude != null &&
|
||||||
lastContact.longitude != null &&
|
lastContact.longitude != null &&
|
||||||
|
|||||||
@@ -58,10 +58,9 @@ class GpxExport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void addRepeaters() {
|
void addRepeaters() {
|
||||||
final contacts = _connector.allContacts
|
final contacts = _connector.allContacts.where(
|
||||||
.where((c) => c.type == advTypeRepeater || c.type == advTypeRoom)
|
(c) => c.type == advTypeRepeater || c.type == advTypeRoom,
|
||||||
.map((c) => _connector.getFromDiscovered(c))
|
);
|
||||||
.toList();
|
|
||||||
for (var contact in contacts) {
|
for (var contact in contacts) {
|
||||||
if (contact.latitude == null || contact.longitude == null) {
|
if (contact.latitude == null || contact.longitude == null) {
|
||||||
continue;
|
continue;
|
||||||
@@ -80,10 +79,7 @@ class GpxExport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void addContacts() {
|
void addContacts() {
|
||||||
final contacts = _connector.allContacts
|
final contacts = _connector.allContacts.where((c) => c.type == advTypeChat);
|
||||||
.where((c) => c.type == advTypeChat)
|
|
||||||
.map((c) => _connector.getFromDiscovered(c))
|
|
||||||
.toList();
|
|
||||||
for (var contact in contacts) {
|
for (var contact in contacts) {
|
||||||
if (contact.latitude == null || contact.longitude == null) {
|
if (contact.latitude == null || contact.longitude == null) {
|
||||||
continue;
|
continue;
|
||||||
@@ -102,9 +98,7 @@ class GpxExport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void addAll() {
|
void addAll() {
|
||||||
final contacts = _connector.allContacts
|
final contacts = _connector.allContacts;
|
||||||
.map((c) => _connector.getFromDiscovered(c))
|
|
||||||
.toList();
|
|
||||||
for (var contact in contacts) {
|
for (var contact in contacts) {
|
||||||
if (contact.latitude == null || contact.longitude == null) {
|
if (contact.latitude == null || contact.longitude == null) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user