delete old labels when a new label list is fetched

This commit is contained in:
Satindar Dhillon
2022-08-01 14:09:39 -07:00
parent 10d5796ba1
commit c5aab2becc

View File

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