From 55be38269f88dd03601e49996522e47ebb90db0e Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 19 Nov 2017 12:59:37 -0800 Subject: [PATCH] Treat Folder and Account as Container in SidebarTreeControllerDelegate. Also: add pseudo feeds. --- .../SidebarTreeControllerDelegate.swift | 28 +++++++------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/Evergreen/MainWindow/Sidebar/SidebarTreeControllerDelegate.swift b/Evergreen/MainWindow/Sidebar/SidebarTreeControllerDelegate.swift index 8d6027adb..66496ab4d 100644 --- a/Evergreen/MainWindow/Sidebar/SidebarTreeControllerDelegate.swift +++ b/Evergreen/MainWindow/Sidebar/SidebarTreeControllerDelegate.swift @@ -18,13 +18,10 @@ final class SidebarTreeControllerDelegate: TreeControllerDelegate { if node.isRoot { return childNodesForRootNode(node) } - if node.representedObject is Folder { - return childNodesForFolderNode(node) + if node.representedObject is Container { + return childNodesForContainerNode(node) } - if node.representedObject is Account { - return childNodesForAccount(node) - } - + return nil } } @@ -34,28 +31,23 @@ private extension SidebarTreeControllerDelegate { func childNodesForRootNode(_ rootNode: Node) -> [Node]? { // The top-level nodes are pseudo-feeds (All Unread, Starred, etc.) and accounts. - // TODO: pseudo-feeds - return sortedAccountNodes(rootNode) + return pseudoFeedNodes(rootNode) + sortedAccountNodes(rootNode) } - func childNodesForAccount(_ accountNode: Node) -> [Node]? { + func pseudoFeedNodes(_ rootNode: Node) -> [Node] { - let account = accountNode.representedObject as! Account - return childNodesForContainerNode(accountNode, account.children) + // The appDelegate’s pseudoFeeds are already sorted properly. + return appDelegate.pseudoFeeds.map { rootNode.createChildNode($0) } } - func childNodesForFolderNode(_ folderNode: Node) -> [Node]? { + func childNodesForContainerNode(_ containerNode: Node) -> [Node]? { - let folder = folderNode.representedObject as! Folder - return childNodesForContainerNode(folderNode, folder.children) - } - - func childNodesForContainerNode(_ containerNode: Node, _ children: [AnyObject]) -> [Node]? { + let container = containerNode.representedObject as! Container var updatedChildNodes = [Node]() - children.forEach { (representedObject) in + container.children.forEach { (representedObject) in if let existingNode = containerNode.childNodeRepresentingObject(representedObject) { if !updatedChildNodes.contains(existingNode) {