From d794992854865c690f52d1e5812f9e696732ce5a Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Mon, 11 Jul 2022 15:43:25 -0700 Subject: [PATCH] Bump version on connect page --- Meshtastic/Helpers/BLEManager.swift | 250 +++------------------ Meshtastic/Views/Bluetooth/Connect.swift | 2 +- Meshtastic/Views/Settings/UserConfig.swift | 14 +- 3 files changed, 45 insertions(+), 221 deletions(-) diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index dc23c7c0..13fe4124 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -966,9 +966,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph return false } - public func saveUser(config: User, fromUser: UserEntity?, toUser: UserEntity?, wantResponse: Bool) -> Int64 { - - var newMessageId: Int64 = 0 + public func saveUser(config: User, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { var adminPacket = AdminMessage() adminPacket.setOwner = config @@ -986,49 +984,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph dataMessage.portnum = PortNum.adminApp meshPacket.decoded = dataMessage - - var toRadio: ToRadio! - toRadio = ToRadio() - toRadio.packet = meshPacket - - let binaryData: Data = try! toRadio.serializedData() - if connectedPeripheral!.peripheral.state == CBPeripheralState.connected { - - let newMessage = MessageEntity(context: context!) - newMessage.messageId = Int64(meshPacket.id) - newMessageId = newMessage.messageId - newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970) - newMessage.receivedACK = false - newMessage.admin = true - newMessage.adminDescription = "Saved User Config for \(toUser!.longName ?? "Unknown")" - newMessage.fromUser = fromUser - newMessage.toUser = toUser - newMessage.messagePayload = try! config.jsonString() + let messageDescription = "Saved Position Config for \(toUser.longName ?? "Unknown")" + + if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) { - do { - - try context!.save() - - if meshLoggingEnabled { MeshLogger.log("💾 Saved a new User Config Admin Message for node: \(String(toUser!.num))") } - connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse) - - } catch { - - context!.rollback() - - let nsError = error as NSError - print("💥 Error Inserting New Core Data MessageEntity: \(nsError)") - } + return Int64(meshPacket.id) } - return newMessageId + return 0 } public func saveDeviceConfig(config: Config.DeviceConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { - var newMessageId: Int64 = 0 - var adminPacket = AdminMessage() adminPacket.setConfig.device = config @@ -1045,48 +1013,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph dataMessage.portnum = PortNum.adminApp meshPacket.decoded = dataMessage - - var toRadio: ToRadio! - toRadio = ToRadio() - toRadio.packet = meshPacket - - let binaryData: Data = try! toRadio.serializedData() - if connectedPeripheral!.peripheral.state == CBPeripheralState.connected { - - let newMessage = MessageEntity(context: context!) - newMessage.messageId = Int64(meshPacket.id) - newMessageId = newMessage.messageId - newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970) - newMessage.receivedACK = false - newMessage.admin = true - newMessage.adminDescription = "Saved Device Config for \(toUser.longName ?? "Unknown")" - newMessage.fromUser = fromUser - newMessage.toUser = toUser - newMessage.messagePayload = try! config.jsonString() + let messageDescription = "Saved Device Config for \(toUser.longName ?? "Unknown")" + + if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) { - do { - - try context!.save() - - if meshLoggingEnabled { MeshLogger.log("💾 Saved Device Config Admin Message for node: \(String(toUser.num))") } - connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse) - - } catch { - - context!.rollback() - - let nsError = error as NSError - print("💥 Error Inserting New Core Data MessageEntity: \(nsError)") - } + return Int64(meshPacket.id) } - return newMessageId + + return 0 } public func saveDisplayConfig(config: Config.DisplayConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { - var newMessageId: Int64 = 0 - var adminPacket = AdminMessage() adminPacket.setConfig.display = config @@ -1103,48 +1042,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph dataMessage.portnum = PortNum.adminApp meshPacket.decoded = dataMessage - - var toRadio: ToRadio! - toRadio = ToRadio() - toRadio.packet = meshPacket - - let binaryData: Data = try! toRadio.serializedData() - if connectedPeripheral!.peripheral.state == CBPeripheralState.connected { - - let newMessage = MessageEntity(context: context!) - newMessage.messageId = Int64(meshPacket.id) - newMessageId = newMessage.messageId - newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970) - newMessage.receivedACK = false - newMessage.admin = true - newMessage.adminDescription = "Saved Display Config for \(toUser.longName ?? "Unknown")" - newMessage.fromUser = fromUser - newMessage.toUser = toUser - newMessage.messagePayload = try! config.jsonString() + let messageDescription = "Saved Display Config for \(toUser.longName ?? "Unknown")" + + if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) { - do { - - try context!.save() - - if meshLoggingEnabled { MeshLogger.log("💾 Saved Display Config Admin Message for node: \(String(toUser.num))") } - connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse) - - } catch { - - context!.rollback() - - let nsError = error as NSError - print("💥 Error Inserting New Core Data MessageEntity: \(nsError)") - } + return Int64(meshPacket.id) } - return newMessageId + + return 0 } public func saveLoRaConfig(config: Config.LoRaConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { - - var newMessageId: Int64 = 0 - + var adminPacket = AdminMessage() adminPacket.setConfig.lora = config @@ -1162,48 +1072,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph dataMessage.portnum = PortNum.adminApp meshPacket.decoded = dataMessage - - var toRadio: ToRadio! - toRadio = ToRadio() - toRadio.packet = meshPacket - - let binaryData: Data = try! toRadio.serializedData() - if connectedPeripheral!.peripheral.state == CBPeripheralState.connected { - - let newMessage = MessageEntity(context: context!) - newMessage.messageId = Int64(meshPacket.id) - newMessageId = newMessage.messageId - newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970) - newMessage.receivedACK = false - newMessage.admin = true - newMessage.adminDescription = "Saved LoRa Config for \(toUser.longName ?? "Unknown")" - newMessage.fromUser = fromUser - newMessage.toUser = toUser - newMessage.messagePayload = try! config.jsonString() + let messageDescription = "Saved LoRa Config for \(toUser.longName ?? "Unknown")" + + if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) { - do { - - try context!.save() - - if meshLoggingEnabled { MeshLogger.log("💾 Saved LoRa Config Admin Message for node: \(String(toUser.num))") } - connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse) - - } catch { - - context!.rollback() - - let nsError = error as NSError - print("💥 Error Inserting New Core Data MessageEntity: \(nsError)") - } + return Int64(meshPacket.id) } - return newMessageId + + return 0 } public func savePositionConfig(config: Config.PositionConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { - var newMessageId: Int64 = 0 - var adminPacket = AdminMessage() adminPacket.setConfig.position = config @@ -1220,49 +1101,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph dataMessage.portnum = PortNum.adminApp meshPacket.decoded = dataMessage - - var toRadio: ToRadio! - toRadio = ToRadio() - toRadio.packet = meshPacket - - let binaryData: Data = try! toRadio.serializedData() - if connectedPeripheral!.peripheral.state == CBPeripheralState.connected { - - let newMessage = MessageEntity(context: context!) - newMessage.messageId = Int64(meshPacket.id) - newMessageId = newMessage.messageId - newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970) - newMessage.receivedACK = false - newMessage.admin = true - newMessage.adminDescription = "Saved Position Config for \(toUser.longName ?? "Unknown")" - newMessage.fromUser = fromUser - newMessage.toUser = toUser - newMessage.messagePayload = try! config.jsonString() + let messageDescription = "Saved Position Config for \(toUser.longName ?? "Unknown")" + + if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) { - do { - - try context!.save() - - if meshLoggingEnabled { MeshLogger.log("💾 Saved Position Config Admin Message for node: \(String(toUser.num))") } - connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse) - - } catch { - - context!.rollback() - - let nsError = error as NSError - print("💥 Error Inserting New Core Data MessageEntity: \(nsError)") - } + return Int64(meshPacket.id) } - return newMessageId + return 0 } public func saveCannedMessageModuleConfig(config: ModuleConfig.CannedMessageConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { - - var newMessageId: Int64 = 0 - + var adminPacket = AdminMessage() adminPacket.setModuleConfig.cannedMessage = config @@ -1278,42 +1129,15 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph dataMessage.portnum = PortNum.adminApp meshPacket.decoded = dataMessage - - var toRadio: ToRadio! - toRadio = ToRadio() - toRadio.packet = meshPacket - - let binaryData: Data = try! toRadio.serializedData() - if connectedPeripheral!.peripheral.state == CBPeripheralState.connected { - - let newMessage = MessageEntity(context: context!) - newMessage.messageId = Int64(meshPacket.id) - newMessageId = newMessage.messageId - newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970) - newMessage.receivedACK = false - newMessage.admin = true - newMessage.adminDescription = "Saved Canned Message Module Config for \(toUser.longName ?? "Unknown")" - newMessage.fromUser = fromUser - newMessage.toUser = toUser - newMessage.messagePayload = try! config.jsonString() + let messageDescription = "Saved Canned Message Module Config for \(toUser.longName ?? "Unknown")" + + if sendAdminMessageToRadio(meshPacket: meshPacket, adminDescription: messageDescription, fromUser: fromUser, toUser: toUser) { - do { - - try context!.save() - - if meshLoggingEnabled { MeshLogger.log("💾 Saved Canned Message Module Config Admin Message for node: \(String(toUser.num))") } - connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse) - - } catch { - - context!.rollback() - - let nsError = error as NSError - print("💥 Error Inserting New Core Data MessageEntity: \(nsError)") - } + return Int64(meshPacket.id) } - return newMessageId + + return 0 } public func saveCannedMessageModuleMessages(messages: String, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { diff --git a/Meshtastic/Views/Bluetooth/Connect.swift b/Meshtastic/Views/Bluetooth/Connect.swift index a3e89b8b..2160b4d2 100644 --- a/Meshtastic/Views/Bluetooth/Connect.swift +++ b/Meshtastic/Views/Bluetooth/Connect.swift @@ -22,7 +22,7 @@ struct Connect: View { var body: some View { let firmwareVersion = bleManager.lastConnnectionVersion - let minimumVersion = "1.3.22" + let minimumVersion = "1.3.25" let supportedVersion = firmwareVersion == "0.0.0" || minimumVersion.compare(firmwareVersion, options: .numeric) == .orderedAscending || minimumVersion.compare(firmwareVersion, options: .numeric) == .orderedSame NavigationView { diff --git a/Meshtastic/Views/Settings/UserConfig.swift b/Meshtastic/Views/Settings/UserConfig.swift index 21742f45..eedb3504 100644 --- a/Meshtastic/Views/Settings/UserConfig.swift +++ b/Meshtastic/Views/Settings/UserConfig.swift @@ -112,7 +112,7 @@ struct UserConfig: View { u.shortName = shortName u.longName = longName - let adminMessageId = bleManager.saveUser(config: u, fromUser: node?.user, toUser: node?.user, wantResponse: true) + let adminMessageId = bleManager.saveUser(config: u, fromUser: node!.user!, toUser: node!.user!, wantResponse: true) if adminMessageId > 0 { @@ -145,16 +145,16 @@ struct UserConfig: View { } .onChange(of: shortName) { newShort in - if newShort != node?.user!.shortName { - - hasChanges = true + if node != nil && node!.user != nil { + + if newShort != node?.user!.shortName { hasChanges = true } } } .onChange(of: longName) { newLong in - if newLong != node?.user!.longName { - - hasChanges = true + if node != nil && node!.user != nil { + + if newLong != node?.user!.longName { hasChanges = true } } } .navigationViewStyle(StackNavigationViewStyle())