From 3d1bfc0ca275073baaadf5482bab8839851c64c7 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Thu, 16 Apr 2020 16:19:32 -0500 Subject: [PATCH] Integrate Feed Provider add feed into local account delegate. --- .../LocalAccount/LocalAccountDelegate.swift | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Frameworks/Account/LocalAccount/LocalAccountDelegate.swift b/Frameworks/Account/LocalAccount/LocalAccountDelegate.swift index e3157d154..c6e64a324 100644 --- a/Frameworks/Account/LocalAccount/LocalAccountDelegate.swift +++ b/Frameworks/Account/LocalAccount/LocalAccountDelegate.swift @@ -106,11 +106,31 @@ final class LocalAccountDelegate: AccountDelegate { } func createWebFeed(for account: Account, url urlString: String, name: String?, container: Container, completion: @escaping (Result) -> Void) { - guard let url = URL(string: urlString) else { + guard let url = URL(string: urlString), let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false) else { completion(.failure(LocalAccountDelegateError.invalidParameter)) return } + // Use a Feed Provider to create the feed if one is available for it + // Username should be part of the URL on new feed adds + if let feedProvider = FeedProviderManager.shared.best(for: urlComponents, with: nil) { + + refreshProgress.addToNumberOfTasksAndRemaining(1) + feedProvider.provide(urlComponents) { result in + self.refreshProgress.completeTask() + switch result { + case .success(let parsedFeed): + let feed = account.createWebFeed(with: nil, url: url.absoluteString, webFeedID: url.absoluteString, homePageURL: nil) + account.update(feed, with: parsedFeed, {_ in}) + case .failure: + completion(.failure(AccountError.createErrorNotFound)) + } + } + + return + } + + // Use the standard feed finder to download and process the RSS feed refreshProgress.addToNumberOfTasksAndRemaining(1) FeedFinder.find(url: url) { result in