Replace coalescing queue and other items with Combine
This commit is contained in:
parent
e315687cc9
commit
e8742306ad
@ -27,17 +27,12 @@ class SidebarModel: ObservableObject, UndoableCommandRunner {
|
|||||||
|
|
||||||
private var cancellables = Set<AnyCancellable>()
|
private var cancellables = Set<AnyCancellable>()
|
||||||
|
|
||||||
private let rebuildSidebarItemsQueue = CoalescingQueue(name: "Rebuild The Sidebar Items", interval: 0.5)
|
|
||||||
|
|
||||||
var undoManager: UndoManager?
|
var undoManager: UndoManager?
|
||||||
var undoableCommands = [UndoableCommand]()
|
var undoableCommands = [UndoableCommand]()
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
subscribeToUnreadCountInitialization()
|
|
||||||
subscribeToUnreadCountChanges()
|
|
||||||
subscribeToRebuildSidebarItemsEvents()
|
subscribeToRebuildSidebarItemsEvents()
|
||||||
subscribeToSelectedFeedChanges()
|
subscribeToSelectedFeedChanges()
|
||||||
subscribeToReadFilterChanges()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: API
|
// MARK: API
|
||||||
@ -60,23 +55,6 @@ private extension SidebarModel {
|
|||||||
|
|
||||||
// MARK: Subscriptions
|
// MARK: Subscriptions
|
||||||
|
|
||||||
func subscribeToUnreadCountInitialization() {
|
|
||||||
NotificationCenter.default.publisher(for: .UnreadCountDidInitialize)
|
|
||||||
.filter { $0.object is AccountManager }
|
|
||||||
.sink { [weak self] note in
|
|
||||||
guard let self = self else { return }
|
|
||||||
self.rebuildSidebarItems(isReadFiltered: self.isReadFiltered)
|
|
||||||
}.store(in: &cancellables)
|
|
||||||
}
|
|
||||||
|
|
||||||
func subscribeToUnreadCountChanges() {
|
|
||||||
NotificationCenter.default.publisher(for: .UnreadCountDidChange)
|
|
||||||
.filter { _ in AccountManager.shared.isUnreadCountsInitialized }
|
|
||||||
.sink { [weak self] _ in
|
|
||||||
self?.queueRebuildSidebarItems()
|
|
||||||
}.store(in: &cancellables)
|
|
||||||
}
|
|
||||||
|
|
||||||
func subscribeToRebuildSidebarItemsEvents() {
|
func subscribeToRebuildSidebarItemsEvents() {
|
||||||
let chidrenDidChangePublisher = NotificationCenter.default.publisher(for: .ChildrenDidChange)
|
let chidrenDidChangePublisher = NotificationCenter.default.publisher(for: .ChildrenDidChange)
|
||||||
let batchUpdateDidPerformPublisher = NotificationCenter.default.publisher(for: .BatchUpdateDidPerform)
|
let batchUpdateDidPerformPublisher = NotificationCenter.default.publisher(for: .BatchUpdateDidPerform)
|
||||||
@ -84,16 +62,22 @@ private extension SidebarModel {
|
|||||||
let accountStateDidChangePublisher = NotificationCenter.default.publisher(for: .AccountStateDidChange)
|
let accountStateDidChangePublisher = NotificationCenter.default.publisher(for: .AccountStateDidChange)
|
||||||
let userDidAddAccountPublisher = NotificationCenter.default.publisher(for: .UserDidAddAccount)
|
let userDidAddAccountPublisher = NotificationCenter.default.publisher(for: .UserDidAddAccount)
|
||||||
let userDidDeleteAccountPublisher = NotificationCenter.default.publisher(for: .UserDidDeleteAccount)
|
let userDidDeleteAccountPublisher = NotificationCenter.default.publisher(for: .UserDidDeleteAccount)
|
||||||
|
let unreadCountDidInitializePublisher = NotificationCenter.default.publisher(for: .UnreadCountDidInitialize)
|
||||||
|
let unreadCountDidChangePublisher = NotificationCenter.default.publisher(for: .UnreadCountDidChange)
|
||||||
|
|
||||||
let sidebarRebuildPublishers = chidrenDidChangePublisher.merge(with: batchUpdateDidPerformPublisher,
|
let sidebarRebuildPublishers = chidrenDidChangePublisher.merge(with: batchUpdateDidPerformPublisher,
|
||||||
displayNameDidChangePublisher,
|
displayNameDidChangePublisher,
|
||||||
accountStateDidChangePublisher,
|
accountStateDidChangePublisher,
|
||||||
userDidAddAccountPublisher,
|
userDidAddAccountPublisher,
|
||||||
userDidDeleteAccountPublisher)
|
userDidDeleteAccountPublisher,
|
||||||
|
unreadCountDidInitializePublisher,
|
||||||
|
unreadCountDidChangePublisher)
|
||||||
|
|
||||||
sidebarRebuildPublishers.sink { [weak self] _ in
|
sidebarRebuildPublishers
|
||||||
guard let self = self else { return }
|
.combineLatest($isReadFiltered)
|
||||||
self.rebuildSidebarItems(isReadFiltered: self.isReadFiltered)
|
.debounce(for: .milliseconds(500), scheduler: RunLoop.main)
|
||||||
|
.sink { [weak self] _, readFilter in
|
||||||
|
self?.rebuildSidebarItems(isReadFiltered: readFilter)
|
||||||
}.store(in: &cancellables)
|
}.store(in: &cancellables)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,12 +97,6 @@ private extension SidebarModel {
|
|||||||
.assign(to: $selectedFeeds)
|
.assign(to: $selectedFeeds)
|
||||||
}
|
}
|
||||||
|
|
||||||
func subscribeToReadFilterChanges() {
|
|
||||||
$isReadFiltered.sink { [weak self] filter in
|
|
||||||
self?.rebuildSidebarItems(isReadFiltered: filter)
|
|
||||||
}.store(in: &cancellables)
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: Sidebar Building
|
// MARK: Sidebar Building
|
||||||
|
|
||||||
func sort(_ folders: Set<Folder>) -> [Folder] {
|
func sort(_ folders: Set<Folder>) -> [Folder] {
|
||||||
@ -129,14 +107,6 @@ private extension SidebarModel {
|
|||||||
return feeds.sorted(by: { $0.nameForDisplay.localizedStandardCompare($1.nameForDisplay) == .orderedAscending })
|
return feeds.sorted(by: { $0.nameForDisplay.localizedStandardCompare($1.nameForDisplay) == .orderedAscending })
|
||||||
}
|
}
|
||||||
|
|
||||||
func queueRebuildSidebarItems() {
|
|
||||||
rebuildSidebarItemsQueue.add(self, #selector(rebuildSidebarItemsWithCurrentValues))
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc func rebuildSidebarItemsWithCurrentValues() {
|
|
||||||
rebuildSidebarItems(isReadFiltered: isReadFiltered)
|
|
||||||
}
|
|
||||||
|
|
||||||
func rebuildSidebarItems(isReadFiltered: Bool) {
|
func rebuildSidebarItems(isReadFiltered: Bool) {
|
||||||
guard let delegate = delegate else { return }
|
guard let delegate = delegate else { return }
|
||||||
var items = [SidebarItem]()
|
var items = [SidebarItem]()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user