diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index fe9b98f5f..543d23727 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -233,7 +233,7 @@ import Views func removeLink(dataService: DataService, objectID: NSManagedObjectID) { Snackbar.show(message: "Link removed") - dataService.removeLink(objectID: objectID, useViewContext: true) + dataService.removeLink(objectID: objectID) } func snoozeUntil(dataService: DataService, linkId: String, until: Date, successMessage: String?) async { diff --git a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift index 377b7e0fe..3624aec4b 100644 --- a/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift +++ b/apple/OmnivoreKit/Sources/App/Views/WebReader/WebReaderContainer.swift @@ -185,7 +185,7 @@ struct WebReaderContainerView: View { .alert("Are you sure?", isPresented: $showDeleteConfirmation) { Button("Remove Link", role: .destructive) { Snackbar.show(message: "Link removed") - dataService.removeLink(objectID: item.objectID, useViewContext: true) + dataService.removeLink(objectID: item.objectID) #if os(iOS) presentationMode.wrappedValue.dismiss() #endif diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift index ff9a95b87..286e0524b 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/DeleteHighlight.swift @@ -5,20 +5,30 @@ import SwiftGraphQL public extension DataService { func deleteHighlight(highlightID: String) { - if let highlight = Highlight.lookup(byID: highlightID, inContext: backgroundContext) { + if let highlight = Highlight.lookup(byID: highlightID, inContext: viewContext) { deleteHighlight(objectID: highlight.objectID) } } private func deleteHighlight(objectID: NSManagedObjectID) { // Update CoreData - backgroundContext.perform { [weak self] in - guard let self = self else { return } - guard let highlight = self.backgroundContext.object(with: objectID) as? Highlight else { return } - highlight.remove(inContext: self.backgroundContext) + viewContext.performAndWait { + guard let highlight = viewContext.object(with: objectID) as? Highlight else { return } + highlight.serverSyncStatus = Int64(ServerSyncStatus.needsDeletion.rawValue) - // Send update to server - self.syncHighlightDeletion(highlightID: highlight.unwrappedID, objectID: objectID) + do { + try viewContext.save() + logger.debug("Highlight succesfully marked for deletion") + } catch { + viewContext.rollback() + logger.debug("Failed to mark Highlight for deletion: \(error.localizedDescription)") + } + } + + // Send update to server + backgroundContext.perform { [weak self] in + guard let highlight = self?.backgroundContext.object(with: objectID) as? Highlight else { return } + self?.syncHighlightDeletion(highlightID: highlight.unwrappedID, objectID: objectID) } } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift index fc7c02c2b..9df043f40 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLabelPublisher.swift @@ -5,14 +5,21 @@ import SwiftGraphQL extension DataService { public func removeLabel(labelID: String, name: String) { // Update CoreData - backgroundContext.perform { [weak self] in - guard let self = self else { return } - guard let label = LinkedItemLabel.lookup(byID: labelID, inContext: self.backgroundContext) else { return } - label.remove(inContext: self.backgroundContext) + viewContext.performAndWait { + guard let label = LinkedItemLabel.lookup(byID: labelID, inContext: self.viewContext) else { return } + label.serverSyncStatus = Int64(ServerSyncStatus.needsDeletion.rawValue) - // Send update to server - self.syncLabelDeletion(labelID: labelID, labelName: name) + do { + try viewContext.save() + logger.debug("Label succesfully marked for deletion") + } catch { + viewContext.rollback() + logger.debug("Failed to mark Label for deletion: \(error.localizedDescription)") + } } + + // Send update to server + syncLabelDeletion(labelID: labelID, labelName: name) } func syncLabelDeletion(labelID: String, labelName _: String) { diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift index 2df31817e..5fd1bbfca 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/RemoveLink.swift @@ -4,19 +4,17 @@ import Models import SwiftGraphQL public extension DataService { - func removeLink(objectID: NSManagedObjectID, useViewContext: Bool = false) { - let context = useViewContext ? viewContext : backgroundContext - + func removeLink(objectID: NSManagedObjectID) { // Update CoreData - context.performAndWait { - guard let linkedItem = context.object(with: objectID) as? LinkedItem else { return } + viewContext.performAndWait { + guard let linkedItem = viewContext.object(with: objectID) as? LinkedItem else { return } linkedItem.serverSyncStatus = Int64(ServerSyncStatus.needsDeletion.rawValue) do { - try context.save() + try viewContext.save() logger.debug("LinkedItem succesfully marked for deletion") } catch { - context.rollback() + viewContext.rollback() logger.debug("Failed to mark LinkedItem for deletion: \(error.localizedDescription)") } }