fix update and delete label publishers

This commit is contained in:
Satindar Dhillon
2022-04-23 09:48:53 -07:00
parent b4849c118f
commit 65b448f262
4 changed files with 75 additions and 7 deletions

View File

@ -37,8 +37,12 @@ public extension DataService {
switch payload.data {
case .success:
// TODO: -labels update CoreData
promise(.success(true))
if let label = LinkedItemLabel.lookup(byID: labelID, inContext: self.backgroundContext) {
label.remove(inContext: self.backgroundContext)
promise(.success(true))
} else {
promise(.failure(.message(messageText: "Error removing label")))
}
case .error:
promise(.failure(.message(messageText: "Error removing label")))
}

View File

@ -50,11 +50,11 @@ public extension DataService {
}
switch payload.data {
case let .success(item):
case .success:
if let linkedItem = LinkedItem.lookup(byID: itemID, inContext: self.backgroundContext) {
linkedItem.remove(inContext: self.backgroundContext)
}
promise(.success(item))
promise(.success(itemID))
case .error(errorCode: _):
promise(.failure(.message(messageText: "Error removing link")))
}

View File

@ -45,9 +45,28 @@ public extension DataService {
switch payload.data {
case let .saved(labels):
// TODO: -labels update CoreData and fix dis
promise(.failure(.message(messageText: "failed to set labels")))
// promise(.success(labels))
guard let linkedItem = LinkedItem.lookup(byID: itemID, inContext: self.backgroundContext) else {
promise(.failure(.message(messageText: "failed to set labels")))
return
}
self.backgroundContext.perform {
if let existingLabels = linkedItem.labels {
linkedItem.removeFromLabels(existingLabels)
}
linkedItem.addToLabels(NSSet(array: labels))
}
do {
try self.backgroundContext.save()
logger.debug("Item labels updated")
let labelObjects = linkedItem.labels.asArray(of: LinkedItemLabel.self)
promise(.success(labelObjects.map(\.objectID)))
} catch {
self.backgroundContext.rollback()
logger.debug("Failed to update item labels: \(error.localizedDescription)")
promise(.failure(.message(messageText: "failed to set labels")))
}
case .error:
promise(.failure(.message(messageText: "failed to set labels")))
}

View File

@ -55,6 +55,51 @@ extension LinkedItemLabel {
return label
}
func update(
inContext context: NSManagedObjectContext,
newName: String? = nil,
newColor: String? = nil,
newLabelDescription: String? = nil
) {
context.perform {
if let newName = newName {
self.name = newName
}
if let newColor = newColor {
self.color = newColor
}
if let newLabelDescription = newLabelDescription {
self.labelDescription = newLabelDescription
}
guard context.hasChanges else { return }
do {
try context.save()
logger.debug("LinkedItemLabel updated succesfully")
} catch {
context.rollback()
logger.debug("Failed to update LinkedItemLabel: \(error.localizedDescription)")
}
}
}
func remove(inContext context: NSManagedObjectContext) {
context.perform {
context.delete(self)
do {
try context.save()
logger.debug("LinkedItemLabel removed")
} catch {
context.rollback()
logger.debug("Failed to remove LinkedItemLabel: \(error.localizedDescription)")
}
}
}
}
extension Sequence where Element == InternalLinkedItemLabel {