mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
use readAt property to sort recently read items
This commit is contained in:
parent
8ddfc5c72a
commit
5ec248a86c
7 changed files with 20 additions and 7 deletions
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="20086" systemVersion="21F79" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="20086" systemVersion="21A559" minimumToolsVersion="Automatic" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
||||
<entity name="Highlight" representedClassName="Highlight" syncable="YES" codeGenerationType="class">
|
||||
<attribute name="annotation" optional="YES" attributeType="String"/>
|
||||
<attribute name="createdAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
|
|
@ -37,6 +37,7 @@
|
|||
<attribute name="pdfData" optional="YES" attributeType="Binary"/>
|
||||
<attribute name="publishDate" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="publisherURLString" optional="YES" attributeType="String"/>
|
||||
<attribute name="readAt" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="readingProgress" attributeType="Double" defaultValueString="0.0" usesScalarValueType="YES"/>
|
||||
<attribute name="readingProgressAnchor" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
<attribute name="savedAt" attributeType="Date" usesScalarValueType="NO"/>
|
||||
|
|
@ -92,7 +93,7 @@
|
|||
</entity>
|
||||
<elements>
|
||||
<element name="Highlight" positionX="27" positionY="225" width="128" height="224"/>
|
||||
<element name="LinkedItem" positionX="-18" positionY="63" width="128" height="449"/>
|
||||
<element name="LinkedItem" positionX="-18" positionY="63" width="128" height="464"/>
|
||||
<element name="LinkedItemLabel" positionX="-36" positionY="18" width="128" height="134"/>
|
||||
<element name="NewsletterEmail" positionX="0" positionY="180" width="128" height="74"/>
|
||||
<element name="Viewer" positionX="45" positionY="234" width="128" height="89"/>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue