From 1e66860f346f953d90ebf436a2b30670b8954d57 Mon Sep 17 00:00:00 2001 From: Anh Do Date: Sat, 21 Mar 2020 22:17:01 -0400 Subject: [PATCH] Move feed --- .../NewsBlur/Models/NewsBlurFeedChange.swift | 7 +++++ .../Account/NewsBlur/NewsBlurAPICaller.swift | 14 ++++++++++ .../NewsBlur/NewsBlurAccountDelegate.swift | 26 +++++++++++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/Frameworks/Account/NewsBlur/Models/NewsBlurFeedChange.swift b/Frameworks/Account/NewsBlur/Models/NewsBlurFeedChange.swift index e0d9528a9..56f09a95c 100644 --- a/Frameworks/Account/NewsBlur/Models/NewsBlurFeedChange.swift +++ b/Frameworks/Account/NewsBlur/Models/NewsBlurFeedChange.swift @@ -12,6 +12,7 @@ enum NewsBlurFeedChange { case add(String, String?) case rename(String, String) case delete(String, String?) + case move(String, String?, String?) } extension NewsBlurFeedChange: NewsBlurDataConvertible { @@ -34,6 +35,12 @@ extension NewsBlurFeedChange: NewsBlurDataConvertible { URLQueryItem(name: "feed_id", value: feedID), folder != nil ? URLQueryItem(name: "in_folder", value: folder) : nil, ].compactMap { $0 } + case .move(let feedID, let from, let to): + return [ + URLQueryItem(name: "feed_id", value: feedID), + URLQueryItem(name: "in_folder", value: from ?? ""), + URLQueryItem(name: "to_folder", value: to ?? ""), + ] } }() diff --git a/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift b/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift index b0c07735a..0cd8bf977 100644 --- a/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift +++ b/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift @@ -262,4 +262,18 @@ final class NewsBlurAPICaller: NSObject { } } } + + func moveFeed(feedID: String, from: String?, to: String?, completion: @escaping (Result) -> Void) { + sendUpdates( + endpoint: "reader/move_feed_to_folder", + payload: NewsBlurFeedChange.move(feedID, from, to) + ) { result in + switch result { + case .success: + completion(.success(())) + case .failure(let error): + completion(.failure(error)) + } + } + } } diff --git a/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift b/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift index 68a77a74d..de8c14f1f 100644 --- a/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift +++ b/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift @@ -429,7 +429,6 @@ final class NewsBlurAccountDelegate: AccountDelegate { } func renameWebFeed(for account: Account, with feed: WebFeed, to name: String, completion: @escaping (Result) -> ()) { - // This error should never happen guard let feedID = feed.externalID else { completion(.failure(NewsBlurError.invalidParameter)) return @@ -480,7 +479,30 @@ final class NewsBlurAccountDelegate: AccountDelegate { } func moveWebFeed(for account: Account, with feed: WebFeed, from: Container, to: Container, completion: @escaping (Result) -> ()) { - completion(.success(())) + guard let feedID = feed.externalID else { + completion(.failure(NewsBlurError.invalidParameter)) + return + } + + refreshProgress.addToNumberOfTasksAndRemaining(1) + + caller.moveFeed( + feedID: feedID, + from: (from as? Folder)?.name, + to: (to as? Folder)?.name + ) { result in + self.refreshProgress.completeTask() + + switch result { + case .success: + from.removeWebFeed(feed) + to.addWebFeed(feed) + + completion(.success(())) + case .failure(let error): + completion(.failure(error)) + } + } } func restoreWebFeed(for account: Account, feed: WebFeed, container: Container, completion: @escaping (Result) -> ()) {