mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-05 00:10:58 +10:00
Refactor contact search functionality to use DiscoveryContact model and simplify query matching
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:meshcore_open/models/contact.dart';
|
import 'package:meshcore_open/models/contact.dart';
|
||||||
@@ -212,17 +213,7 @@ class _DiscoveryScreenState extends State<DiscoveryScreen> {
|
|||||||
) {
|
) {
|
||||||
var filtered = contacts.where((contact) {
|
var filtered = contacts.where((contact) {
|
||||||
if (searchQuery.isEmpty) return true;
|
if (searchQuery.isEmpty) return true;
|
||||||
return matchesContactQuery(
|
return matchesDiscoveryContactQuery(contact, searchQuery);
|
||||||
Contact(
|
|
||||||
publicKey: contact.publicKey,
|
|
||||||
name: contact.name,
|
|
||||||
type: contact.type,
|
|
||||||
pathLength: contact.pathLength,
|
|
||||||
path: contact.path,
|
|
||||||
lastSeen: contact.lastSeen,
|
|
||||||
),
|
|
||||||
searchQuery,
|
|
||||||
);
|
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
// Filter out own node from the list
|
// Filter out own node from the list
|
||||||
@@ -237,22 +228,6 @@ class _DiscoveryScreenState extends State<DiscoveryScreen> {
|
|||||||
filtered = filtered.where(_matchesTypeFilter).toList();
|
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) {
|
switch (sortOption) {
|
||||||
case ContactSortOption.lastSeen:
|
case ContactSortOption.lastSeen:
|
||||||
filtered.sort(
|
filtered.sort(
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import 'package:meshcore_open/models/discovery_contact.dart';
|
||||||
|
|
||||||
import '../models/contact.dart';
|
import '../models/contact.dart';
|
||||||
|
|
||||||
bool matchesContactQuery(Contact contact, String query) {
|
bool matchesContactQuery(Contact contact, String query) {
|
||||||
@@ -14,6 +16,20 @@ bool matchesContactQuery(Contact contact, String query) {
|
|||||||
return contact.publicKeyHex.toLowerCase().startsWith(hexPrefix);
|
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) {
|
String? _extractHexPrefix(String query) {
|
||||||
var cleaned = query;
|
var cleaned = query;
|
||||||
if (cleaned.startsWith('0x')) {
|
if (cleaned.startsWith('0x')) {
|
||||||
|
|||||||
Reference in New Issue
Block a user