diff --git a/apple/OmnivoreKit/Sources/App/Views/AI/DigestConfigView.swift b/apple/OmnivoreKit/Sources/App/Views/AI/DigestConfigView.swift index 934d13be1..495be5454 100644 --- a/apple/OmnivoreKit/Sources/App/Views/AI/DigestConfigView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/AI/DigestConfigView.swift @@ -18,7 +18,7 @@ public class DigestConfigViewModel: ObservableObject { func load(dataService: DataService) async { isLoading = true - if !digestNeedsRefresh() { + if !dataService.digestNeedsRefresh() { if let digest = dataService.loadStoredDigest() { self.digest = digest } @@ -35,30 +35,6 @@ public class DigestConfigViewModel: ObservableObject { isLoading = false } - - func refreshDigest(dataService: DataService) async { - do { - try await dataService.refreshDigest() - } catch { - print("ERROR WITH DIGEST: ", error) - } - } - - func digestNeedsRefresh() -> Bool { - let fileManager = FileManager.default - let localURL = URL.om_cachesDirectory.appendingPathComponent("digest.json") - do { - let attributes = try fileManager.attributesOfItem(atPath: localURL.path) - if let modificationDate = attributes[.modificationDate] as? Date { - // Two hours ago - let twoHoursAgo = Date().addingTimeInterval(-2 * 60 * 60) - return modificationDate < twoHoursAgo - } - } catch { - print("Error: \(error)") - } - return true - } } @available(iOS 17.0, *) diff --git a/apple/OmnivoreKit/Sources/App/Views/AI/FullScreenDigestView.swift b/apple/OmnivoreKit/Sources/App/Views/AI/FullScreenDigestView.swift index b867b5f6e..5b92ca42a 100644 --- a/apple/OmnivoreKit/Sources/App/Views/AI/FullScreenDigestView.swift +++ b/apple/OmnivoreKit/Sources/App/Views/AI/FullScreenDigestView.swift @@ -46,7 +46,7 @@ public class FullScreenDigestViewModel: ObservableObject { @AppStorage(UserDefaultKey.lastVisitedDigestId.rawValue) var lastVisitedDigestId = "" func load(dataService: DataService, audioController: AudioController) async { - if !digestNeedsRefresh() { + if !dataService.digestNeedsRefresh() { if let digest = dataService.loadStoredDigest() { self.digest = digest } @@ -85,21 +85,7 @@ public class FullScreenDigestViewModel: ObservableObject { } } - func digestNeedsRefresh() -> Bool { - let fileManager = FileManager.default - let localURL = URL.om_cachesDirectory.appendingPathComponent("digest.json") - do { - let attributes = try fileManager.attributesOfItem(atPath: localURL.path) - if let modificationDate = attributes[.modificationDate] as? Date { - // Two hours ago - let twoHoursAgo = Date().addingTimeInterval(-2 * 60 * 60) - return modificationDate < twoHoursAgo - } - } catch { - print("Error: \(error)") - } - return true - } + } @available(iOS 17.0, *) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift index e3052b27e..fd1fd5af3 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewIOS.swift @@ -361,7 +361,9 @@ struct AnimatingCellHeight: AnimatableModifier { if viewModel.currentFolder == "following", viewModel.fetcher.items.count > 0 { viewModel.stopUsingFollowingPrimer = true } - await viewModel.checkForDigestUpdate(dataService: dataService) + if dataService.digestNeedsRefresh() { + await viewModel.checkForDigestUpdate(dataService: dataService) + } } .environment(\.editMode, self.$isEditMode) .navigationBarTitleDisplayMode(.inline) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index ef5a0c495..f5942ae74 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -51,9 +51,9 @@ enum LoadingBarStyle { @AppStorage("LibraryTabView::hideFollowingTab") var hideFollowingTab = false @AppStorage("LibraryTabView::digestHidden") var digestHidden = false @AppStorage(UserDefaultKey.lastVisitedDigestId.rawValue) var lastVisitedDigestId = "" - @AppStorage("LibraryTabView::digestHidden") var digestHidden = false - @AppStorage(UserDefaultKey.lastSelectedFeaturedItemFilter.rawValue) var featureFilter = FeaturedItemFilter.continueReading.rawValue + @AppStorage(UserDefaultKey.lastSelectedFeaturedItemFilter.rawValue) var featureFilter = + FeaturedItemFilter.continueReading.rawValue @Published var appliedFilter: InternalFilter? { didSet { diff --git a/apple/OmnivoreKit/Sources/Services/DataService/AI/AITasks.swift b/apple/OmnivoreKit/Sources/Services/DataService/AI/AITasks.swift index 7147501c5..d2217c79e 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/AI/AITasks.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/AI/AITasks.swift @@ -97,7 +97,23 @@ public struct ExplainResult: Codable { public let text: String } -extension DataService { +extension DataService { + + public func digestNeedsRefresh() -> Bool { + let fileManager = FileManager.default + let localURL = URL.om_cachesDirectory.appendingPathComponent("digest.json") + do { + let attributes = try fileManager.attributesOfItem(atPath: localURL.path) + if let modificationDate = attributes[.modificationDate] as? Date { + // Two hours ago + let twoHoursAgo = Date().addingTimeInterval(-2 * 60 * 60) + return modificationDate < twoHoursAgo + } + } catch { + print("Error: \(error)") + } + return true + } public func refreshDigest() async throws { let encoder = JSONEncoder() let digestRequest = DigestRequest(schedule: "daily", voices: ["openai-nova"]) diff --git a/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift b/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift index 8956fc5fb..b6997b3db 100644 --- a/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift +++ b/apple/OmnivoreKit/Sources/Views/FeedItem/LibraryItemCard.swift @@ -9,6 +9,7 @@ enum FlairLabels: String { case newsletter case rss case feed + case digest var icon: Image { switch self { @@ -17,6 +18,7 @@ enum FlairLabels: String { case .recommended: return Image.flairRecommended case .newsletter: return Image.flairNewsletter case .feed, .rss: return Image.flairFeed + case .digest: return Image.tabDigestSelected } } @@ -27,6 +29,7 @@ enum FlairLabels: String { case .newsletter: return 2 case .recommended: return 3 case .pinned: return 4 + case .digest: return 5 } } }