mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
mark highlights and labels for deletion before server sync
This commit is contained in:
parent
157edb0ae3
commit
924592ab6b
5 changed files with 37 additions and 22 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue