Implement disallowing feeds in the root folder for specified accounts

This commit is contained in:
Maurice Parker 2019-09-20 15:37:10 -05:00
parent a85df5bd09
commit 1bcc1eda44
2 changed files with 33 additions and 4 deletions

View File

@ -16,15 +16,21 @@ class FolderTreeMenu {
static func createFolderPopupMenu(with rootNode: Node) -> NSMenu {
let menu = NSMenu(title: "Folders")
menu.autoenablesItems = false
for childNode in rootNode.childNodes {
guard let nameProvider = childNode.representedObject as? DisplayNameProvider else {
guard let account = childNode.representedObject as? Account else {
continue
}
let menuItem = NSMenuItem(title: nameProvider.nameForDisplay, action: nil, keyEquivalent: "")
let menuItem = NSMenuItem(title: account.nameForDisplay, action: nil, keyEquivalent: "")
menuItem.representedObject = childNode.representedObject
if account.behaviors.contains(.disallowFeedInRootFolder) {
menuItem.isEnabled = false
}
menu.addItem(menuItem)
let childNodes = childNode.childNodes

View File

@ -636,6 +636,30 @@ private extension SidebarOutlineDataSource {
}
func violatesAccountSpecificBehavior(_ parentNode: Node, _ draggedFeeds: Set<PasteboardFeed>) -> Bool {
if violatesDisallowFeedInRootFolder(parentNode) {
return true
}
if violatesDisallowFeedCopyInRootFolder(parentNode, draggedFeeds) {
return true
}
return false
}
func violatesDisallowFeedInRootFolder(_ parentNode: Node) -> Bool {
guard let parentAccount = nodeAccount(parentNode), parentAccount.behaviors.contains(.disallowFeedInRootFolder) else {
return false
}
if parentNode.representedObject is Account {
return true
}
return false
}
func violatesDisallowFeedCopyInRootFolder(_ parentNode: Node, _ draggedFeeds: Set<PasteboardFeed>) -> Bool {
guard let parentAccount = nodeAccount(parentNode), parentAccount.behaviors.contains(.disallowFeedCopyInRootFolder) else {
return false
}
@ -646,14 +670,13 @@ private extension SidebarOutlineDataSource {
}
}
// Can't copy to the account when using tags
if parentNode.representedObject is Account && (NSApplication.shared.currentEvent?.modifierFlags.contains(.option) ?? false) {
return true
}
return false
}
func indexWhereDraggedFeedWouldAppear(_ parentNode: Node, _ draggedFeed: PasteboardFeed) -> Int {
let draggedFeedWrapper = PasteboardFeedObjectWrapper(pasteboardFeed: draggedFeed)
let draggedFeedNode = Node(representedObject: draggedFeedWrapper, parent: nil)