Enable add feed for multiple accounts
This commit is contained in:
parent
93630a7b72
commit
6ede5b7c3d
@ -17,13 +17,23 @@ 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
|
|
||||||
|
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)
|
menu.addItem(menuItem)
|
||||||
|
|
||||||
let childNodes = rootNode.childNodes
|
let childNodes = childNode.childNodes
|
||||||
addFolderItemsToMenuWithNodes(menu: menu, nodes: childNodes, indentationLevel: 1)
|
addFolderItemsToMenuWithNodes(menu: menu, nodes: childNodes, indentationLevel: 1)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return menu
|
return menu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 can’t 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
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
treeController.rootNode.childNodes.forEach { node in
|
||||||
|
|
||||||
|
guard let acctNameProvider = node.representedObject as? DisplayNameProvider else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let rootName = rootNameProvider.nameForDisplay
|
let acctName = acctNameProvider.nameForDisplay
|
||||||
containerNames.append(rootName)
|
containerNames.append(acctName)
|
||||||
containers.append(treeController.rootNode.representedObject as! Container)
|
containers.append(node.representedObject as! Container)
|
||||||
|
|
||||||
treeController.rootNode.childNodes.forEach { node in
|
for child in node.childNodes {
|
||||||
guard let childContainer = node.representedObject as? Container else {
|
|
||||||
|
guard let childContainer = child.representedObject as? Container else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let childName = (childContainer as! DisplayNameProvider).nameForDisplay
|
let childName = (childContainer as! DisplayNameProvider).nameForDisplay
|
||||||
containerNames.append("\(rootName) / \(childName)")
|
containerNames.append("\(acctName) / \(childName)")
|
||||||
containers.append(childContainer)
|
containers.append(childContainer)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user