From 0b855a08bf2f9dd5b85d9afe825cfa2c7058aa44 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 26 May 2024 12:15:50 -0700 Subject: [PATCH] Check node num length before making a new node info or user core data object --- .../CoreData/UserEntityExtension.swift | 14 ++++++ Meshtastic/Helpers/MeshPackets.swift | 24 ++------- Meshtastic/Persistence/UpdateCoreData.swift | 50 +++++-------------- 3 files changed, 31 insertions(+), 57 deletions(-) diff --git a/Meshtastic/Extensions/CoreData/UserEntityExtension.swift b/Meshtastic/Extensions/CoreData/UserEntityExtension.swift index ecf4e5e2..e4887c78 100644 --- a/Meshtastic/Extensions/CoreData/UserEntityExtension.swift +++ b/Meshtastic/Extensions/CoreData/UserEntityExtension.swift @@ -6,6 +6,7 @@ // import Foundation +import CoreData extension UserEntity { @@ -27,3 +28,16 @@ extension UserEntity { return unreadMessages.count } } + + +public func createUser(num: Int64, context: NSManagedObjectContext) -> UserEntity { + let newUser = UserEntity(context: context) + newUser.num = Int64(num) + let userId = String(format:"%2X", num) + newUser.userId = "!\(userId)" + let last4 = String(userId.suffix(4)) + newUser.longName = "Meshtastic \(last4)" + newUser.shortName = last4 + newUser.hwModel = "UNSET" + return newUser +} diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index d79bc87e..78121fb0 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -294,16 +294,8 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje newUser.isLicensed = nodeInfo.user.isLicensed newUser.role = Int32(nodeInfo.user.role.rawValue) newNode.user = newUser - } else { - let newUser = UserEntity(context: context) - newUser.num = Int64(nodeInfo.num) - newUser.numString = String(nodeInfo.num) - let userId = String(format:"%2X", nodeInfo.num) - newUser.userId = "!\(userId)" - let last4 = String(userId.suffix(4)) - newUser.longName = "Meshtastic \(last4)" - newUser.shortName = last4 - newUser.hwModel = "UNSET" + } else if nodeInfo.num > Int16.max { + let newUser = createUser(num: Int64(nodeInfo.num), context: context) newNode.user = newUser } @@ -369,15 +361,9 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje fetchedNode[0].user!.role = Int32(nodeInfo.user.role.rawValue) fetchedNode[0].user!.hwModel = String(describing: nodeInfo.user.hwModel).uppercased() } else { - if (fetchedNode[0].user == nil) { - let newUser = UserEntity(context: context) - newUser.num = Int64(nodeInfo.num) - let userId = String(format:"%2X", nodeInfo.num) - newUser.userId = "!\(userId)" - let last4 = String(userId.suffix(4)) - newUser.longName = "Meshtastic \(last4)" - newUser.shortName = last4 - newUser.hwModel = "UNSET" + if (fetchedNode[0].user == nil && nodeInfo.num > Int16.max) { + + let newUser = createUser(num: Int64(nodeInfo.num), context: context) fetchedNode[0].user = newUser } } diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index 491ba4b5..46e27062 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -164,17 +164,11 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext) if let newUserMessage = try? User(serializedData: packet.decoded.payload) { - if newUserMessage.id.isEmpty { - let newUser = UserEntity(context: context) - newUser.num = Int64(packet.from) - let userId = String(format:"%2X", packet.from) - newUser.userId = "!\(userId)" - let last4 = String(userId.suffix(4)) - newUser.longName = "Meshtastic \(last4)" - newUser.shortName = last4 - newUser.hwModel = "UNSET" - newNode.user = newUser - + if newUserMessage.id.isEmpty { + if packet.from > Int16.max { + let newUser = createUser(num: Int64(packet.from), context: context) + newNode.user = newUser + } } else { let newUser = UserEntity(context: context) @@ -203,27 +197,14 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext) } } } else { - let newUser = UserEntity(context: context) - newUser.num = Int64(packet.from) - let userId = String(format:"%2X", packet.from) - newUser.userId = "!\(userId)" - let last4 = String(userId.suffix(4)) - newUser.longName = "Meshtastic \(last4)" - newUser.shortName = last4 - newUser.hwModel = "UNSET" - newNode.user = newUser + if packet.from > Int16.max { + let newUser = createUser(num: Int64(packet.from), context: context) + fetchedNode[0].user = newUser + } } - if newNode.user == nil { - let newUser = UserEntity(context: context) - newUser.num = Int64(packet.from) - let userId = String(format:"%2X", packet.from) - newUser.userId = "!\(userId)" - let last4 = String(userId.suffix(4)) - newUser.longName = "Meshtastic \(last4)" - newUser.shortName = last4 - newUser.hwModel = "UNSET" - newNode.user = newUser + if newNode.user == nil && packet.from > Int16.max { + newNode.user = createUser(num: Int64(packet.from), context: context) } let myInfoEntity = MyInfoEntity(context: context) @@ -280,14 +261,7 @@ func upsertNodeInfoPacket (packet: MeshPacket, context: NSManagedObjectContext) fetchedNode[0].hopsAway = Int32(packet.hopStart - packet.hopLimit) } if (fetchedNode[0].user == nil) { - let newUser = UserEntity(context: context) - newUser.num = Int64(packet.from) - let userId = String(format:"%2X", packet.from) - newUser.userId = "!\(userId)" - let last4 = String(userId.suffix(4)) - newUser.longName = "Meshtastic \(last4)" - newUser.shortName = last4 - newUser.hwModel = "UNSET" + let newUser = createUser(num: Int64(packet.from), context: context) fetchedNode[0].user! = newUser } do {