Reduce duplicate nodes

Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
This commit is contained in:
Garth Vander Houwen 2026-04-15 19:35:36 -07:00 committed by GitHub
parent 50e52ca0ff
commit 208d8fa6e5
2 changed files with 13 additions and 10 deletions

View file

@ -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)")

View file

@ -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 {