2022-10-03 16:52:00 -07:00
//
// U p d a t e C o r e D a t a . s w i f t
// M e s h t a s t i c
//
// C o p y r i g h t ( c ) G a r t h V a n d e r H o u w e n 1 0 / 3 / 2 2 .
2022-10-03 20:13:33 -07:00
2022-10-03 16:52:00 -07:00
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
}
2022-10-03 20:13:33 -07:00
}
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
}
2022-10-03 16:52:00 -07:00
2022-10-03 20:13:33 -07:00
} catch {
print ( " 💥 Fetch NodeInfoEntity Error " )
return false
}
2022-10-03 16:52:00 -07:00
}
2022-10-03 21:19:10 -07:00
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 ) " )
}
}
2022-10-03 21:19:10 -07:00
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 ]
2022-10-06 08:56:15 -07:00
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
}
2022-10-03 21:19:10 -07:00
}
}