Add downloaded filter

This commit is contained in:
Jackson Harper
2023-11-01 23:19:29 +08:00
parent de636748c1
commit 7f23b6b2d9
3 changed files with 24 additions and 2 deletions

View File

@ -11,6 +11,8 @@ extension LinkedItemFilter {
return LocalText.readLaterGeneric
case .newsletters:
return LocalText.newslettersGeneric
case .downloaded:
return "Downloaded"
case .feeds:
return "Feeds"
case .recommended:

View File

@ -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

View File

@ -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(