From 07c6792cde8d9a84bf031c67c4adcad361d86ce1 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Wed, 11 May 2022 16:33:04 -0700 Subject: [PATCH] Add Newsletters and Read Later shortcuts --- .../Sources/Models/LinkedItemFilter.swift | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift b/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift index 1b931c203..c257b92ef 100644 --- a/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift +++ b/apple/OmnivoreKit/Sources/Models/LinkedItemFilter.swift @@ -2,6 +2,8 @@ import Foundation public enum LinkedItemFilter: String, CaseIterable { case inbox + case readlater + case newsletters case all case archived case files @@ -12,6 +14,10 @@ public extension LinkedItemFilter { switch self { case .inbox: return "Inbox" + case .readlater: + return "Read Later" + case .newsletters: + return "Newsletters" case .all: return "All" case .archived: @@ -25,6 +31,10 @@ public extension LinkedItemFilter { switch self { case .inbox: return "in:inbox" + case .readlater: + return "in:inbox -label:Newsletter" + case .newsletters: + return "in:inbox label:Newsletter" case .all: return "in:all" case .archived: @@ -38,14 +48,22 @@ public extension LinkedItemFilter { let undeletedPredicate = NSPredicate( format: "%K != %i", #keyPath(LinkedItem.serverSyncStatus), Int64(ServerSyncStatus.needsDeletion.rawValue) ) + let notInArchivePredicate = NSPredicate( + format: "%K == %@", #keyPath(LinkedItem.isArchived), Int(truncating: false) as NSNumber + ) switch self { case .inbox: // non-archived items - let notInArchivePredicate = NSPredicate( - format: "%K == %@", #keyPath(LinkedItem.isArchived), Int(truncating: false) as NSNumber - ) return NSCompoundPredicate(andPredicateWithSubpredicates: [undeletedPredicate, notInArchivePredicate]) + case .readlater: + // non-archived or deleted items without the Newsletter label + let nonNewsletterLabelPredicate = NSPredicate(format: "NOT SUBQUERY(labels, $label, $label.name == \"Newsletter\") .@count > 0") + return NSCompoundPredicate(andPredicateWithSubpredicates: [undeletedPredicate, notInArchivePredicate, nonNewsletterLabelPredicate]) + case .newsletters: + // non-archived or deleted items with the Newsletter label + let newsletterLabelPredicate = NSPredicate(format: "SUBQUERY(labels, $label, $label.name == \"Newsletter\").@count > 0") + return NSCompoundPredicate(andPredicateWithSubpredicates: [notInArchivePredicate, newsletterLabelPredicate]) case .all: // include everything undeleted return undeletedPredicate