diff --git a/lib/screens/discovery_screen.dart b/lib/screens/discovery_screen.dart index b8f49fa..10dc016 100644 --- a/lib/screens/discovery_screen.dart +++ b/lib/screens/discovery_screen.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:meshcore_open/models/contact.dart'; @@ -212,17 +213,7 @@ class _DiscoveryScreenState extends State { ) { var filtered = contacts.where((contact) { if (searchQuery.isEmpty) return true; - return matchesContactQuery( - Contact( - publicKey: contact.publicKey, - name: contact.name, - type: contact.type, - pathLength: contact.pathLength, - path: contact.path, - lastSeen: contact.lastSeen, - ), - searchQuery, - ); + return matchesDiscoveryContactQuery(contact, searchQuery); }).toList(); // Filter out own node from the list @@ -237,22 +228,6 @@ class _DiscoveryScreenState extends State { filtered = filtered.where(_matchesTypeFilter).toList(); } - if (showUnreadOnly) { - filtered = filtered.where((contact) { - return connector.getUnreadCountForContact( - Contact( - publicKey: contact.publicKey, - name: contact.name, - type: contact.type, - pathLength: contact.pathLength, - path: contact.path, - lastSeen: contact.lastSeen, - ), - ) > - 0; - }).toList(); - } - switch (sortOption) { case ContactSortOption.lastSeen: filtered.sort( diff --git a/lib/utils/contact_search.dart b/lib/utils/contact_search.dart index 31def4e..6cbd0b2 100644 --- a/lib/utils/contact_search.dart +++ b/lib/utils/contact_search.dart @@ -1,3 +1,5 @@ +import 'package:meshcore_open/models/discovery_contact.dart'; + import '../models/contact.dart'; bool matchesContactQuery(Contact contact, String query) { @@ -14,6 +16,20 @@ bool matchesContactQuery(Contact contact, String query) { return contact.publicKeyHex.toLowerCase().startsWith(hexPrefix); } +bool matchesDiscoveryContactQuery(DiscoveryContact contact, String query) { + final normalizedQuery = query.trim().toLowerCase(); + if (normalizedQuery.isEmpty) return true; + + if (contact.name.toLowerCase().contains(normalizedQuery)) { + return true; + } + + final hexPrefix = _extractHexPrefix(normalizedQuery); + if (hexPrefix == null) return false; + + return contact.publicKeyHex.toLowerCase().startsWith(hexPrefix); +} + String? _extractHexPrefix(String query) { var cleaned = query; if (cleaned.startsWith('0x')) {