Don't start a second sync while syncing is already in progress
This commit is contained in:
parent
9f9a214b0a
commit
aebd3a910d
|
@ -26,7 +26,7 @@ class FervorController {
|
||||||
|
|
||||||
private(set) var persistentContainer: PersistentContainer!
|
private(set) var persistentContainer: PersistentContainer!
|
||||||
|
|
||||||
let syncStateSubject = PassthroughSubject<SyncState, Never>()
|
@Published private(set) var syncState = SyncState.done
|
||||||
|
|
||||||
init(instanceURL: URL) {
|
init(instanceURL: URL) {
|
||||||
self.instanceURL = instanceURL
|
self.instanceURL = instanceURL
|
||||||
|
@ -47,7 +47,7 @@ class FervorController {
|
||||||
|
|
||||||
private func setSyncState(_ state: SyncState) {
|
private func setSyncState(_ state: SyncState) {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
self.syncStateSubject.send(state)
|
self.syncState = state
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +65,12 @@ class FervorController {
|
||||||
}
|
}
|
||||||
|
|
||||||
func syncAll() async throws {
|
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)
|
setSyncState(.groupsAndFeeds)
|
||||||
|
|
||||||
logger.info("Syncing groups and feeds")
|
logger.info("Syncing groups and feeds")
|
||||||
|
@ -82,8 +88,6 @@ class FervorController {
|
||||||
|
|
||||||
setSyncState(.excerpts)
|
setSyncState(.excerpts)
|
||||||
await ExcerptGenerator.generateAll(self)
|
await ExcerptGenerator.generateAll(self)
|
||||||
|
|
||||||
setSyncState(.done)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@MainActor
|
@MainActor
|
||||||
|
|
|
@ -93,7 +93,7 @@ class HomeViewController: UIViewController {
|
||||||
feedResultsController.delegate = self
|
feedResultsController.delegate = self
|
||||||
try! feedResultsController.performFetch()
|
try! feedResultsController.performFetch()
|
||||||
|
|
||||||
fervorController.syncStateSubject
|
fervorController.$syncState
|
||||||
.debounce(for: .milliseconds(250), scheduler: RunLoop.main, options: nil)
|
.debounce(for: .milliseconds(250), scheduler: RunLoop.main, options: nil)
|
||||||
.sink { [unowned self] in
|
.sink { [unowned self] in
|
||||||
self.syncStateChanged($0)
|
self.syncStateChanged($0)
|
||||||
|
|
Loading…
Reference in New Issue