diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 4ac20352..fdde3515 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -1054,10 +1054,18 @@ actor MeshPackets { /// Make a new from user if they are unknown do { let newUser = try createUser(num: Int64(truncatingIfNeeded: packet.from), context: context) - let newNode = NodeInfoEntity(context: context) - newNode.id = Int64(newUser.num) - newNode.num = Int64(newUser.num) - newNode.user = newUser + // Reuse an existing NodeInfoEntity if present to avoid creating duplicates + let fetchExistingNodeRequest = NodeInfoEntity.fetchRequest() + fetchExistingNodeRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from)) + let existingNodes = try context.fetch(fetchExistingNodeRequest) + if let existingNode = existingNodes.first { + existingNode.user = newUser + } else { + let newNode = NodeInfoEntity(context: context) + newNode.id = Int64(newUser.num) + newNode.num = Int64(newUser.num) + newNode.user = newUser + } newMessage.fromUser = newUser } catch CoreDataError.invalidInput(let message) { Logger.data.error("Error Creating a new Core Data UserEntity (Invalid Input) from node number: \(packet.from, privacy: .public) Error: \(message, privacy: .public)") diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index 5a141ed3..a73651fc 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -430,18 +430,13 @@ extension MeshPackets { } } - let myInfoEntity = MyInfoEntity(context: context) - myInfoEntity.myNodeNum = Int64(packet.from) - myInfoEntity.rebootCount = 0 - newNode.myInfo = myInfoEntity do { try context.save() Logger.data.info("💾 [NodeInfo] Saved a NodeInfo for node number: \(packet.from.toHex(), privacy: .public)") - Logger.data.info("💾 [MyInfoEntity] Saved a new myInfo for node number: \(packet.from.toHex(), privacy: .public)") } catch { context.rollback() let nsError = error as NSError - Logger.data.error("💥 [MyInfoEntity] Error Inserting New Core Data: \(nsError, privacy: .public)") + Logger.data.error("💥 [NodeInfoEntity] Error Inserting New Core Data: \(nsError, privacy: .public)") } } else {