From 8de9c6251986f935195e7aa80df5cef1599d31e1 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Tue, 16 Nov 2021 10:14:20 -0800 Subject: [PATCH] Update mesh log and fix messages bug --- Meshtastic Client.xcodeproj/project.pbxproj | 12 ++-- MeshtasticClient/Helpers/BLEManager.swift | 60 +++++++++---------- .../{Logger.swift => MeshLogger.swift} | 2 +- .../Model/Data/PersistanceController.swift | 36 ----------- MeshtasticClient/Model/PeripheralModel.swift | 31 +++++----- .../Views/Bluetooth/Connect.swift | 2 +- .../Views/Messages/Messages.swift | 3 +- MeshtasticClient/Views/Settings/MeshLog.swift | 2 +- 8 files changed, 55 insertions(+), 93 deletions(-) rename MeshtasticClient/Helpers/{Logger.swift => MeshLogger.swift} (97%) delete mode 100644 MeshtasticClient/Model/Data/PersistanceController.swift diff --git a/Meshtastic Client.xcodeproj/project.pbxproj b/Meshtastic Client.xcodeproj/project.pbxproj index 9a87974c..fc468019 100644 --- a/Meshtastic Client.xcodeproj/project.pbxproj +++ b/Meshtastic Client.xcodeproj/project.pbxproj @@ -20,7 +20,7 @@ DD47E3DF26F39D9F00029299 /* MyInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD47E3DE26F39D9F00029299 /* MyInfoModel.swift */; }; DD4A911E2708C65400501B7E /* AppSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4A911D2708C65400501B7E /* AppSettings.swift */; }; DD4A91202708C66600501B7E /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4A911F2708C66600501B7E /* Configuration.swift */; }; - DD8169F9271F1A6100F4AB02 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8169F8271F1A6100F4AB02 /* Logger.swift */; }; + DD8169F9271F1A6100F4AB02 /* MeshLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8169F8271F1A6100F4AB02 /* MeshLogger.swift */; }; DD8169FB271F1F3A00F4AB02 /* MeshLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8169FA271F1F3A00F4AB02 /* MeshLog.swift */; }; DD8169FF272476C700F4AB02 /* LogDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD8169FE272476C700F4AB02 /* LogDocument.swift */; }; DD836AE726F6B38600ABCC23 /* Connect.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD836AE626F6B38600ABCC23 /* Connect.swift */; }; @@ -41,7 +41,6 @@ DDAF8C6926ED0D070058C060 /* deviceonly.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAF8C6826ED0D070058C060 /* deviceonly.pb.swift */; }; DDAF8C6B26ED0DD80058C060 /* environmental_measurement.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAF8C6A26ED0DD80058C060 /* environmental_measurement.pb.swift */; }; DDAF8C6E26ED19040058C060 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAF8C6D26ED19040058C060 /* Extensions.swift */; }; - DDB020A0272B0C6B00F8DBAE /* PersistanceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDB0209F272B0C6B00F8DBAE /* PersistanceController.swift */; }; DDC2E15826CE248E0042C5E4 /* MeshtasticClientApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC2E15726CE248E0042C5E4 /* MeshtasticClientApp.swift */; }; DDC2E15C26CE248F0042C5E4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDC2E15B26CE248F0042C5E4 /* Assets.xcassets */; }; DDC2E15F26CE248F0042C5E4 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DDC2E15E26CE248F0042C5E4 /* Preview Assets.xcassets */; }; @@ -84,7 +83,7 @@ DD47E3DE26F39D9F00029299 /* MyInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyInfoModel.swift; sourceTree = ""; }; DD4A911D2708C65400501B7E /* AppSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppSettings.swift; sourceTree = ""; }; DD4A911F2708C66600501B7E /* Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = ""; }; - DD8169F8271F1A6100F4AB02 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; + DD8169F8271F1A6100F4AB02 /* MeshLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshLogger.swift; sourceTree = ""; }; DD8169FA271F1F3A00F4AB02 /* MeshLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshLog.swift; sourceTree = ""; }; DD8169FE272476C700F4AB02 /* LogDocument.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogDocument.swift; sourceTree = ""; }; DD836AE626F6B38600ABCC23 /* Connect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Connect.swift; sourceTree = ""; }; @@ -105,7 +104,6 @@ DDAF8C6826ED0D070058C060 /* deviceonly.pb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = deviceonly.pb.swift; sourceTree = ""; }; DDAF8C6A26ED0DD80058C060 /* environmental_measurement.pb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = environmental_measurement.pb.swift; sourceTree = ""; }; DDAF8C6D26ED19040058C060 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; - DDB0209F272B0C6B00F8DBAE /* PersistanceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersistanceController.swift; sourceTree = ""; }; DDC2E15426CE248E0042C5E4 /* MeshtasticClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeshtasticClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; DDC2E15726CE248E0042C5E4 /* MeshtasticClientApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshtasticClientApp.swift; sourceTree = ""; }; DDC2E15B26CE248F0042C5E4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = ../Assets.xcassets; sourceTree = ""; }; @@ -205,7 +203,6 @@ DDB0209E272B0C5700F8DBAE /* Data */ = { isa = PBXGroup; children = ( - DDB0209F272B0C6B00F8DBAE /* PersistanceController.swift */, ); path = Data; sourceTree = ""; @@ -337,7 +334,7 @@ DDAF8C6D26ED19040058C060 /* Extensions.swift */, DD47E3D126F1210600029299 /* HelperFunctions.swift */, DD913638270DFF4C00D7ACF3 /* LocalNotificationManager.swift */, - DD8169F8271F1A6100F4AB02 /* Logger.swift */, + DD8169F8271F1A6100F4AB02 /* MeshLogger.swift */, ); path = Helpers; sourceTree = ""; @@ -482,7 +479,6 @@ DD47E3CC26F0E51D00029299 /* NodeDetail.swift in Sources */, DD836AEF26F85D8D00ABCC23 /* NodeInfoModel.swift in Sources */, DDC2E1A726CEB3400042C5E4 /* LocationHelper.swift in Sources */, - DDB020A0272B0C6B00F8DBAE /* PersistanceController.swift in Sources */, DD47E3D226F1210600029299 /* HelperFunctions.swift in Sources */, DDAF8C5F26ED09B50058C060 /* radioconfig.pb.swift in Sources */, DD913639270DFF4C00D7ACF3 /* LocalNotificationManager.swift in Sources */, @@ -511,7 +507,7 @@ DDAF8C5826ED07FD0058C060 /* mesh.pb.swift in Sources */, DD8169FB271F1F3A00F4AB02 /* MeshLog.swift in Sources */, DD47E3D926F3093800029299 /* MessageBubble.swift in Sources */, - DD8169F9271F1A6100F4AB02 /* Logger.swift in Sources */, + DD8169F9271F1A6100F4AB02 /* MeshLogger.swift in Sources */, DDAF8C6726ED0C8C0058C060 /* remote_hardware.pb.swift in Sources */, DDAF8C6526ED0A490058C060 /* channel.pb.swift in Sources */, DD47E3DD26F390A000029299 /* Messages.swift in Sources */, diff --git a/MeshtasticClient/Helpers/BLEManager.swift b/MeshtasticClient/Helpers/BLEManager.swift index f89ee48f..f1794975 100644 --- a/MeshtasticClient/Helpers/BLEManager.swift +++ b/MeshtasticClient/Helpers/BLEManager.swift @@ -125,7 +125,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph self.lastConnectionError = "BLE Connecting Timeout after making \(timeoutTimerCount) attempts to connect to \(name)." print("BLE Connecting Timeout after making \(timeoutTimerCount) attempts to connect to \(name).") - if meshLoggingEnabled { Logger.log("BLE Connecting Timeout after making \(timeoutTimerCount) attempts to connect to \(String(name)).") } + if meshLoggingEnabled { MeshLogger.log("BLE Connecting Timeout after making \(timeoutTimerCount) attempts to connect to \(String(name)).") } self.timeoutTimerCount = 0 self.timeoutTimer?.invalidate() @@ -133,14 +133,14 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph } else { print("BLE Connecting 2 Second Timeout Timer Fired \(timeoutTimerCount) Time(s): \(name)") - if meshLoggingEnabled { Logger.log("BLE Connecting 2 Second Timeout Timer Fired \(timeoutTimerCount) Time(s): \(name)") } + if meshLoggingEnabled { MeshLogger.log("BLE Connecting 2 Second Timeout Timer Fired \(timeoutTimerCount) Time(s): \(name)") } } } // Connect to a specific peripheral func connectTo(peripheral: CBPeripheral) { - if meshLoggingEnabled { Logger.log("BLE Connecting: \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE Connecting: \(peripheral.name ?? "Unknown")") } print("BLE Connecting: \(peripheral.name ?? "Unknown")") stopScanning() @@ -175,7 +175,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph peripheralName = name } - var newPeripheral = Peripheral(id: peripheral.identifier.uuidString, name: peripheralName, rssi: RSSI.intValue, peripheral: peripheral, myInfo: nil) + var newPeripheral = Peripheral(id: peripheral.identifier.uuidString, name: peripheralName, rssi: RSSI.intValue, subscribed: false, peripheral: peripheral, myInfo: nil) let peripheralIndex = peripherals.firstIndex(where: { $0.id == newPeripheral.id }) if peripheralIndex != nil { @@ -211,7 +211,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph // Discover Services peripheral.discoverServices([meshtasticServiceCBUUID]) - if meshLoggingEnabled { Logger.log("BLE Connected: \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE Connected: \(peripheral.name ?? "Unknown")") } print("BLE Connected: \(peripheral.name ?? "Unknown")") } @@ -236,7 +236,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph // We will try and re-connect to this device lastConnectionError = "\(e.localizedDescription) The app will automatically reconnect to the preferred radio if it reappears within 10 seconds." if peripheral.identifier.uuidString == UserDefaults.standard.object(forKey: "preferredPeripheralId") as? String ?? "" { - if meshLoggingEnabled { Logger.log("BLE Reconnecting: \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE Reconnecting: \(peripheral.name ?? "Unknown")") } print("BLE Reconnecting: \(peripheral.name ?? "Unknown")") self.connectTo(peripheral: peripheral) } @@ -247,28 +247,28 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph lastConnectionError = e.localizedDescription self.connectedNode = nil print("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(e.localizedDescription)") - if meshLoggingEnabled { Logger.log("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(e.localizedDescription)") } + if meshLoggingEnabled { MeshLogger.log("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(e.localizedDescription)") } } else if errorCode == 14 { // Peer removed pairing information // Forgetting and reconnecting seems to be necessary so we need to show the user an error telling them to do that lastConnectionError = "\(e.localizedDescription) This error usually cannot be fixed without forgetting the device unders Settings > Bluetooth and re-connecting to the radio." self.connectedNode = nil - if meshLoggingEnabled { Logger.log("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(lastConnectionError)") } + if meshLoggingEnabled { MeshLogger.log("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(lastConnectionError)") } } else { lastConnectionError = e.localizedDescription self.connectedNode = nil print("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(e.localizedDescription)") - if meshLoggingEnabled { Logger.log("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(e.localizedDescription)") } + if meshLoggingEnabled { MeshLogger.log("BLE Disconnected: \(peripheral.name ?? "Unknown") Error Code: \(errorCode) Error: \(e.localizedDescription)") } } } else { // Disconnected without error which indicates user intent to disconnect // Happens when swiping to disconnect self.connectedNode = nil - if meshLoggingEnabled { Logger.log("BLE Disconnected: \(peripheral.name ?? "Unknown"): User Initiated Disconnect") } + if meshLoggingEnabled { MeshLogger.log("BLE Disconnected: \(peripheral.name ?? "Unknown"): User Initiated Disconnect") } print("BLE Disconnected: \(peripheral.name ?? "Unknown"): User Initiated Disconnect") } } @@ -290,7 +290,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph if (service.uuid == meshtasticServiceCBUUID) { print("Meshtastic service discovered OK") - if meshLoggingEnabled { Logger.log("BLE Service for Meshtastic discovered by \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE Service for Meshtastic discovered by \(peripheral.name ?? "Unknown")") } //peripheral.discoverCharacteristics(nil, for: service) peripheral.discoverCharacteristics([TORADIO_UUID, FROMRADIO_UUID, FROMNUM_UUID], for: service) } @@ -304,7 +304,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph if let e = error { print("Discover Characteristics error \(e)") - if meshLoggingEnabled { Logger.log("BLE didDiscoverCharacteristicsFor error by \(peripheral.name ?? "Unknown") \(e)") } + if meshLoggingEnabled { MeshLogger.log("BLE didDiscoverCharacteristicsFor error by \(peripheral.name ?? "Unknown") \(e)") } } guard let characteristics = service.characteristics else { return } @@ -315,7 +315,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph { case TORADIO_UUID: print("TORADIO characteristic OK") - if meshLoggingEnabled { Logger.log("BLE did discover TORADIO characteristic for Meshtastic by \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE did discover TORADIO characteristic for Meshtastic by \(peripheral.name ?? "Unknown")") } TORADIO_characteristic = characteristic var toRadio: ToRadio = ToRadio() toRadio.wantConfigID = 32168 @@ -325,14 +325,14 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph case FROMRADIO_UUID: print("FROMRADIO characteristic OK") - if meshLoggingEnabled { Logger.log("BLE did discover FROMRADIO characteristic for Meshtastic by \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE did discover FROMRADIO characteristic for Meshtastic by \(peripheral.name ?? "Unknown")") } FROMRADIO_characteristic = characteristic peripheral.readValue(for: FROMRADIO_characteristic) break case FROMNUM_UUID: print("FROMNUM (Notify) characteristic OK") - if meshLoggingEnabled { Logger.log("BLE did discover FROMNUM (Notify) characteristic for Meshtastic by \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE did discover FROMNUM (Notify) characteristic for Meshtastic by \(peripheral.name ?? "Unknown")") } FROMNUM_characteristic = characteristic peripheral.setNotifyValue(true, for: characteristic) break @@ -348,7 +348,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph peripheral.delegate = self print("didUpdateNotificationStateFor char: \(characteristic.uuid.uuidString) \(characteristic.isNotifying)") - if meshLoggingEnabled { Logger.log("didUpdateNotificationStateFor char: \(characteristic.uuid.uuidString) \(characteristic.isNotifying)") } + if meshLoggingEnabled { MeshLogger.log("didUpdateNotificationStateFor char: \(characteristic.uuid.uuidString) \(characteristic.isNotifying)") } if let errorText = error?.localizedDescription { print("didUpdateNotificationStateFor error: \(errorText)") @@ -381,7 +381,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph if let e = error { print("didUpdateValueFor Characteristic error \(e)") - if meshLoggingEnabled { Logger.log("BLE didUpdateValueFor characteristic error by \(peripheral.name ?? "Unknown") \(e)") } + if meshLoggingEnabled { MeshLogger.log("BLE didUpdateValueFor characteristic error by \(peripheral.name ?? "Unknown") \(e)") } } switch characteristic.uuid @@ -439,7 +439,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph meshData.save() } print("Saved a myInfo for \(decodedInfo.myInfo.myNodeNum)") - if meshLoggingEnabled { Logger.log("BLE FROMRADIO received and myInfo saved for \(peripheral.name ?? "Unknown")") } + if meshLoggingEnabled { MeshLogger.log("BLE FROMRADIO received and myInfo saved for \(peripheral.name ?? "Unknown")") } } } @@ -500,7 +500,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph snr: decodedInfo.nodeInfo.snr) ) meshData.save() - if meshLoggingEnabled { Logger.log("BLE FROMRADIO received and nodeInfo saved for \(decodedInfo.nodeInfo.user.longName)") } + if meshLoggingEnabled { MeshLogger.log("BLE FROMRADIO received and nodeInfo saved for \(decodedInfo.nodeInfo.user.longName)") } if connectedNode == nil { //connectedNode = meshData.nodes.first(where: {$0.num == connectedPeripheral.myInfo!.myNodeNum}) @@ -518,7 +518,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph if let messageText = String(bytes: decodedInfo.packet.decoded.payload, encoding: .utf8) { print("Message Text: \(messageText)") - if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for text message app \(messageText)") } + if meshLoggingEnabled { MeshLogger.log("BLE FROMRADIO received for text message app \(messageText)") } let fromUser = meshData.nodes.first(where: { $0.id == decodedInfo.packet.from }) @@ -560,14 +560,14 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph content: messageText) ] manager.schedule() - if meshLoggingEnabled { Logger.log("iOS Notification Scheduled for text message from \(fromUser?.user.longName ?? "Unknown") \(messageText)") } + if meshLoggingEnabled { MeshLogger.log("iOS Notification Scheduled for text message from \(fromUser?.user.longName ?? "Unknown") \(messageText)") } } } else if decodedInfo.packet.decoded.portnum == PortNum.nodeinfoApp { var updatedNode = meshData.nodes.first(where: {$0.id == decodedInfo.packet.from }) if updatedNode != nil { - if meshLoggingEnabled { Logger.log("BLE FROMRADIO received for node info app for \(updatedNode!.user.longName)") } + if meshLoggingEnabled { MeshLogger.log("BLE FROMRADIO received for node info app for \(updatedNode!.user.longName)") } } if updatedNode != nil { @@ -578,7 +578,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph meshData.nodes.remove(at: nodeIndex!) meshData.nodes.append(updatedNode!) meshData.save() - if meshLoggingEnabled { Logger.log("MESH PACKET Updated NodeInfo SNR and Time from Node Info App Packet For: \(updatedNode!.user.longName)") } + if meshLoggingEnabled { MeshLogger.log("MESH PACKET Updated NodeInfo SNR and Time from Node Info App Packet For: \(updatedNode!.user.longName)") } print("Updated NodeInfo SNR and Time from Packet For: \(updatedNode!.user.longName)") } } @@ -595,7 +595,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph meshData.nodes.append(updatedNode!) meshData.save() - if meshLoggingEnabled { Logger.log("MESH PACKET Updated NodeInfo SNR and Time from Position App Packet For: \(updatedNode!.user.longName)") } + if meshLoggingEnabled { MeshLogger.log("MESH PACKET Updated NodeInfo SNR and Time from Position App Packet For: \(updatedNode!.user.longName)") } print("Updated Position SNR and Time from Packet For: \(updatedNode!.user.longName)") } print("Postion Payload") @@ -603,38 +603,38 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph } else if decodedInfo.packet.decoded.portnum == PortNum.adminApp { - if meshLoggingEnabled { Logger.log("MESH PACKET received for Admin App UNHANDLED \(try decodedInfo.packet.jsonString())") } + if meshLoggingEnabled { MeshLogger.log("MESH PACKET received for Admin App UNHANDLED \(try decodedInfo.packet.jsonString())") } print("Admin App Packet") print(try decodedInfo.packet.jsonString()) } else if decodedInfo.packet.decoded.portnum == PortNum.routingApp { - if meshLoggingEnabled { Logger.log("MESH PACKET received for Routing App UNHANDLED \(try decodedInfo.packet.jsonString())") } + if meshLoggingEnabled { MeshLogger.log("MESH PACKET received for Routing App UNHANDLED \(try decodedInfo.packet.jsonString())") } print("Routing App Packet") print(try decodedInfo.packet.jsonString()) } else { - if meshLoggingEnabled { Logger.log("MESH PACKET received for Other App UNHANDLED \(try decodedInfo.packet.jsonString())") } + if meshLoggingEnabled { MeshLogger.log("MESH PACKET received for Other App UNHANDLED \(try decodedInfo.packet.jsonString())") } print("Other App Packet") print(try decodedInfo.packet.jsonString()) } } catch { - if meshLoggingEnabled { Logger.log("Fatal Error: Failed to decode json") } + if meshLoggingEnabled { MeshLogger.log("Fatal Error: Failed to decode json") } fatalError("Failed to decode json") } } if decodedInfo.configCompleteID != 0 { - if meshLoggingEnabled { Logger.log("BLE Config Complete Packet Id: \(decodedInfo.configCompleteID)") } + if meshLoggingEnabled { MeshLogger.log("BLE Config Complete Packet Id: \(decodedInfo.configCompleteID)") } print("BLE Config Complete Packet Id: \(decodedInfo.configCompleteID)") } default: - if meshLoggingEnabled { Logger.log("Unhandled Characteristic UUID: \(characteristic.uuid)") } + if meshLoggingEnabled { MeshLogger.log("Unhandled Characteristic UUID: \(characteristic.uuid)") } print("Unhandled Characteristic UUID: \(characteristic.uuid)") } peripheral.readValue(for: FROMRADIO_characteristic) diff --git a/MeshtasticClient/Helpers/Logger.swift b/MeshtasticClient/Helpers/MeshLogger.swift similarity index 97% rename from MeshtasticClient/Helpers/Logger.swift rename to MeshtasticClient/Helpers/MeshLogger.swift index dabee233..2dc383d6 100644 --- a/MeshtasticClient/Helpers/Logger.swift +++ b/MeshtasticClient/Helpers/MeshLogger.swift @@ -1,6 +1,6 @@ import Foundation -class Logger { +class MeshLogger { static var logFile: URL? { guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return nil } diff --git a/MeshtasticClient/Model/Data/PersistanceController.swift b/MeshtasticClient/Model/Data/PersistanceController.swift deleted file mode 100644 index 91dfbe15..00000000 --- a/MeshtasticClient/Model/Data/PersistanceController.swift +++ /dev/null @@ -1,36 +0,0 @@ -import CoreData - -struct PersistenceController { - - static let shared = PersistenceController() - - let container: NSPersistentContainer - - init() { - container = NSPersistentContainer(name: "Mesh") - container.loadPersistentStores { (description, error ) in - if let error = error { - fatalError("Error: \(error.localizedDescription)") - } - } - } - - func save(completion: @escaping (Error?) -> () = {_ in}) { - let context = container.viewContext - if context.hasChanges { - do { - try context.save() - completion(nil) - } catch { - completion(error) - } - } - } - - func delete(_ object: NSManagedObject, completion: @escaping (Error?) -> () = { _ - in }) { - let context = container.viewContext - context.delete(object) - save(completion: completion) - } -} diff --git a/MeshtasticClient/Model/PeripheralModel.swift b/MeshtasticClient/Model/PeripheralModel.swift index 64a90024..e21f4bf3 100644 --- a/MeshtasticClient/Model/PeripheralModel.swift +++ b/MeshtasticClient/Model/PeripheralModel.swift @@ -2,19 +2,20 @@ import Foundation import CoreBluetooth struct Peripheral: Identifiable { - var id: String - var name: String - var rssi: Int - var peripheral: CBPeripheral - - var myInfo: MyInfoModel? - - init(id: String, name: String, rssi: Int, peripheral: CBPeripheral, myInfo: MyInfoModel?) { - self.id = id - self.name = name - self.rssi = rssi - self.peripheral = peripheral - self.myInfo = myInfo - } + var id: String + var name: String + var rssi: Int + var subscribed: Bool + var peripheral: CBPeripheral + + var myInfo: MyInfoModel? + + init(id: String, name: String, rssi: Int, subscribed: Bool, peripheral: CBPeripheral, myInfo: MyInfoModel?) { + self.id = id + self.name = name + self.rssi = rssi + self.subscribed = subscribed + self.peripheral = peripheral + self.myInfo = myInfo + } } - diff --git a/MeshtasticClient/Views/Bluetooth/Connect.swift b/MeshtasticClient/Views/Bluetooth/Connect.swift index ac9deb47..1c8c17d1 100644 --- a/MeshtasticClient/Views/Bluetooth/Connect.swift +++ b/MeshtasticClient/Views/Bluetooth/Connect.swift @@ -128,7 +128,7 @@ struct Connect: View { if bleManager.peripherals.count > 0 { Section(header: Text("Available Radios").font(.title)) { - ForEach(bleManager.peripherals.filter({ $0.peripheral.state == CBPeripheralState.disconnected }).sorted(by: { $0.rssi > $1.rssi })) { peripheral in + ForEach(bleManager.peripherals.filter({ $0.peripheral.state == CBPeripheralState.disconnected }).sorted(by: { $0.name < $1.name })) { peripheral in HStack { Image(systemName: "circle.fill") .imageScale(.large).foregroundColor(.gray) diff --git a/MeshtasticClient/Views/Messages/Messages.swift b/MeshtasticClient/Views/Messages/Messages.swift index ed9cc0e5..1a035287 100644 --- a/MeshtasticClient/Views/Messages/Messages.swift +++ b/MeshtasticClient/Views/Messages/Messages.swift @@ -106,7 +106,8 @@ struct Messages: View { .onReceive(timer) { input in if messageCount < bleManager.messageData.messages.count { - + + bleManager.messageData.load() scrollView.scrollTo(bottomId) messageCount = bleManager.messageData.messages.count } diff --git a/MeshtasticClient/Views/Settings/MeshLog.swift b/MeshtasticClient/Views/Settings/MeshLog.swift index 95ecaff9..1f4a62a2 100644 --- a/MeshtasticClient/Views/Settings/MeshLog.swift +++ b/MeshtasticClient/Views/Settings/MeshLog.swift @@ -3,7 +3,7 @@ import Foundation import UniformTypeIdentifiers struct MeshLog: View { - let logFile = Logger.logFile + let logFile = MeshLogger.logFile var text = "" @State private var logs = [String]() @State private var isExporting: Bool = false