Start to make the node list search async

This commit is contained in:
Garth Vander Houwen 2024-06-29 20:21:53 -07:00
parent 33d1c6bbac
commit 0ffd3a06d0
3 changed files with 32 additions and 14 deletions

View file

@ -645,6 +645,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
do {
disconnectPeripheral(reconnect: false)
try container.restorePersistentStore(from: databasePath)
context?.refreshAllObjects()
let request = MyInfoEntity.fetchRequest()
try context?.fetch(request)
UserDefaults.preferredPeripheralNum = Int(myInfo?.myNodeNum ?? 0)

View file

@ -11,7 +11,6 @@ import SwiftUI
struct NodeListFilter: View {
@Environment(\.dismiss) private var dismiss
@State var editMode = EditMode.active
/// Filters
var filterTitle = "Node Filters"
@Binding var viaLora: Bool
@Binding var viaMqtt: Bool
@ -130,8 +129,6 @@ struct NodeListFilter: View {
}
}
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
.listRowSeparator(roleFilter ? .hidden : .visible)
if roleFilter {
VStack {
List(DeviceRoles.allCases, selection: $deviceRoles) { dr in

View file

@ -284,37 +284,55 @@ struct NodeList: View {
}
.navigationSplitViewStyle(.balanced)
.onChange(of: searchText) { _ in
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: viaLora) { _ in
if !viaLora && !viaMqtt {
viaMqtt = true
}
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: viaMqtt) { _ in
if !viaLora && !viaMqtt {
viaLora = true
}
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: [deviceRoles]) { _ in
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: hopsAway) { _ in
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: isOnline) { _ in
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: isFavorite) { _ in
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: maxDistance) { _ in
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: distanceFilter) { _ in
searchNodeList()
Task {
await searchNodeList()
}
}
.onChange(of: (appState.navigationPath)) { newPath in
@ -339,11 +357,13 @@ struct NodeList: View {
if self.bleManager.context == nil {
self.bleManager.context = context
}
searchNodeList()
Task {
await searchNodeList()
}
}
}
private func searchNodeList() {
private func searchNodeList() async -> Void {
/// Case Insensitive Search Text Predicates
let searchPredicates = ["user.userId", "user.numString", "user.hwModel", "user.longName", "user.shortName"].map { property in
return NSPredicate(format: "%K CONTAINS[c] %@", property, searchText)