Fix hanging progress indicator in Feeds view on iOS.

This commit is contained in:
Brent Simmons
2024-12-09 22:20:38 -08:00
parent 4b4cc1dfd2
commit ad8c7706d8
3 changed files with 31 additions and 14 deletions

View File

@@ -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?()
}
}

View File

@@ -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)

View File

@@ -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()