diff --git a/Frameworks/Account/FeedWrangler/FeedWranglerAPICaller.swift b/Frameworks/Account/FeedWrangler/FeedWranglerAPICaller.swift index a53f0ce91..bafab6ec3 100644 --- a/Frameworks/Account/FeedWrangler/FeedWranglerAPICaller.swift +++ b/Frameworks/Account/FeedWrangler/FeedWranglerAPICaller.swift @@ -12,6 +12,10 @@ import Foundation import SyncDatabase import RSWeb +enum FeedWranglerError : Error { + case general(message: String) +} + final class FeedWranglerAPICaller: NSObject { private var transport: Transport! @@ -72,6 +76,32 @@ final class FeedWranglerAPICaller: NSObject { } } + func addSubscription(url: String, completion: @escaping (Result) -> Void) { + guard let callURL = FeedWranglerConfig + .clientURL + .appendingPathComponent("subscriptions/add_feed") + .appendingQueryItem(URLQueryItem(name: "feed_url", value: url)) else { + completion(.failure(TransportError.noURL)) + return + } + + let request = URLRequest(url: callURL, credentials: credentials) + + transport.send(request: request, resultType: FeedWranglerGenericResult.self) { result in + switch result { + case .success(let (_, results)): + if let error = results?.error { + completion(.failure(FeedWranglerError.general(message: error))) + } else { + completion(.success(())) + } + + case .failure(let error): + completion(.failure(error)) + } + } + } + func renameSubscription(feedID: String, newName: String, completion: @escaping (Result) -> Void) { let url = FeedWranglerConfig.clientURL diff --git a/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift b/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift index fc0ca55f0..a15c92186 100644 --- a/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift +++ b/Frameworks/Account/FeedWrangler/FeedWranglerAccountDelegate.swift @@ -201,7 +201,26 @@ final class FeedWranglerAccountDelegate: AccountDelegate { } func createFeed(for account: Account, url: String, name: String?, container: Container, completion: @escaping (Result) -> Void) { - fatalError() + refreshProgress.addToNumberOfTasksAndRemaining(3) + + self.refreshCredentials(for: account) { + self.refreshProgress.completeTask() + self.caller.addSubscription(url: url) { result in + self.refreshProgress.completeTask() + self.caller.addSubscription(url: url) { result in + self.refreshProgress.completeTask() + + switch result { + case .success: + let feed = account.createFeed(with: name, url: url, feedID: url, homePageURL: url) + completion(.success(feed)) + + case .failure(let error): + completion(.failure(error)) + } + } + } + } } func renameFeed(for account: Account, with feed: Feed, to name: String, completion: @escaping (Result) -> Void) {