From f013408cf758f810dc8dddec41a37c19e51e2d51 Mon Sep 17 00:00:00 2001 From: Sixten Otto Date: Tue, 21 Feb 2023 09:02:40 -0700 Subject: [PATCH] hide String serialization of lastItemSyncTime --- .../App/Views/Home/HomeFeedViewModel.swift | 6 ++---- .../Services/DataService/DataService.swift | 21 +++++++++++++++---- .../Public/LinkedItemLoading.swift | 2 +- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift index c1489b2cd..252235ddd 100644 --- a/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift +++ b/apple/OmnivoreKit/Sources/App/Views/Home/HomeFeedViewModel.swift @@ -6,8 +6,6 @@ import Utils import Views @MainActor final class HomeFeedViewModel: NSObject, ObservableObject { - let dateFormatter = DateFormatter.formatterISO8601 - var currentDetailViewModel: LinkItemDetailViewModel? private var fetchedResultsController: NSFetchedResultsController? @@ -110,7 +108,7 @@ import Views func syncItems(dataService: DataService) async { let syncStart = Date.now - let lastSyncDate = dateFormatter.date(from: dataService.lastItemSyncTime) ?? Date(timeIntervalSinceReferenceDate: 0) + let lastSyncDate = dataService.lastItemSyncTime try? await dataService.syncOfflineItemsWithServerIfNeeded() @@ -124,7 +122,7 @@ import Views self.isLoading = false } } else { - dataService.lastItemSyncTime = DateFormatter.formatterISO8601.string(from: syncStart) + dataService.lastItemSyncTime = syncStart } // If possible start prefetching new pages in the background diff --git a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift index 333772a52..f878806bf 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/DataService.swift @@ -29,9 +29,22 @@ public final class DataService: ObservableObject { persistentContainer.viewContext } - @AppStorage(UserDefaultKey.lastItemSyncTime.rawValue) public var lastItemSyncTime: String = { - DateFormatter.formatterISO8601.string(from: Date(timeIntervalSinceReferenceDate: 0)) - }() + public var lastItemSyncTime: Date { + get { + guard + let str = UserDefaults.standard.string(forKey: UserDefaultKey.lastItemSyncTime.rawValue), + let date = DateFormatter.formatterISO8601.date(from: str) + else { + return Date(timeIntervalSinceReferenceDate: 0) + } + return date + } + set { + logger.trace("last item sync updated to \(newValue)") + let str = DateFormatter.formatterISO8601.string(from: newValue) + UserDefaults.standard.set(str, forKey: UserDefaultKey.lastItemSyncTime.rawValue) + } + } public init(appEnvironment: AppEnvironment, networker: Networker) { self.appEnvironment = appEnvironment @@ -150,7 +163,7 @@ public final class DataService: ObservableObject { } public func resetLocalStorage() { - lastItemSyncTime = DateFormatter.formatterISO8601.string(from: Date(timeIntervalSinceReferenceDate: 0)) + lastItemSyncTime = Date(timeIntervalSinceReferenceDate: 0) clearCoreData() clearDownloadedFiles() diff --git a/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift b/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift index ad776f9ce..a4d68bdce 100644 --- a/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift +++ b/apple/OmnivoreKit/Sources/Services/DataService/Public/LinkedItemLoading.swift @@ -93,7 +93,7 @@ public extension DataService { } } DispatchQueue.main.sync { - self.lastItemSyncTime = DateFormatter.formatterISO8601.string(from: Date.now) + self.lastItemSyncTime = Date.now onComplete() } }