mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
create InternalLinkedItemLabel model
This commit is contained in:
parent
25e237255c
commit
dada5c76c9
3 changed files with 67 additions and 8 deletions
|
|
@ -161,9 +161,9 @@ public extension FeedItemDep {
|
|||
linkedItem.isArchived = isArchived
|
||||
linkedItem.contentReader = contentReader
|
||||
|
||||
// for label in item.labels {
|
||||
// TODO: append labels...and highlights?
|
||||
// }
|
||||
// for label in labels {
|
||||
// // TODO: fix
|
||||
// }
|
||||
|
||||
return linkedItem
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,10 +20,11 @@ struct InternalLinkedItem {
|
|||
let slug: String
|
||||
let isArchived: Bool
|
||||
let contentReader: String?
|
||||
var labels: [FeedItemLabelDep]
|
||||
var labels: [InternalLinkedItemLabel]
|
||||
|
||||
func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItem {
|
||||
let linkedItem = LinkedItem(entity: LinkedItem.entity(), insertInto: context)
|
||||
let existingItem = LinkedItem.lookup(byID: id, inContext: context)
|
||||
let linkedItem = existingItem ?? LinkedItem(entity: LinkedItem.entity(), insertInto: context)
|
||||
|
||||
linkedItem.id = id
|
||||
linkedItem.title = title
|
||||
|
|
@ -42,9 +43,9 @@ struct InternalLinkedItem {
|
|||
linkedItem.isArchived = isArchived
|
||||
linkedItem.contentReader = contentReader
|
||||
|
||||
// for label in item.labels {
|
||||
// TODO: append labels
|
||||
// }
|
||||
for label in labels {
|
||||
linkedItem.addToLabels(label.asManagedObject(inContext: context))
|
||||
}
|
||||
|
||||
return linkedItem
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
import CoreData
|
||||
import Foundation
|
||||
import Models
|
||||
|
||||
struct InternalLinkedItemLabel {
|
||||
let id: String
|
||||
let name: String
|
||||
let color: String
|
||||
let createdAt: Date?
|
||||
let labelDescription: String?
|
||||
|
||||
func persist(context: NSManagedObjectContext) -> NSManagedObjectID? {
|
||||
var objectID: NSManagedObjectID?
|
||||
|
||||
context.performAndWait {
|
||||
let label = asManagedObject(inContext: context)
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
logger.debug("NewsletterEmail saved succesfully")
|
||||
objectID = label.objectID
|
||||
} catch {
|
||||
context.rollback()
|
||||
logger.debug("Failed to save NewsletterEmail: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
return objectID
|
||||
}
|
||||
|
||||
func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItemLabel {
|
||||
let existingItem = LinkedItemLabel.lookup(byID: id, inContext: context)
|
||||
let label = existingItem ?? LinkedItemLabel(entity: LinkedItemLabel.entity(), insertInto: context)
|
||||
label.id = id
|
||||
label.name = name
|
||||
label.color = color
|
||||
label.createdAt = createdAt
|
||||
label.labelDescription = labelDescription
|
||||
return label
|
||||
}
|
||||
}
|
||||
|
||||
extension LinkedItemLabel {
|
||||
static func lookup(byID labelID: String, inContext context: NSManagedObjectContext) -> LinkedItemLabel? {
|
||||
let fetchRequest: NSFetchRequest<Models.LinkedItemLabel> = LinkedItemLabel.fetchRequest()
|
||||
fetchRequest.predicate = NSPredicate(
|
||||
format: "id == %@", labelID
|
||||
)
|
||||
|
||||
var label: LinkedItemLabel?
|
||||
|
||||
context.performAndWait {
|
||||
label = (try? context.fetch(fetchRequest))?.first
|
||||
}
|
||||
|
||||
return label
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue