From 75fbd9e3ebb1be9b20ce341813cf8ead97bc1028 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Thu, 9 May 2019 18:20:09 -0500 Subject: [PATCH] Add folder delete undo support --- .../Feedbin/FeedbinAccountDelegate.swift | 140 ++++++++++-------- 1 file changed, 79 insertions(+), 61 deletions(-) diff --git a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift index 67597f952..1a06b10f6 100644 --- a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift +++ b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift @@ -285,69 +285,27 @@ final class FeedbinAccountDelegate: AccountDelegate { } - private func processRestoredFeed(for account: Account, feed: Feed, editedName: String?, folder: Folder?, completion: @escaping (Result) -> Void) { - - if let folder = folder { - - addFeed(for: account, to: folder, with: feed) { [weak self] result in - - switch result { - case .success: - - if editedName != nil { - DispatchQueue.main.async { - folder.addFeed(feed) - } - self?.processRestoredFeedName(for: account, feed: feed, editedName: editedName!, completion: completion) - } else { - DispatchQueue.main.async { - folder.addFeed(feed) - completion(.success(())) - } - } - - case .failure(let error): - DispatchQueue.main.async { - completion(.failure(error)) - } - } - - } - - } else { - - DispatchQueue.main.async { - account.addFeed(feed) - } - - processRestoredFeedName(for: account, feed: feed, editedName: editedName!, completion: completion) - - } - - } - - private func processRestoredFeedName(for account: Account, feed: Feed, editedName: String, completion: @escaping (Result) -> Void) { - - renameFeed(for: account, with: feed, to: editedName) { result in - switch result { - case .success: - DispatchQueue.main.async { - feed.editedName = editedName - completion(.success(())) - } - case .failure(let error): - DispatchQueue.main.async { - completion(.failure(error)) - } - } - - } - - } - func restoreFolder(for account: Account, folder: Folder, completion: @escaping (Result) -> Void) { + account.addFolder(folder) - completion(.success(())) + let group = DispatchGroup() + + for feed in folder.topLevelFeeds { + + group.enter() + addFeed(for: account, to: folder, with: feed) { result in + if account.topLevelFeeds.contains(feed) { + account.removeFeed(feed) + } + group.leave() + } + + } + + group.notify(queue: DispatchQueue.main) { + completion(.success(())) + } + } func accountDidInitialize(_ account: Account) { @@ -628,6 +586,66 @@ private extension FeedbinAccountDelegate { } + func processRestoredFeed(for account: Account, feed: Feed, editedName: String?, folder: Folder?, completion: @escaping (Result) -> Void) { + + if let folder = folder { + + addFeed(for: account, to: folder, with: feed) { [weak self] result in + + switch result { + case .success: + + if editedName != nil { + DispatchQueue.main.async { + folder.addFeed(feed) + } + self?.processRestoredFeedName(for: account, feed: feed, editedName: editedName!, completion: completion) + } else { + DispatchQueue.main.async { + folder.addFeed(feed) + completion(.success(())) + } + } + + case .failure(let error): + DispatchQueue.main.async { + completion(.failure(error)) + } + } + + } + + } else { + + DispatchQueue.main.async { + account.addFeed(feed) + } + + processRestoredFeedName(for: account, feed: feed, editedName: editedName!, completion: completion) + + } + + } + + func processRestoredFeedName(for account: Account, feed: Feed, editedName: String, completion: @escaping (Result) -> Void) { + + renameFeed(for: account, with: feed, to: editedName) { result in + switch result { + case .success: + DispatchQueue.main.async { + feed.editedName = editedName + completion(.success(())) + } + case .failure(let error): + DispatchQueue.main.async { + completion(.failure(error)) + } + } + + } + + } + func clearFolderRelationship(for feed: Feed, withFolderName folderName: String) { if var folderRelationship = feed.folderRelationship { folderRelationship[folderName] = nil