Merge pull request #1465 from omnivore-app/feat/sync-sort-order

feat/sync sort order
This commit is contained in:
Jackson Harper 2022-11-25 14:16:07 +08:00 committed by GitHub
commit 42a4f22c4b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 1465 additions and 14 deletions

View file

@ -105,7 +105,9 @@ import Views
func syncItems(dataService: DataService, syncStartTime: Date) async {
let lastSyncDate = dateFormatter.date(from: dataService.lastItemSyncTime) ?? Date(timeIntervalSinceReferenceDate: 0)
let syncResult = try? await dataService.syncLinkedItems(since: lastSyncDate, cursor: nil)
let syncResult = try? await dataService.syncLinkedItems(since: lastSyncDate,
cursor: nil,
deferFetchingMore: true)
if syncResult != nil {
dataService.lastItemSyncTime = dateFormatter.string(from: syncStartTime)
@ -169,7 +171,6 @@ import Views
func loadItems(dataService: DataService, audioController _: AudioController, isRefresh: Bool) async {
let syncStartTime = Date()
let start = CFAbsoluteTimeGetCurrent()
isLoading = true
showLoadingBar = true
@ -186,9 +187,9 @@ import Views
// For now we are forcing the search because we are fetching items in reverse
// with the sync API, but search fetches in descending order
// if appliedFilter != LinkedItemFilter.inbox.rawValue {
await loadSearchQuery(dataService: dataService, isRefresh: isRefresh)
// }
if appliedFilter != LinkedItemFilter.inbox.rawValue {
await loadSearchQuery(dataService: dataService, isRefresh: isRefresh)
}
} else {
await loadSearchQuery(dataService: dataService, isRefresh: isRefresh)
}

File diff suppressed because it is too large Load diff

View file

@ -14,7 +14,8 @@ public extension DataService {
func syncLinkedItems(
since date: Date,
cursor: String?,
previousQueryResult: LinkedItemSyncResult? = nil
previousQueryResult: LinkedItemSyncResult? = nil,
deferFetchingMore: Bool
) async throws -> LinkedItemSyncResult? {
if previousQueryResult == nil {
// Send offline changes to server before fetching items
@ -36,12 +37,24 @@ public extension DataService {
cursor: fetchResult.cursor
)
if fetchResult.hasMoreItems, (previousQueryResult?.updatedItemIDs.count ?? 0) < 200 {
return try await syncLinkedItems(
since: date,
cursor: fetchResult.cursor,
previousQueryResult: result
)
if fetchResult.hasMoreItems, (previousQueryResult?.updatedItemIDs.count ?? 0) < 40 {
if deferFetchingMore {
Task.detached(priority: .background) {
try await self.syncLinkedItems(
since: date,
cursor: fetchResult.cursor,
previousQueryResult: result,
deferFetchingMore: deferFetchingMore
)
}
} else {
return try await syncLinkedItems(
since: date,
cursor: fetchResult.cursor,
previousQueryResult: result,
deferFetchingMore: deferFetchingMore
)
}
}
return result

View file

@ -62,11 +62,14 @@ extension DataService {
)
}
let sort = InputObjects.SortParams(by: Enums.SortBy.savedAt, order: OptionalArgument(Enums.SortOrder.descending))
let query = Selection.Query {
try $0.updatesSince(
after: OptionalArgument(cursor),
first: OptionalArgument(limit),
since: DateTime(from: since),
sort: OptionalArgument(sort),
selection: selection
)
}