From 83652c40dea11229fdc3ecb55fbb0e138427ce20 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 28 May 2019 16:46:16 -0500 Subject: [PATCH] Handle scenario where moved/copied feed already exists somewhere else in account --- .../Sidebar/SidebarOutlineDataSource.swift | 67 ++++++++++++++----- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift b/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift index e304e30c0..aa85636de 100644 --- a/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift +++ b/Mac/MainWindow/Sidebar/SidebarOutlineDataSource.swift @@ -283,12 +283,23 @@ private extension SidebarOutlineDataSource { return } - destinationAccount.createFeed(url: feed.url, name: feed.editedName, container: destinationContainer) { result in - switch result { - case .success: - break - case .failure(let error): - NSApplication.shared.presentError(error) + if let existingFeed = destinationAccount.existingFeed(withURL: feed.url) { + destinationContainer.addFeed(existingFeed) { result in + switch result { + case .success: + break + case .failure(let error): + NSApplication.shared.presentError(error) + } + } + } else { + destinationAccount.createFeed(url: feed.url, name: feed.editedName, container: destinationContainer) { result in + switch result { + case .success: + break + case .failure(let error): + NSApplication.shared.presentError(error) + } } } } @@ -301,20 +312,42 @@ private extension SidebarOutlineDataSource { return } - destinationAccount.createFeed(url: feed.url, name: feed.editedName, container: destinationContainer) { result in - switch result { - case .success: - sourceAccount.deleteFeed(feed) { result in - switch result { - case .success: - break - case .failure(let error): - NSApplication.shared.presentError(error) + if let existingFeed = destinationAccount.existingFeed(withURL: feed.url) { + + destinationContainer.addFeed(existingFeed) { result in + switch result { + case .success: + sourceAccount.deleteFeed(feed) { result in + switch result { + case .success: + break + case .failure(let error): + NSApplication.shared.presentError(error) + } } + case .failure(let error): + NSApplication.shared.presentError(error) } - case .failure(let error): - NSApplication.shared.presentError(error) } + + } else { + + destinationAccount.createFeed(url: feed.url, name: feed.editedName, container: destinationContainer) { result in + switch result { + case .success: + sourceAccount.deleteFeed(feed) { result in + switch result { + case .success: + break + case .failure(let error): + NSApplication.shared.presentError(error) + } + } + case .failure(let error): + NSApplication.shared.presentError(error) + } + } + } }