From aebd3a910d7a4996be030015c244959e3ba07902 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Wed, 26 Jan 2022 23:13:20 -0500 Subject: [PATCH] Don't start a second sync while syncing is already in progress --- Reader/FervorController.swift | 12 ++++++++---- Reader/Screens/Home/HomeViewController.swift | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Reader/FervorController.swift b/Reader/FervorController.swift index c5dfb8d..b150edd 100644 --- a/Reader/FervorController.swift +++ b/Reader/FervorController.swift @@ -26,7 +26,7 @@ class FervorController { private(set) var persistentContainer: PersistentContainer! - let syncStateSubject = PassthroughSubject() + @Published private(set) var syncState = SyncState.done init(instanceURL: URL) { self.instanceURL = instanceURL @@ -47,7 +47,7 @@ class FervorController { private func setSyncState(_ state: SyncState) { DispatchQueue.main.async { - self.syncStateSubject.send(state) + self.syncState = state } } @@ -65,6 +65,12 @@ class FervorController { } func syncAll() async throws { + guard syncState == .done else { + return + } + // always return to .done, even if we throw and stop syncing early + defer { setSyncState(.done) } + setSyncState(.groupsAndFeeds) logger.info("Syncing groups and feeds") @@ -82,8 +88,6 @@ class FervorController { setSyncState(.excerpts) await ExcerptGenerator.generateAll(self) - - setSyncState(.done) } @MainActor diff --git a/Reader/Screens/Home/HomeViewController.swift b/Reader/Screens/Home/HomeViewController.swift index b93f3d6..1c83bd4 100644 --- a/Reader/Screens/Home/HomeViewController.swift +++ b/Reader/Screens/Home/HomeViewController.swift @@ -93,7 +93,7 @@ class HomeViewController: UIViewController { feedResultsController.delegate = self try! feedResultsController.performFetch() - fervorController.syncStateSubject + fervorController.$syncState .debounce(for: .milliseconds(250), scheduler: RunLoop.main, options: nil) .sink { [unowned self] in self.syncStateChanged($0)