diff --git a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift index 9970f1c63..9c162178f 100644 --- a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift +++ b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift @@ -1,3 +1,4 @@ +import CoreData import Foundation public struct HomeFeedData { @@ -137,3 +138,48 @@ struct JSONArticle: Decodable { ) } } + +public extension FeedItemDep { + func asManagedObject(inContext context: NSManagedObjectContext) -> LinkedItem { + let linkedItem = LinkedItem(context: 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 + } +} + +public extension Sequence where Element == FeedItemDep { + 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 + } + } +} diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift index 766a34ecb..5ec018a76 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift @@ -59,6 +59,8 @@ public extension DataService { case let .success(payload): switch payload.data { case let .success(result: result): + // save items to coredata + _ = result.items.persist(context: self.persistentContainer.viewContext) promise(.success(result)) case .error: promise(.failure(.unknown))