mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Reduce duplicate nodes
Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
This commit is contained in:
parent
50e52ca0ff
commit
208d8fa6e5
2 changed files with 13 additions and 10 deletions
|
|
@ -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)")
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue