From a4bbf659442d1d97ea3709a01aa61e46ce169c1c Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 25 Feb 2020 10:42:56 -0800 Subject: [PATCH] Coalesce unread count backing store rebuilds to prevent feeds list flickering while syncing and the feeds filter is engaged. (Regression) --- iOS/SceneCoordinator.swift | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 254e63ba9..5df9e65ab 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -61,6 +61,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { private var wasRootSplitViewControllerCollapsed = false private let fetchAndMergeArticlesQueue = CoalescingQueue(name: "Fetch and Merge Articles", interval: 0.5) + private let rebuildBackingStoresWithMergeQueue = CoalescingQueue(name: "Rebuild The Backing Stores by Merging", interval: 0.5) private var fetchSerialNumber = 0 private let fetchRequestQueue = FetchRequestQueue() @@ -445,9 +446,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { return } - addShadowTableToFilterExceptions() - rebuildBackingStores() - treeControllerDelegate.resetFilterExceptions() + rebuildBackingStoresWithMergeQueue.add(self, #selector(rebuildBackingStoresWithMerge)) } @objc func statusesDidChange(_ note: Notification) { @@ -569,6 +568,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { func suspend() { fetchAndMergeArticlesQueue.performCallsImmediately() + rebuildBackingStoresWithMergeQueue.performCallsImmediately() fetchRequestQueue.cancelAllRequests() } @@ -1362,6 +1362,12 @@ private extension SceneCoordinator { } } + @objc func rebuildBackingStoresWithMerge() { + addShadowTableToFilterExceptions() + rebuildBackingStores() + treeControllerDelegate.resetFilterExceptions() + } + func rebuildShadowTable() { shadowTable = [[Node]]()