From 5ec248a86c582dacb1ee14c582511d9385cc4160 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Tue, 14 Jun 2022 21:05:45 -0700 Subject: [PATCH] use readAt property to sort recently read items --- .../CoreDataModel.xcdatamodel/contents | 5 +++-- .../OmnivoreKit/Sources/Models/DataModels/FeedItem.swift | 1 + apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift | 5 ++++- .../Mutations/UpdateArticleReadingProgress.swift | 8 ++++---- .../DataService/Queries/ArticleContentQuery.swift | 2 ++ .../Services/DataService/Queries/LibraryItemsQuery.swift | 2 ++ .../Services/InternalModels/InternalLinkedItem.swift | 4 ++++ 7 files changed, 20 insertions(+), 7 deletions(-) diff --git a/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents b/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents index 9c4257c46..30b35f970 100644 --- a/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents +++ b/apple/OmnivoreKit/Sources/Models/CoreData/CoreDataModel.xcdatamodeld/CoreDataModel.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -37,6 +37,7 @@ + @@ -92,7 +93,7 @@ - + diff --git a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift index 1150a8632..09b375545 100644 --- a/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift +++ b/apple/OmnivoreKit/Sources/Models/DataModels/FeedItem.swift @@ -19,6 +19,7 @@ public struct JSONArticle: Decodable { public let createdAt: Date public let updatedAt: Date public let savedAt: Date + public let readAt: Date? public let image: String public let readingProgressPercent: Double public let readingProgressAnchorIndex: Int diff --git a/apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift b/apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift index fc7f188c2..7e060955b 100644 --- a/apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift +++ b/apple/OmnivoreKit/Sources/Models/LinkedItemSort.swift @@ -41,7 +41,10 @@ public extension LinkedItemSort { case .oldest: return [NSSortDescriptor(keyPath: \LinkedItem.savedAt, ascending: true)] case .recentlyRead: - return [NSSortDescriptor(keyPath: \LinkedItem.updatedAt, ascending: false)] + return [ + NSSortDescriptor(keyPath: \LinkedItem.readAt, ascending: false), + NSSortDescriptor(keyPath: \LinkedItem.savedAt, ascending: false) + ] case .recentlyPublished: return [NSSortDescriptor(keyPath: \LinkedItem.publishDate, ascending: false)] } diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift index 07e9f273f..b6f218fd2 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Mutations/UpdateArticleReadingProgress.swift @@ -27,7 +27,7 @@ extension DataService { func syncLinkReadingProgress(itemID: String, objectID: NSManagedObjectID, readingProgress: Double, anchorIndex: Int) { enum MutationResult { - case saved(updatedAt: Date?) + case saved(readAt: Date?) case error(errorCode: Enums.SaveArticleReadingProgressErrorCode) } @@ -36,7 +36,7 @@ extension DataService { saveArticleReadingProgressError: .init { .error(errorCode: try $0.errorCodes().first ?? .badData) }, saveArticleReadingProgressSuccess: .init { .saved( - updatedAt: try $0.updatedArticle(selection: Selection.Article { try $0.updatedAt().value }) + readAt: try $0.updatedArticle(selection: Selection.Article { try $0.readAt()?.value }) ) } ) @@ -64,8 +64,8 @@ extension DataService { context.perform { guard let linkedItem = context.object(with: objectID) as? LinkedItem else { return } linkedItem.serverSyncStatus = Int64(syncStatus.rawValue) - if let mutationResult = data?.data, case let MutationResult.saved(updatedAt) = mutationResult { - linkedItem.updatedAt = updatedAt + if let mutationResult = data?.data, case let MutationResult.saved(readAt) = mutationResult { + linkedItem.readAt = readAt } do { diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift index 61267d8a0..842242e05 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/ArticleContentQuery.swift @@ -101,6 +101,7 @@ public extension DataService { title: try $0.title(), createdAt: try $0.createdAt().value ?? Date(), savedAt: try $0.savedAt().value ?? Date(), + readAt: try $0.readAt()?.value, updatedAt: try $0.updatedAt().value ?? Date(), state: try $0.state()?.rawValue ?? "SUCCEEDED", readingProgress: try $0.readingProgressPercent(), @@ -225,6 +226,7 @@ public extension DataService { linkedItem.author = item.author linkedItem.publishDate = item.publishDate linkedItem.slug = item.slug + linkedItem.readAt = item.readAt linkedItem.isArchived = item.isArchived linkedItem.contentReader = item.contentReader linkedItem.serverSyncStatus = Int64(ServerSyncStatus.isNSync.rawValue) diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift index ed81fe955..99c9fcece 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Queries/LibraryItemsQuery.swift @@ -97,6 +97,7 @@ public extension DataService { title: try $0.title(), createdAt: try $0.createdAt().value ?? Date(), savedAt: try $0.savedAt().value ?? Date(), + readAt: try $0.readAt()?.value, updatedAt: try $0.updatedAt().value ?? Date(), state: try $0.state()?.rawValue ?? "SUCCEEDED", readingProgress: try $0.readingProgressPercent(), @@ -164,6 +165,7 @@ private let libraryArticleSelection = Selection.Article { title: try $0.title(), createdAt: try $0.createdAt().value ?? Date(), savedAt: try $0.savedAt().value ?? Date(), + readAt: try $0.readAt()?.value, updatedAt: try $0.updatedAt().value ?? Date(), state: try $0.state()?.rawValue ?? "SUCCEEDED", readingProgress: try $0.readingProgressPercent(), diff --git a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift index f5f089fd7..dde255691 100644 --- a/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift +++ b/apple/OmnivoreKit/Sources/Services/InternalModels/InternalLinkedItem.swift @@ -7,6 +7,7 @@ struct InternalLinkedItem { let title: String let createdAt: Date let savedAt: Date + let readAt: Date? let updatedAt: Date let state: String var readingProgress: Double @@ -42,6 +43,7 @@ struct InternalLinkedItem { linkedItem.createdAt = createdAt linkedItem.savedAt = savedAt linkedItem.updatedAt = updatedAt + linkedItem.readAt = readAt linkedItem.state = state linkedItem.readingProgress = readingProgress linkedItem.readingProgressAnchor = Int64(readingProgressAnchor) @@ -53,6 +55,7 @@ struct InternalLinkedItem { linkedItem.siteName = siteName linkedItem.author = author linkedItem.publishDate = publishDate + linkedItem.readAt = readAt linkedItem.slug = slug linkedItem.isArchived = isArchived linkedItem.contentReader = contentReader @@ -99,6 +102,7 @@ extension JSONArticle { title: title, createdAt: createdAt, savedAt: savedAt, + readAt: readAt, updatedAt: updatedAt, state: "SUCCEEDED", readingProgress: readingProgressPercent,