delete link from view context rather than background context
This commit is contained in:
@ -185,9 +185,16 @@ struct WebReaderContainerView: View {
|
||||
.alert("Are you sure?", isPresented: $showDeleteConfirmation) {
|
||||
Button("Remove Link", role: .destructive) {
|
||||
Snackbar.show(message: "Link removed")
|
||||
dataService.removeLink(objectID: item.objectID)
|
||||
|
||||
#if os(iOS)
|
||||
let itemID = item.unwrappedID
|
||||
dataService.viewContext.performAndWait {
|
||||
item.remove(inContext: dataService.viewContext)
|
||||
}
|
||||
dataService.syncLinkDeletion(itemID: itemID, objectID: nil)
|
||||
presentationMode.wrappedValue.dismiss()
|
||||
#else
|
||||
dataService.removeLink(objectID: item.objectID)
|
||||
#endif
|
||||
}
|
||||
Button("Cancel", role: .cancel, action: {})
|
||||
|
||||
@ -3,8 +3,8 @@ import Foundation
|
||||
import Models
|
||||
import SwiftGraphQL
|
||||
|
||||
extension DataService {
|
||||
public func removeLink(objectID: NSManagedObjectID) {
|
||||
public extension DataService {
|
||||
func removeLink(objectID: NSManagedObjectID) {
|
||||
// Update CoreData
|
||||
backgroundContext.perform { [weak self] in
|
||||
guard let self = self else { return }
|
||||
@ -16,7 +16,10 @@ extension DataService {
|
||||
}
|
||||
}
|
||||
|
||||
func syncLinkDeletion(itemID: String, objectID: NSManagedObjectID) {
|
||||
// TODO: this doesn't really work since we usually delete from core data first
|
||||
// and then sync the deletion with the server. So we have no way to recored a failed
|
||||
// delete call to the server as it is now...
|
||||
func syncLinkDeletion(itemID: String, objectID: NSManagedObjectID?) {
|
||||
enum MutationResult {
|
||||
case success(linkId: String)
|
||||
case error(errorCode: Enums.SetBookmarkArticleErrorCode)
|
||||
@ -53,21 +56,23 @@ extension DataService {
|
||||
let data = try? result.get()
|
||||
let isSyncSuccess = data != nil
|
||||
|
||||
context.perform {
|
||||
guard let linkedItem = context.object(with: objectID) as? LinkedItem else { return }
|
||||
if let objectID = objectID {
|
||||
context.perform {
|
||||
guard let linkedItem = context.object(with: objectID) as? LinkedItem else { return }
|
||||
|
||||
if isSyncSuccess {
|
||||
linkedItem.remove(inContext: context)
|
||||
} else {
|
||||
linkedItem.serverSyncStatus = Int64(ServerSyncStatus.needsDeletion.rawValue)
|
||||
}
|
||||
if isSyncSuccess {
|
||||
linkedItem.remove(inContext: context)
|
||||
} else {
|
||||
linkedItem.serverSyncStatus = Int64(ServerSyncStatus.needsDeletion.rawValue)
|
||||
}
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
logger.debug("LinkedItem deleted succesfully")
|
||||
} catch {
|
||||
context.rollback()
|
||||
logger.debug("Failed to delete LinkedItem: \(error.localizedDescription)")
|
||||
do {
|
||||
try context.save()
|
||||
logger.debug("LinkedItem deleted succesfully")
|
||||
} catch {
|
||||
context.rollback()
|
||||
logger.debug("Failed to delete LinkedItem: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user