Prevent dragging between accounts.
This commit is contained in:
parent
78e98e4c03
commit
133398c240
@ -173,6 +173,9 @@ private extension SidebarOutlineDataSource {
|
|||||||
guard let dropTargetNode = ancestorThatCanAcceptLocalFeed(parentNode) else {
|
guard let dropTargetNode = ancestorThatCanAcceptLocalFeed(parentNode) else {
|
||||||
return SidebarOutlineDataSource.dragOperationNone
|
return SidebarOutlineDataSource.dragOperationNone
|
||||||
}
|
}
|
||||||
|
if nodeAndDraggedFeedsDoNotShareAccount(dropTargetNode, Set([draggedFeed])) {
|
||||||
|
return SidebarOutlineDataSource.dragOperationNone
|
||||||
|
}
|
||||||
if nodeHasChildRepresentingDraggedFeed(dropTargetNode, draggedFeed) {
|
if nodeHasChildRepresentingDraggedFeed(dropTargetNode, draggedFeed) {
|
||||||
return SidebarOutlineDataSource.dragOperationNone
|
return SidebarOutlineDataSource.dragOperationNone
|
||||||
}
|
}
|
||||||
@ -191,6 +194,9 @@ private extension SidebarOutlineDataSource {
|
|||||||
guard let dropTargetNode = ancestorThatCanAcceptLocalFeed(parentNode) else {
|
guard let dropTargetNode = ancestorThatCanAcceptLocalFeed(parentNode) else {
|
||||||
return SidebarOutlineDataSource.dragOperationNone
|
return SidebarOutlineDataSource.dragOperationNone
|
||||||
}
|
}
|
||||||
|
if nodeAndDraggedFeedsDoNotShareAccount(dropTargetNode, draggedFeeds) {
|
||||||
|
return SidebarOutlineDataSource.dragOperationNone
|
||||||
|
}
|
||||||
if nodeHasChildRepresentingAnyDraggedFeed(dropTargetNode, draggedFeeds) {
|
if nodeHasChildRepresentingAnyDraggedFeed(dropTargetNode, draggedFeeds) {
|
||||||
return SidebarOutlineDataSource.dragOperationNone
|
return SidebarOutlineDataSource.dragOperationNone
|
||||||
}
|
}
|
||||||
@ -322,6 +328,27 @@ private extension SidebarOutlineDataSource {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func nodeAndDraggedFeedsDoNotShareAccount(_ parentNode: Node, _ draggedFeeds: Set<PasteboardFeed>) -> 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<PasteboardFeed>) -> Bool {
|
func nodeHasChildRepresentingAnyDraggedFeed(_ parentNode: Node, _ draggedFeeds: Set<PasteboardFeed>) -> Bool {
|
||||||
for node in parentNode.childNodes {
|
for node in parentNode.childNodes {
|
||||||
if nodeRepresentsAnyDraggedFeed(node, draggedFeeds) {
|
if nodeRepresentsAnyDraggedFeed(node, draggedFeeds) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user