mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Start to make the node list search async
This commit is contained in:
parent
33d1c6bbac
commit
0ffd3a06d0
3 changed files with 32 additions and 14 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue