From 133398c240df411255b69f5122b64aee280b0f12 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Wed, 1 May 2019 17:49:25 -0500 Subject: [PATCH] Prevent dragging between accounts. --- .../Sidebar/SidebarOutlineDataSource.swift | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift b/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift index ff8350fe1..6d8def52b 100644 --- a/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift +++ b/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift @@ -173,6 +173,9 @@ private extension SidebarOutlineDataSource { guard let dropTargetNode = ancestorThatCanAcceptLocalFeed(parentNode) else { return SidebarOutlineDataSource.dragOperationNone } + if nodeAndDraggedFeedsDoNotShareAccount(dropTargetNode, Set([draggedFeed])) { + return SidebarOutlineDataSource.dragOperationNone + } if nodeHasChildRepresentingDraggedFeed(dropTargetNode, draggedFeed) { return SidebarOutlineDataSource.dragOperationNone } @@ -191,6 +194,9 @@ private extension SidebarOutlineDataSource { guard let dropTargetNode = ancestorThatCanAcceptLocalFeed(parentNode) else { return SidebarOutlineDataSource.dragOperationNone } + if nodeAndDraggedFeedsDoNotShareAccount(dropTargetNode, draggedFeeds) { + return SidebarOutlineDataSource.dragOperationNone + } if nodeHasChildRepresentingAnyDraggedFeed(dropTargetNode, draggedFeeds) { return SidebarOutlineDataSource.dragOperationNone } @@ -321,6 +327,27 @@ private extension SidebarOutlineDataSource { } return false } + + func nodeAndDraggedFeedsDoNotShareAccount(_ parentNode: Node, _ draggedFeeds: Set) -> Bool { + + let parentAccountId: String? + if let account = parentNode.representedObject as? Account { + parentAccountId = account.accountID + } else if let folder = parentNode.representedObject as? Folder { + parentAccountId = folder.account?.accountID + } else { + return true + } + + for draggedFeed in draggedFeeds { + if draggedFeed.accountID != parentAccountId { + return true + } + } + + return false + + } func nodeHasChildRepresentingAnyDraggedFeed(_ parentNode: Node, _ draggedFeeds: Set) -> Bool { for node in parentNode.childNodes {