diff --git a/Meshtastic/Views/Nodes/MeshMap.swift b/Meshtastic/Views/Nodes/MeshMap.swift index 520fbbab..3e090f35 100644 --- a/Meshtastic/Views/Nodes/MeshMap.swift +++ b/Meshtastic/Views/Nodes/MeshMap.swift @@ -44,8 +44,9 @@ struct MeshMap: View { var delay: Double = 0 @State private var scale: CGFloat = 0.5 + /// "time >= %@ && nodePosition != nil && latest == true" @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "time", ascending: true)], - predicate: NSPredicate(format: "time >= %@ && nodePosition != nil && latest == true", Calendar.current.date(byAdding: .day, value: -30, to: Date())! as NSDate), animation: .none) + predicate: NSPredicate(format: "nodePosition != nil && latest == true", Calendar.current.date(byAdding: .day, value: -30, to: Date())! as NSDate), animation: .none) private var positions: FetchedResults @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "name", ascending: false)], diff --git a/Meshtastic/Views/Settings/Config/DeviceConfig.swift b/Meshtastic/Views/Settings/Config/DeviceConfig.swift index f7d97eb5..ddd596a8 100644 --- a/Meshtastic/Views/Settings/Config/DeviceConfig.swift +++ b/Meshtastic/Views/Settings/Config/DeviceConfig.swift @@ -143,8 +143,11 @@ struct DeviceConfig: View { ) { Button("Erase all device and app data?", role: .destructive) { if bleManager.sendNodeDBReset(fromUser: node!.user!, toUser: node!.user!) { - bleManager.disconnectPeripheral() - clearCoreDataDatabase(context: context) + DispatchQueue.main.asyncAfter(deadline: .now() + 1) { + bleManager.disconnectPeripheral() + clearCoreDataDatabase(context: context) + } + } else { print("NodeDB Reset Failed") } diff --git a/Meshtastic/Views/Settings/Settings.swift b/Meshtastic/Views/Settings/Settings.swift index b693ce20..9bc1792c 100644 --- a/Meshtastic/Views/Settings/Settings.swift +++ b/Meshtastic/Views/Settings/Settings.swift @@ -13,7 +13,7 @@ struct Settings: View { @FetchRequest(sortDescriptors: [NSSortDescriptor(key: "user.longName", ascending: true)], animation: .default) private var nodes: FetchedResults @State private var selectedNode: Int = 0 - @State private var connectedNodeNum: Int = 0 + @State private var preferredNodeNum: Int = 0 @State private var selection: SettingsSidebar = .about enum SettingsSidebar { case appSettings @@ -57,7 +57,7 @@ struct Settings: View { Text("app.settings") } .tag(SettingsSidebar.appSettings) - let node = nodes.first(where: { $0.num == connectedNodeNum }) + let node = nodes.first(where: { $0.num == preferredNodeNum }) let hasAdmin = node?.myInfo?.adminIndex ?? 0 > 0 ? true : false if !(node?.deviceConfig?.isManaged ?? false) { Section("Configure") { @@ -84,8 +84,8 @@ struct Settings: View { .onChange(of: selectedNode) { newValue in if selectedNode > 0 { let node = nodes.first(where: { $0.num == newValue }) - let connectedNode = nodes.first(where: { $0.num == connectedNodeNum }) - connectedNodeNum = Int(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral?.num ?? 0 : 0) + let connectedNode = nodes.first(where: { $0.num == preferredNodeNum }) + preferredNodeNum = Int(connectedNode?.num ?? 0)// Int(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral?.num ?? 0 : 0) if connectedNode != nil && connectedNode?.user != nil && connectedNode?.myInfo != nil && node?.user != nil && node?.metadata == nil { let adminMessageId = bleManager.requestDeviceMetadata(fromUser: connectedNode!.user!, toUser: node!.user!, adminIndex: connectedNode!.myInfo!.adminIndex, context: context) if adminMessageId > 0 { @@ -100,14 +100,14 @@ struct Settings: View { } Section("radio.configuration") { NavigationLink { - ShareChannels(node: nodes.first(where: { $0.num == connectedNodeNum })) + ShareChannels(node: nodes.first(where: { $0.num == preferredNodeNum })) } label: { Image(systemName: "qrcode") .symbolRenderingMode(.hierarchical) Text("share.channels") } .tag(SettingsSidebar.shareChannels) - .disabled(selectedNode > 0 && selectedNode != connectedNodeNum) + .disabled(selectedNode > 0 && selectedNode != preferredNodeNum) NavigationLink { UserConfig(node: nodes.first(where: { $0.num == selectedNode })) } label: { @@ -125,14 +125,14 @@ struct Settings: View { } .tag(SettingsSidebar.loraConfig) NavigationLink { - Channels(node: nodes.first(where: { $0.num == connectedNodeNum })) + Channels(node: nodes.first(where: { $0.num == preferredNodeNum })) } label: { Image(systemName: "fibrechannel") .symbolRenderingMode(.hierarchical) Text("channels") } .tag(SettingsSidebar.channelConfig) - .disabled(selectedNode > 0 && selectedNode != connectedNodeNum) + .disabled(selectedNode > 0 && selectedNode != preferredNodeNum) NavigationLink { BluetoothConfig(node: nodes.first(where: { $0.num == selectedNode })) } label: { @@ -257,7 +257,7 @@ struct Settings: View { } .tag(SettingsSidebar.meshLog) NavigationLink { - let connectedNode = nodes.first(where: { $0.num == connectedNodeNum }) + let connectedNode = nodes.first(where: { $0.num == preferredNodeNum }) AdminMessageList(user: connectedNode?.user) } label: { Image(systemName: "building.columns") @@ -268,14 +268,14 @@ struct Settings: View { } Section(header: Text("Firmware")) { NavigationLink { - Firmware(node: nodes.first(where: { $0.num == connectedNodeNum })) + Firmware(node: nodes.first(where: { $0.num == preferredNodeNum })) } label: { Image(systemName: "arrow.up.arrow.down.square") .symbolRenderingMode(.hierarchical) Text("Firmware Updates") } .tag(SettingsSidebar.about) - .disabled(selectedNode > 0 && selectedNode != connectedNodeNum) + .disabled(selectedNode > 0 && selectedNode != preferredNodeNum) } } } @@ -283,7 +283,7 @@ struct Settings: View { if self.bleManager.context == nil { self.bleManager.context = context } - self.connectedNodeNum = UserDefaults.preferredPeripheralNum// Int(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral?.num ?? 0 : 0) + self.preferredNodeNum = UserDefaults.preferredPeripheralNum// Int(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral?.num ?? 0 : 0) selectedNode = Int(bleManager.connectedPeripheral != nil ? bleManager.connectedPeripheral?.num ?? 0 : 0) } .listStyle(GroupedListStyle())