From d3d16e206e8f41ef8c4455e8d687ce144acfea0a Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Tue, 27 Feb 2024 11:26:26 -0800 Subject: [PATCH] Release Cleanup Add back block range test functionaitly, hook it up to the device range test settings. Delete messages when deleting a channel Make pax counter clear work properly --- Meshtastic/Helpers/BLEManager.swift | 10 ++++---- Meshtastic/Helpers/MeshPackets.swift | 11 +++++--- Meshtastic/Persistence/UpdateCoreData.swift | 25 +++++++++++++++++++ Meshtastic/Views/Nodes/PaxCounterLog.swift | 6 ++--- Meshtastic/Views/Settings/Channels.swift | 4 +++ .../Config/Module/StoreForwardConfig.swift | 2 +- de.lproj/Localizable.strings | 1 + en.lproj/Localizable.strings | 1 + he.lproj/Localizable.strings | 1 + pl.lproj/Localizable.strings | 1 + zh-Hans.lproj/Localizable.strings | 1 + 11 files changed, 51 insertions(+), 12 deletions(-) diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index efb6394b..8accf312 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -593,7 +593,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate // Log any other unknownApp calls if !nowKnown { MeshLogger.log("🕸️ MESH PACKET received for Unknown App UNHANDLED \((try? decodedInfo.packet.jsonString()) ?? "JSON Decode Failure")") } case .textMessageApp, .detectionSensorApp: - textMessageAppPacket(packet: decodedInfo.packet, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) + textMessageAppPacket(packet: decodedInfo.packet, wantRangeTestPackets: wantRangeTestPackets, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) case .remoteHardwareApp: MeshLogger.log("🕸️ MESH PACKET received for Remote Hardware App UNHANDLED \((try? decodedInfo.packet.jsonString()) ?? "JSON Decode Failure")") case .positionApp: @@ -620,7 +620,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate } case .rangeTestApp: if wantRangeTestPackets { - textMessageAppPacket(packet: decodedInfo.packet, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) + textMessageAppPacket(packet: decodedInfo.packet, wantRangeTestPackets: true, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), context: context!) } else { MeshLogger.log("🕸️ MESH PACKET received for Range Test App Range testing is disabled.") @@ -653,7 +653,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate var hopNodes: [TraceRouteHopEntity] = [] for node in routingMessage.route { var hopNode = getNodeInfo(id: Int64(node), context: context!) - if hopNode == nil { + if hopNode == nil && hopNode?.num ?? 0 > 0 { hopNode = createNodeInfo(num: Int64(node), context: context!) } let traceRouteHop = TraceRouteHopEntity(context: context!) @@ -2590,10 +2590,10 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate MeshLogger.log("📮 Store and Forward \(storeAndForwardMessage.rr) message received from \(packet.from)") case .routerTextDirect: MeshLogger.log("💬 Store and Forward \(storeAndForwardMessage.rr) message received from \(packet.from)") - textMessageAppPacket(packet: packet, connectedNode: connectedNodeNum, storeForward: true, context: context) + textMessageAppPacket(packet: packet, wantRangeTestPackets: false, connectedNode: connectedNodeNum, storeForward: true, context: context) case .routerTextBroadcast: MeshLogger.log("✉️ Store and Forward \(storeAndForwardMessage.rr) message received from \(packet.from)") - textMessageAppPacket(packet: packet, connectedNode: connectedNodeNum, storeForward: true, context: context) + textMessageAppPacket(packet: packet, wantRangeTestPackets: false, connectedNode: connectedNodeNum, storeForward: true, context: context) } } } diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 04f4d4fc..ad763b23 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -217,8 +217,10 @@ func deviceMetadataPacket (metadata: DeviceMetadata, fromNum: Int64, context: NS fetchedNode[0].metadata = newMetadata } else { - let newNode = createNodeInfo(num: Int64(fromNum), context: context) - newNode.metadata = newMetadata + if fromNum > 0 { + let newNode = createNodeInfo(num: Int64(fromNum), context: context) + newNode.metadata = newMetadata + } } do { try context.save() @@ -770,9 +772,12 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage } } -func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, storeForward: Bool = false, context: NSManagedObjectContext) { +func textMessageAppPacket(packet: MeshPacket, wantRangeTestPackets: Bool, connectedNode: Int64, storeForward: Bool = false, context: NSManagedObjectContext) { var messageText = String(bytes: packet.decoded.payload, encoding: .utf8) + if !wantRangeTestPackets && ((messageText?.starts(with: "seq ")) != nil) { + return + } var storeForwardBroadcast = false if storeForward { if let storeAndForwardMessage = try? StoreAndForward(serializedData: packet.decoded.payload) { diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index 9b0786ad..5e711b32 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -6,6 +6,31 @@ import CoreData +public func clearPax(destNum: Int64, context: NSManagedObjectContext) -> Bool { + + let fetchNodeInfoRequest: NSFetchRequest = NSFetchRequest.init(entityName: "NodeInfoEntity") + fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum)) + + do { + guard let fetchedNode = try context.fetch(fetchNodeInfoRequest) as? [NodeInfoEntity] else { + return false + } + let newPax = [PaxCounterLog]() + fetchedNode[0].pax? = NSOrderedSet(array: newPax) + do { + try context.save() + return true + + } catch { + context.rollback() + return false + } + } catch { + print("💥 Fetch NodeInfoEntity Error") + return false + } +} + public func clearPositions(destNum: Int64, context: NSManagedObjectContext) -> Bool { let fetchNodeInfoRequest: NSFetchRequest = NSFetchRequest.init(entityName: "NodeInfoEntity") diff --git a/Meshtastic/Views/Nodes/PaxCounterLog.swift b/Meshtastic/Views/Nodes/PaxCounterLog.swift index 45c4bbed..3b04d662 100644 --- a/Meshtastic/Views/Nodes/PaxCounterLog.swift +++ b/Meshtastic/Views/Nodes/PaxCounterLog.swift @@ -75,8 +75,8 @@ struct PaxCounterLog: View { .chartXAxis(.automatic) .chartYScale(domain: 0...maxValue) .chartForegroundStyleScale([ - "BLE": .blue, - "WiFi": .orange, + "paxcounter.ble": .blue, + "paxcounter.wifi": .orange, "paxcounter.total".localized: .green ]) .chartLegend(position: .automatic, alignment: .bottom) @@ -174,7 +174,7 @@ struct PaxCounterLog: View { titleVisibility: .visible ) { Button("paxcounter.delete", role: .destructive) { - if clearTelemetry(destNum: node.num, metricsType: 0, context: context) { + if clearPax(destNum: node.num, context: context) { print("Cleared Pax Counter for \(node.num)") } else { print("Clear Pax Counter Log Failed") diff --git a/Meshtastic/Views/Settings/Channels.swift b/Meshtastic/Views/Settings/Channels.swift index 48c1b7ee..ea91d13b 100644 --- a/Meshtastic/Views/Settings/Channels.swift +++ b/Meshtastic/Views/Settings/Channels.swift @@ -401,6 +401,10 @@ struct Channels: View { guard let channelEntity = node!.myInfo!.channels?[Int(channelIndex)] as? ChannelEntity else { return } + let objects = channelEntity.allPrivateMessages + for object in objects { + context.delete(object) + } context.delete(channelEntity) do { try context.save() diff --git a/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift b/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift index 62b12c34..e9b1c985 100644 --- a/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/StoreForwardConfig.swift @@ -31,7 +31,7 @@ struct StoreForwardConfig: View { var body: some View { VStack { Form { - ConfigHeader(title: "Store and forward", config: \.storeForwardConfig, node: node, onAppear: setStoreAndForwardValues) + ConfigHeader(title: "storeforward", config: \.storeForwardConfig, node: node, onAppear: setStoreAndForwardValues) Section(header: Text("options")) { diff --git a/de.lproj/Localizable.strings b/de.lproj/Localizable.strings index 5012149c..c9ca6fed 100644 --- a/de.lproj/Localizable.strings +++ b/de.lproj/Localizable.strings @@ -177,6 +177,7 @@ "mesh.log.myinfo %@"="MyInfo received: %@"; "mesh.log.network.config %@"="Netzwerk onfiguration empfangen: %@"; "mesh.log.nodeinfo.received %@"="Node info empfangen für: %@"; +"mesh.log.paxcounter %@"="PAX Counter message received for: %@"; "mesh.log.position.config %@"="Positions Konfiguration empfangen: %@"; "mesh.log.position.received %@"="Positionspaket empfangen von Node: %@"; "mesh.log.rangetest.config %@"="Range Test Modul konfiguration empfangen: %@"; diff --git a/en.lproj/Localizable.strings b/en.lproj/Localizable.strings index 0953097a..65eb915e 100644 --- a/en.lproj/Localizable.strings +++ b/en.lproj/Localizable.strings @@ -206,6 +206,7 @@ "mesh.log.myinfo %@"="MyInfo received: %@"; "mesh.log.network.config %@"="Network config received: %@"; "mesh.log.nodeinfo.received %@"="Node info received for: %@"; +"mesh.log.paxcounter %@"="PAX Counter message received from: %@"; "mesh.log.position.config %@"="Positon config received: %@"; "mesh.log.position.received %@"="Position Packet received from node: %@"; "mesh.log.power.config %@"="Power config received: %@"; diff --git a/he.lproj/Localizable.strings b/he.lproj/Localizable.strings index 2513a540..d2698e18 100644 --- a/he.lproj/Localizable.strings +++ b/he.lproj/Localizable.strings @@ -184,6 +184,7 @@ "mesh.log.myinfo %@"="MyInfo התקבל: %@"; "mesh.log.network.config %@"="הגדרות רשת התקבלו: %@"; "mesh.log.nodeinfo.received %@"="מידע אודות מכשיר התקבל: %@"; +"mesh.log.paxcounter %@"="PAX Counter packet received for: %@"; "mesh.log.position.config %@"="הגדרות מיקום התקבלו: %@"; "mesh.log.position.received %@"="הודעת מיקום התקבלו מ-%@"; "mesh.log.rangetest.config %@"="הגדרות מודולת בדיקת טווח התקבלו: %@"; diff --git a/pl.lproj/Localizable.strings b/pl.lproj/Localizable.strings index 68e586c9..c823eaf6 100644 --- a/pl.lproj/Localizable.strings +++ b/pl.lproj/Localizable.strings @@ -179,6 +179,7 @@ "mesh.log.myinfo %@"="Otrzymano Moje Informacje: %@"; "mesh.log.network.config %@"="Odebrano konfigurację sieci: %@"; "mesh.log.nodeinfo.received %@"="Odebrano informacje o węźle dla: %@"; +"mesh.log.paxcounter %@"="PAX Counter packet received for: %@"; "mesh.log.position.config %@"="Odebrano konfigurację pozycji: %@"; "mesh.log.position.received %@"="Odebrano pakiet pozycji od węzła: %@"; "mesh.log.rangetest.config %@"="Odebrano konfigurację modułu testu zasięgu: %@"; diff --git a/zh-Hans.lproj/Localizable.strings b/zh-Hans.lproj/Localizable.strings index 962c4785..0932962e 100644 --- a/zh-Hans.lproj/Localizable.strings +++ b/zh-Hans.lproj/Localizable.strings @@ -177,6 +177,7 @@ "mesh.log.myinfo %@"="MyInfo received: %@"; "mesh.log.network.config %@"="Network config received: %@"; "mesh.log.nodeinfo.received %@"="Node info received for: %@"; +"mesh.log.paxcounter %@"="PAX Counter message received for: %@"; "mesh.log.position.config %@"="Positon config received: %@"; "mesh.log.position.received %@"="Position Packet received from node: %@"; "mesh.log.rangetest.config %@"="Range Test module config received: %@";