delete old labels when a new label list is fetched
This commit is contained in:
@ -110,9 +110,22 @@ extension Sequence where Element == InternalLinkedItemLabel {
|
||||
var result: [NSManagedObjectID]?
|
||||
|
||||
context.performAndWait {
|
||||
// Get currently stored label ids so we can later delete the old ones
|
||||
let labelsFetchRequest: NSFetchRequest<Models.LinkedItemLabel> = LinkedItemLabel.fetchRequest()
|
||||
let existingLabels = (try? labelsFetchRequest.execute()) ?? []
|
||||
|
||||
let validLabelIDs = map(\.id)
|
||||
let invalidLinkedItemLabels = existingLabels.filter { !validLabelIDs.contains($0.unwrappedID) }
|
||||
|
||||
let labels = map { $0.asManagedObject(inContext: context) }
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
// Delete all existing labels that aren't part of the newly updated list
|
||||
// received from the server
|
||||
for linkedItem in invalidLinkedItemLabels {
|
||||
context.delete(linkedItem)
|
||||
}
|
||||
logger.debug("labels saved succesfully")
|
||||
result = labels.map(\.objectID)
|
||||
} catch {
|
||||
|
||||
Reference in New Issue
Block a user