Enable add feed for multiple accounts

This commit is contained in:
Maurice Parker 2019-05-01 14:03:59 -05:00
parent 93630a7b72
commit 6ede5b7c3d
3 changed files with 50 additions and 24 deletions

View File

@ -17,12 +17,22 @@ class FolderTreeMenu {
let menu = NSMenu(title: "Folders") let menu = NSMenu(title: "Folders")
let menuItem = NSMenuItem(title: NSLocalizedString("Top Level", comment: "Add Feed Sheet"), action: nil, keyEquivalent: "") for childNode in rootNode.childNodes {
menuItem.representedObject = rootNode.representedObject
menu.addItem(menuItem) guard let nameProvider = childNode.representedObject as? DisplayNameProvider else {
continue
}
let menuItem = NSMenuItem(title: nameProvider.nameForDisplay, action: nil, keyEquivalent: "")
menuItem.representedObject = childNode.representedObject
menu.addItem(menuItem)
let childNodes = childNode.childNodes
addFolderItemsToMenuWithNodes(menu: menu, nodes: childNodes, indentationLevel: 1)
}
let childNodes = rootNode.childNodes
addFolderItemsToMenuWithNodes(menu: menu, nodes: childNodes, indentationLevel: 1)
return menu return menu
} }

View File

@ -16,7 +16,7 @@ final class FolderTreeControllerDelegate: TreeControllerDelegate {
func treeController(treeController: TreeController, childNodesFor node: Node) -> [Node]? { func treeController(treeController: TreeController, childNodesFor node: Node) -> [Node]? {
return node.isRoot ? childNodesForRootNode(node) : nil return node.isRoot ? childNodesForRootNode(node) : childNodes(node)
} }
} }
@ -24,20 +24,30 @@ private extension FolderTreeControllerDelegate {
func childNodesForRootNode(_ node: Node) -> [Node]? { func childNodesForRootNode(_ node: Node) -> [Node]? {
// Root node is Top Level and children are folders. Folders cant have subfolders. let accountNodes: [Node] = AccountManager.shared.accounts.map { account in
// This will have to be revised later. let accountNode = Node(representedObject: account, parent: node)
accountNode.canHaveChildNodes = true
return accountNode
}
return accountNodes.sortedAlphabetically()
guard let folders = AccountManager.shared.defaultAccount.folders else { }
func childNodes(_ node: Node) -> [Node]? {
guard let account = node.representedObject as? Account, let folders = account.folders else {
return nil return nil
} }
let folderNodes = folders.map { createNode($0, parent: node) }
let folderNodes: [Node] = folders.map { createNode($0, parent: node) }
return folderNodes.sortedAlphabetically() return folderNodes.sortedAlphabetically()
} }
func createNode(_ folder: Folder, parent: Node) -> Node { func createNode(_ folder: Folder, parent: Node) -> Node {
let node = Node(representedObject: folder, parent: parent) let node = Node(representedObject: folder, parent: parent)
node.canHaveChildNodes = false node.canHaveChildNodes = false
return node return node
} }
} }

View File

@ -25,21 +25,27 @@ struct AddFeedFolderPickerData {
rootNode.canHaveChildNodes = true rootNode.canHaveChildNodes = true
let treeController = TreeController(delegate: treeControllerDelegate, rootNode: rootNode) let treeController = TreeController(delegate: treeControllerDelegate, rootNode: rootNode)
guard let rootNameProvider = treeController.rootNode.representedObject as? DisplayNameProvider else {
return
}
let rootName = rootNameProvider.nameForDisplay
containerNames.append(rootName)
containers.append(treeController.rootNode.representedObject as! Container)
treeController.rootNode.childNodes.forEach { node in treeController.rootNode.childNodes.forEach { node in
guard let childContainer = node.representedObject as? Container else {
guard let acctNameProvider = node.representedObject as? DisplayNameProvider else {
return return
} }
let childName = (childContainer as! DisplayNameProvider).nameForDisplay
containerNames.append("\(rootName) / \(childName)") let acctName = acctNameProvider.nameForDisplay
containers.append(childContainer) containerNames.append(acctName)
containers.append(node.representedObject as! Container)
for child in node.childNodes {
guard let childContainer = child.representedObject as? Container else {
return
}
let childName = (childContainer as! DisplayNameProvider).nameForDisplay
containerNames.append("\(acctName) / \(childName)")
containers.append(childContainer)
}
} }
} }