Fix regression that broke state restoration on the iPhone

This commit is contained in:
Maurice Parker 2021-09-15 05:05:58 -05:00
parent 25946f3c5a
commit 5299134e01

View File

@ -170,7 +170,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
// * Once the article has loaded, navigate to the iPad home screen // * Once the article has loaded, navigate to the iPad home screen
// * While in landscape, select a feed and then select an article // * While in landscape, select a feed and then select an article
// * Install a fresh build of NNW to an iPad simulator (11 or 12.9' will do) running iPadOS 15 // * Install a fresh build of NNW to an iPad simulator (11 or 12.9' will do) running iPadOS 15
private var deferredFeedAndArticleSelect: (feedIndexPath: IndexPath, articleID: String)? private var deferredFeedAndArticleSelect: (feedIdentifier: FeedIdentifier, articleID: String)?
var timelineMiddleIndexPath: IndexPath? var timelineMiddleIndexPath: IndexPath?
@ -451,14 +451,14 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
guard notification.object is AccountManager else { guard notification.object is AccountManager else {
return return
} }
rebuildBackingStores(initialLoad: true)
treeControllerDelegate.resetFilterExceptions()
if let (feedIndexPath, articleID) = deferredFeedAndArticleSelect { rebuildBackingStores(initialLoad: true, completion: {
selectFeed(indexPath: feedIndexPath) { if let (feedIdentifier, articleID) = self.deferredFeedAndArticleSelect, let feedNode = self.nodeFor(feedID: feedIdentifier), let feedIndexPath = self.indexPathFor(feedNode) {
self.selectArticleInCurrentFeed(articleID) self.selectFeed(indexPath: feedIndexPath) {
self.selectArticleInCurrentFeed(articleID)
}
} }
} })
} }
@objc func unreadCountDidChange(_ note: Notification) { @objc func unreadCountDidChange(_ note: Notification) {
@ -2243,25 +2243,18 @@ private extension SceneCoordinator {
case .script: case .script:
return false return false
case .folder(let accountID, let folderName): case .folder:
guard let accountNode = findAccountNode(accountID: accountID), let found = selectFeedAndArticle(feedIdentifier: feedIdentifier, articleID: articleID)
let folderNode = findFolderNode(folderName: folderName, beginningAt: accountNode) else {
return false
}
let found = selectFeedAndArticle(feedNode: folderNode, articleID: articleID)
if found { if found {
treeControllerDelegate.addFilterException(feedIdentifier) treeControllerDelegate.addFilterException(feedIdentifier)
} }
return found return found
case .webFeed: case .webFeed:
guard let accountNode = findAccountNode(accountID: accountID), let webFeedNode = findWebFeedNode(webFeedID: webFeedID, beginningAt: accountNode) else { let found = selectFeedAndArticle(feedIdentifier: feedIdentifier, articleID: articleID)
return false
}
let found = selectFeedAndArticle(feedNode: webFeedNode, articleID: articleID)
if found { if found {
treeControllerDelegate.addFilterException(feedIdentifier) treeControllerDelegate.addFilterException(feedIdentifier)
if let folder = webFeedNode.parent?.representedObject as? Folder, let folderFeedID = folder.feedID { if let webFeedNode = nodeFor(feedID: feedIdentifier), let folder = webFeedNode.parent?.representedObject as? Folder, let folderFeedID = folder.feedID {
treeControllerDelegate.addFilterException(folderFeedID) treeControllerDelegate.addFilterException(folderFeedID)
} }
} }
@ -2298,12 +2291,18 @@ private extension SceneCoordinator {
return nil return nil
} }
func selectFeedAndArticle(feedNode: Node, articleID: String) -> Bool { func selectFeedAndArticle(feedIdentifier: FeedIdentifier, articleID: String) -> Bool {
if let feedIndexPath = indexPathFor(feedNode) { guard let feedNode = nodeFor(feedID: feedIdentifier), let feedIndexPath = indexPathFor(feedNode) else { return false }
deferredFeedAndArticleSelect = (feedIndexPath, articleID)
return true if AccountManager.shared.isUnreadCountsInitialized {
selectFeed(indexPath: feedIndexPath) {
self.selectArticleInCurrentFeed(articleID)
}
} else {
deferredFeedAndArticleSelect = (feedIdentifier, articleID)
} }
return false
return true
} }
} }