diff --git a/Account/Sources/Account/AccountManager.swift b/Account/Sources/Account/AccountManager.swift index 6731e2835..cdda3e390 100644 --- a/Account/Sources/Account/AccountManager.swift +++ b/Account/Sources/Account/AccountManager.swift @@ -246,7 +246,7 @@ public final class AccountManager: UnreadCountProvider { return } - combinedRefreshProgress.reset() + combinedRefreshProgress.start() let group = DispatchGroup() @@ -264,7 +264,7 @@ public final class AccountManager: UnreadCountProvider { } group.notify(queue: DispatchQueue.main) { - self.combinedRefreshProgress.reset() + self.combinedRefreshProgress.stop() completion?() } } diff --git a/Account/Sources/Account/CombinedRefreshProgress.swift b/Account/Sources/Account/CombinedRefreshProgress.swift index db2d298e2..91eaed1c5 100644 --- a/Account/Sources/Account/CombinedRefreshProgress.swift +++ b/Account/Sources/Account/CombinedRefreshProgress.swift @@ -22,29 +22,32 @@ public final class CombinedRefreshProgress { public private(set) var numberCompleted = 0 public var isComplete: Bool { - numberRemaining < 1 + !isStarted || numberRemaining < 1 } + var isStarted = false + init() { NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .DownloadProgressDidChange, object: nil) } - func reset() { + func start() { + reset() + isStarted = true + } - let didMakeChange = numberOfTasks != 0 || numberRemaining != 0 || numberCompleted != 0 - - numberOfTasks = 0 - numberRemaining = 0 - numberCompleted = 0 - - if didMakeChange { - postDidChangeNotification() - } + func stop() { + reset() + isStarted = false } @objc func refreshProgressDidChange(_ notification: Notification) { + guard isStarted else { + return + } + var updatedNumberOfTasks = 0 var updatedNumberRemaining = 0 var updatedNumberCompleted = 0 @@ -87,6 +90,19 @@ public final class CombinedRefreshProgress { private extension CombinedRefreshProgress { + func reset() { + + let didMakeChange = numberOfTasks != 0 || numberRemaining != 0 || numberCompleted != 0 + + numberOfTasks = 0 + numberRemaining = 0 + numberCompleted = 0 + + if didMakeChange { + postDidChangeNotification() + } + } + func postDidChangeNotification() { NotificationCenter.default.post(name: .combinedRefreshProgressDidChange, object: self) diff --git a/iOS/MasterFeed/RefreshProgressView.swift b/iOS/MasterFeed/RefreshProgressView.swift index 6c20ce95d..937ab8345 100644 --- a/iOS/MasterFeed/RefreshProgressView.swift +++ b/iOS/MasterFeed/RefreshProgressView.swift @@ -15,7 +15,8 @@ class RefreshProgressView: UIView { @IBOutlet weak var label: UILabel! override func awakeFromNib() { - NotificationCenter.default.addObserver(self, selector: #selector(progressDidChange(_:)), name: .AccountRefreshProgressDidChange, object: nil) + + NotificationCenter.default.addObserver(self, selector: #selector(progressDidChange(_:)), name: .combinedRefreshProgressDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(contentSizeCategoryDidChange(_:)), name: UIContentSizeCategory.didChangeNotification, object: nil) update() scheduleUpdateRefreshLabel()