fetch items from core data if network request fails

This commit is contained in:
Satindar Dhillon 2022-04-19 12:08:19 -07:00
parent 1012fccbb2
commit 93ef6980d1
3 changed files with 34 additions and 0 deletions

View file

@ -76,6 +76,9 @@ import Views
receiveCompletion: { [weak self] completion in
guard case .failure = completion else { return }
self?.isLoading = false
// return cachedItems found in CoreData when request fails
self?.items = dataService.cachedFeedItems()
self?.cursor = nil
},
receiveValue: { [weak self] result in
// Search results aren't guaranteed to return in order so this

View file

@ -166,6 +166,29 @@ public extension FeedItemDep {
return linkedItem
}
static func make(from item: LinkedItem) -> FeedItemDep {
FeedItemDep(
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: []
)
}
}
public extension Sequence where Element == FeedItemDep {

View file

@ -1,4 +1,5 @@
import Combine
import CoreData
import Foundation
import Models
import SwiftGraphQL
@ -74,6 +75,13 @@ public extension DataService {
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
}
func cachedFeedItems() -> [FeedItemDep] {
let fetchRequest: NSFetchRequest<Models.LinkedItem> = LinkedItem.fetchRequest()
// TODO: set sort order?
let items = (try? persistentContainer.viewContext.fetch(fetchRequest)) ?? []
return items.map { FeedItemDep.make(from: $0) }
}
}
let homeFeedItemSelection = Selection.Article {