persist readingProgress changes to coredata

This commit is contained in:
Satindar Dhillon 2022-04-21 13:42:13 -07:00
parent 3f13fe62ee
commit 6f9a1157e5
7 changed files with 34 additions and 1 deletions

View file

@ -44,6 +44,7 @@ public extension DataService {
switch payload.data {
case let .success(linkId):
// TODO: update CoreData
promise(.success(linkId))
case .error:
promise(.failure(.message(messageText: "Error archiving link")))

View file

@ -46,6 +46,7 @@ public extension DataService {
switch payload.data {
case let .saved(label: label):
// TODO: update CoreData
promise(.success(label))
case let .error(errorCode: errorCode):
promise(.failure(.message(messageText: errorCode.rawValue)))

View file

@ -37,6 +37,7 @@ public extension DataService {
switch payload.data {
case .success:
// TODO: update CoreData
promise(.success(true))
case .error:
promise(.failure(.message(messageText: "Error removing label")))

View file

@ -51,6 +51,7 @@ public extension DataService {
switch payload.data {
case let .success(item):
// TODO: update CoreData
promise(.success(item))
case .error(errorCode: _):
promise(.failure(.message(messageText: "Error removing link")))

View file

@ -44,6 +44,7 @@ public extension DataService {
switch payload.data {
case let .saved(labels):
// TODO: update CoreData
promise(.success(labels))
case .error:
promise(.failure(.message(messageText: "failed to set labels")))

View file

@ -1,4 +1,5 @@
import Combine
import CoreData
import Foundation
import Models
import SwiftGraphQL
@ -50,7 +51,7 @@ public extension DataService {
switch payload.data {
case let .saved(feedItem):
// TODO: update core data record
self.updateManagedObject(itemID: itemID, readingProgress: readingProgress, anchorIndex: anchorIndex)
promise(.success(feedItem))
case let .error(errorCode: errorCode):
switch errorCode {
@ -69,4 +70,30 @@ public extension DataService {
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
}
private func updateManagedObject(
itemID: String,
readingProgress: Double,
anchorIndex: Int
) {
let context = persistentContainer.viewContext
let fetchRequest: NSFetchRequest<Models.LinkedItem> = LinkedItem.fetchRequest()
fetchRequest.predicate = NSPredicate(
format: "id == %@", itemID
)
if let linkedItem = try? context.fetch(fetchRequest).first {
linkedItem.readingProgress = readingProgress
linkedItem.readingProgressAnchor = Int64(anchorIndex)
}
do {
try context.save()
DataService.logger.debug("LinkedItem updated succesfully")
} catch {
context.rollback()
DataService.logger.debug("Failed to update LinkedItem: \(error.localizedDescription)")
}
}
}

View file

@ -33,6 +33,7 @@ public extension DataService {
case let .success(payload):
switch payload.data {
case let .success(result: result):
// TODO: update CoreData
promise(.success(result))
case .error:
promise(.failure(.unknown))