From 7f23b6b2d927aba2d9b68b417ea3af37f2dc567a Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 1 Nov 2023 23:19:29 +0800 Subject: [PATCH] Add downloaded filter --- .../App/Views/Home/HomeFeedDisplayText.swift | 2 ++ .../App/Views/Home/HomeFeedViewModel.swift | 8 ++++++-- .../Sources/Models/LinkedItemFilter.swift | 16 ++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedDisplayText.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedDisplayText.swift index 745d37a77..ebd765dc0 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedDisplayText.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedDisplayText.swift @@ -11,6 +11,8 @@ extension LinkedItemFilter { return LocalText.readLaterGeneric case .newsletters: return LocalText.newslettersGeneric + case .downloaded: + return "Downloaded" case .feeds: return "Feeds" case .recommended: diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index 5c33f409e..1f34b82c9 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -203,7 +203,8 @@ import Views await group.waitForAll() } - let shouldSearch = items.count < 1 || isRefresh + let filter = LinkedItemFilter(rawValue: appliedFilter) + let shouldSearch = items.count < 1 || isRefresh && filter != LinkedItemFilter.downloaded if shouldSearch { await loadSearchQuery(dataService: dataService, isRefresh: isRefresh) } else { @@ -220,7 +221,10 @@ import Views isLoading = true showLoadingBar = true - await loadSearchQuery(dataService: dataService, isRefresh: isRefresh) + let filter = LinkedItemFilter(rawValue: appliedFilter) + if filter != LinkedItemFilter.downloaded { + await loadSearchQuery(dataService: dataService, isRefresh: isRefresh) + } isLoading = false showLoadingBar = false diff --git a/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift b/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift index be54b26ef..686d5aab5 100644 --- a/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift +++ b/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift @@ -5,6 +5,7 @@ public enum LinkedItemFilter: String, CaseIterable { case feeds case readlater case newsletters + case downloaded case recommended case all case archived @@ -22,6 +23,8 @@ public extension LinkedItemFilter { return "label:RSS" case .readlater: return "in:library" + case .downloaded: + return "" case .newsletters: return "in:inbox label:Newsletter" case .recommended: @@ -73,6 +76,19 @@ public extension LinkedItemFilter { return NSCompoundPredicate(andPredicateWithSubpredicates: [ undeletedPredicate, notInArchivePredicate, nonNewsletterLabelPredicate, nonRSSPredicate ]) + case .downloaded: + // include pdf only + let hasHTMLContent = NSPredicate( + format: "htmlContent.length > 0" + ) + let isPDFPredicate = NSPredicate( + format: "%K == %@", #keyPath(LinkedItem.contentReader), "PDF" + ) + let localPDFURL = NSPredicate( + format: "localPDF.length > 0" + ) + let downloadedPDF = NSCompoundPredicate(andPredicateWithSubpredicates: [isPDFPredicate, localPDFURL]) + return NSCompoundPredicate(orPredicateWithSubpredicates: [hasHTMLContent, downloadedPDF]) case .newsletters: // non-archived or deleted items with the Newsletter label let newsletterLabelPredicate = NSPredicate(