From ec855364bc7b16e049b32625aefb75997e5fda4e Mon Sep 17 00:00:00 2001 From: Anh Do Date: Sat, 14 Mar 2020 21:09:42 -0400 Subject: [PATCH] Remove feeds in folder --- .../NewsBlur/Models/NewsBlurFolderChange.swift | 10 +++++++--- Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift | 4 ++-- .../Account/NewsBlur/NewsBlurAccountDelegate.swift | 11 ++++++++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Frameworks/Account/NewsBlur/Models/NewsBlurFolderChange.swift b/Frameworks/Account/NewsBlur/Models/NewsBlurFolderChange.swift index cc38615a7..e122cce07 100644 --- a/Frameworks/Account/NewsBlur/Models/NewsBlurFolderChange.swift +++ b/Frameworks/Account/NewsBlur/Models/NewsBlurFolderChange.swift @@ -11,7 +11,7 @@ import Foundation enum NewsBlurFolderChange { case add(String) case rename(String, String) - case delete(String) + case delete(String, [String]) } extension NewsBlurFolderChange: NewsBlurDataConvertible { @@ -27,11 +27,15 @@ extension NewsBlurFolderChange: NewsBlurDataConvertible { URLQueryItem(name: "new_folder_name", value: to), URLQueryItem(name: "in_folder", value: ""), // root folder ] - case .delete(let name): - return [ + case .delete(let name, let feedIDs): + var queryItems = [ URLQueryItem(name: "folder_to_delete", value: name), URLQueryItem(name: "in_folder", value: ""), // root folder ] + queryItems.append(contentsOf: feedIDs.map { id in + URLQueryItem(name: "feed_id", value: id) + }) + return queryItems } }() diff --git a/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift b/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift index e42f4ce0e..1eb938f85 100644 --- a/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift +++ b/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift @@ -205,8 +205,8 @@ final class NewsBlurAPICaller: NSObject { sendUpdates(endpoint: "reader/rename_folder", payload: NewsBlurFolderChange.rename(folder, name), completion: completion) } - func removeFolder(named name: String, completion: @escaping (Result) -> Void) { - sendUpdates(endpoint: "reader/delete_folder", payload: NewsBlurFolderChange.delete(name), completion: completion) + func removeFolder(named name: String, feedIDs: [String], completion: @escaping (Result) -> Void) { + sendUpdates(endpoint: "reader/delete_folder", payload: NewsBlurFolderChange.delete(name, feedIDs), completion: completion) } } diff --git a/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift b/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift index c0de947af..6dd3d9f28 100644 --- a/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift +++ b/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift @@ -358,9 +358,18 @@ final class NewsBlurAccountDelegate: AccountDelegate { return } + var feedIDs: [String] = [] + for feed in folder.topLevelWebFeeds { + if feed.folderRelationship?.count ?? 0 > 1 { + clearFolderRelationship(for: feed, withFolderName: folderToRemove) + } else if let subscriptionID = feed.subscriptionID { + feedIDs.append(subscriptionID) + } + } + refreshProgress.addToNumberOfTasksAndRemaining(1) - caller.removeFolder(named: folderToRemove) { result in + caller.removeFolder(named: folderToRemove, feedIDs: feedIDs) { result in self.refreshProgress.completeTask() switch result {