fix update and delete label publishers
This commit is contained in:
@ -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")))
|
||||
}
|
||||
|
||||
@ -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")))
|
||||
}
|
||||
|
||||
@ -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")))
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user