From 8c3ad7bec967eaad935cfa89968a1f591fd6f37c Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Wed, 20 Apr 2022 21:18:01 -0700 Subject: [PATCH] create a InternalLinkedItem model --- .../UpdateArticleReadingProgress.swift | 1 + .../InternalModels/InternalLinkedItem.swift | 90 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift index 130541350..deaa1394b 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift @@ -50,6 +50,7 @@ public extension DataService { switch payload.data { case let .saved(feedItem): + // TODO: update core data record promise(.success(feedItem)) case let .error(errorCode: errorCode): switch errorCode { diff --git a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift new file mode 100644 index 000000000..df6a2adf2 --- /dev/null +++ b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift @@ -0,0 +1,90 @@ +import CoreData +import Foundation +import Models + +struct InternalLinkedItem { + let id: String + let title: String + let createdAt: Date + let savedAt: Date + var readingProgress: Double + var readingProgressAnchor: Int + let imageURLString: String? + let onDeviceImageURLString: String? + let documentDirectoryPath: String? + let pageURLString: String + let descriptionText: String? + let publisherURLString: String? + let author: String? + let publishDate: Date? + let slug: String + let isArchived: Bool + let contentReader: String? + var labels: [FeedItemLabelDep] + + func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItem { + let linkedItem = LinkedItem(entity: LinkedItem.entity(), insertInto: context) + + linkedItem.id = id + linkedItem.title = title + linkedItem.createdAt = createdAt + linkedItem.savedAt = savedAt + linkedItem.readingProgress = readingProgress + linkedItem.readingProgressAnchor = Int64(readingProgressAnchor) + linkedItem.imageURLString = imageURLString + linkedItem.onDeviceImageURLString = onDeviceImageURLString + linkedItem.pageURLString = pageURLString + linkedItem.descriptionText = descriptionText + linkedItem.publisherURLString = publisherURLString + linkedItem.author = author + linkedItem.publishDate = publishDate + linkedItem.slug = slug + linkedItem.isArchived = isArchived + linkedItem.contentReader = contentReader + + // for label in item.labels { + // TODO: append labels + // } + + return linkedItem + } + + static func make(from item: LinkedItem) -> InternalLinkedItem { + InternalLinkedItem( + id: item.id ?? "", + title: item.title ?? "", + createdAt: item.createdAt ?? Date(), + savedAt: item.savedAt ?? Date(), + readingProgress: item.readingProgress, + readingProgressAnchor: Int(item.readingProgressAnchor), + imageURLString: item.imageURLString, + onDeviceImageURLString: item.onDeviceImageURLString, + documentDirectoryPath: nil, + pageURLString: item.pageURLString ?? "", + descriptionText: item.title, + publisherURLString: item.publisherURLString, + author: item.author, + publishDate: item.publishDate, + slug: item.slug ?? "", + isArchived: item.isArchived, + contentReader: item.contentReader, + labels: [] + ) + } +} + +extension Sequence where Element == InternalLinkedItem { + func persist(context: NSManagedObjectContext) -> [LinkedItem]? { + let linkedItems = map { $0.asManagedObject(inContext: context) } + + do { + try context.save() + print("LinkedItems saved succesfully") + return linkedItems + } catch { + context.rollback() + print("Failed to save LinkedItems: \(error.localizedDescription)") + return nil + } + } +}