Meshtastic-Apple/Meshtastic/Persistence/UpdateCoreData.swift

111 lines
3.4 KiB
Swift
Raw Normal View History

//
// UpdateCoreData.swift
// Meshtastic
//
// Copyright(c) Garth Vander Houwen 10/3/22.
import CoreData
public func clearPositions(destNum: Int64, context: NSManagedObjectContext) -> Bool {
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum))
do {
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
let newPostions = [PositionEntity]()
fetchedNode[0].positions? = NSOrderedSet(array: newPostions)
do {
try context.save()
return true
} catch {
context.rollback()
return false
}
} catch {
print("💥 Fetch NodeInfoEntity Error")
return false
}
}
public func clearTelemetry(destNum: Int64, metricsType: Int32, context: NSManagedObjectContext) -> Bool {
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(destNum))
do {
let fetchedNode = try context.fetch(fetchNodeInfoRequest) as! [NodeInfoEntity]
let emptyTelemetry = [TelemetryEntity]()
fetchedNode[0].telemetries? = NSOrderedSet(array: emptyTelemetry)
do {
try context.save()
return true
} catch {
context.rollback()
return false
}
} catch {
print("💥 Fetch NodeInfoEntity Error")
return false
}
}
2022-11-24 23:25:44 -08:00
public func deleteChannelMessages(channelIndex: Int32, context: NSManagedObjectContext) {
2022-12-03 01:08:06 -08:00
let fetchChannelMessagesRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MessageEntity")
fetchChannelMessagesRequest.predicate = NSPredicate(format: "channel == %i AND toUser == nil AND admin == false", Int32(channelIndex))
fetchChannelMessagesRequest.includesPropertyValues = false
2022-11-24 23:25:44 -08:00
do {
2022-12-03 01:08:06 -08:00
let objects = try context.fetch(fetchChannelMessagesRequest) as! [NSManagedObject]
for object in objects {
context.delete(object)
}
2022-11-24 23:25:44 -08:00
try context.save()
2022-12-03 01:08:06 -08:00
context.refreshAllObjects()
2022-11-24 23:25:44 -08:00
} catch let error as NSError {
print("Error: \(error.localizedDescription)")
}
}
2022-11-25 00:22:51 -08:00
public func deleteUserMessages(user: UserEntity, context: NSManagedObjectContext) {
2022-12-03 01:08:06 -08:00
let fetchUserMessagesRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MessageEntity")
2022-11-25 00:22:51 -08:00
fetchUserMessagesRequest.predicate = NSPredicate(format: "((toUser.num == %lld) OR (fromUser.num == %lld)) AND toUser != nil AND fromUser != nil AND admin == false", Int64(user.num), Int64(user.num))
2022-12-03 01:08:06 -08:00
fetchUserMessagesRequest.includesPropertyValues = false
2022-11-25 00:22:51 -08:00
do {
2022-12-03 01:08:06 -08:00
let objects = try context.fetch(fetchUserMessagesRequest) as! [NSManagedObject]
for object in objects {
context.delete(object)
}
2022-11-25 00:22:51 -08:00
try context.save()
2022-12-03 01:08:06 -08:00
context.refresh(user, mergeChanges: true)
2022-11-25 00:22:51 -08:00
} catch let error as NSError {
print("Error: \(error.localizedDescription)")
}
}
public func clearCoreDataDatabase(context: NSManagedObjectContext) {
let persistenceController = PersistenceController.shared.container
for i in 0...persistenceController.managedObjectModel.entities.count-1 {
let entity = persistenceController.managedObjectModel.entities[i]
let query = NSFetchRequest<NSFetchRequestResult>(entityName: entity.name!)
let deleteRequest = NSBatchDeleteRequest(fetchRequest: query)
2022-11-24 23:25:44 -08:00
do {
try context.executeAndMergeChanges(using: deleteRequest)
2022-11-25 00:26:13 -08:00
} catch let error as NSError {
2022-11-24 23:25:44 -08:00
print(error)
2022-11-25 00:26:13 -08:00
}
}
}