From 23af75594def410249cd6dc08f7a033c662226a7 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 25 Nov 2022 14:04:22 +0800 Subject: [PATCH] Reduce max sync amount, defer after the second sync --- .../App/Views/Home/HomeFeedViewModel.swift | 5 ++-- .../Public/LinkedItemLoading.swift | 27 ++++++++++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index 9ea1fc1b1..a1b9914b8 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -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 diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift b/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift index 70806fdfe..0c7b8f447 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift @@ -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