From b71c962684d1dd4ba1737a8c7aebf216869867b4 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Fri, 19 Mar 2021 11:13:26 -0500 Subject: [PATCH] Add the feed even if we can't find a viable feed in a page that the FeedFinder selected. Fixes #2888 --- .../CloudKit/CloudKitAccountDelegate.swift | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift b/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift index f2734e3fa..07467c3f6 100644 --- a/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift +++ b/Account/Sources/Account/CloudKit/CloudKitAccountDelegate.swift @@ -668,6 +668,29 @@ private extension CloudKitAccountDelegate { } func createRSSWebFeed(for account: Account, url: URL, editedName: String?, container: Container, validateFeed: Bool, completion: @escaping (Result) -> Void) { + + func addDeadFeed() { + let feed = account.createWebFeed(with: editedName, url: url.absoluteString, webFeedID: url.absoluteString, homePageURL: nil) + container.addWebFeed(feed) + + self.accountZone.createWebFeed(url: url.absoluteString, + name: editedName, + editedName: nil, + homePageURL: nil, + container: container) { result in + + self.refreshProgress.completeTask() + switch result { + case .success(let externalID): + feed.externalID = externalID + completion(.success(feed)) + case .failure(let error): + container.removeWebFeed(feed) + completion(.failure(error)) + } + } + } + refreshProgress.addToNumberOfTasksAndRemaining(5) FeedFinder.find(url: url) { result in @@ -675,8 +698,13 @@ private extension CloudKitAccountDelegate { switch result { case .success(let feedSpecifiers): guard let bestFeedSpecifier = FeedSpecifier.bestFeed(in: feedSpecifiers), let url = URL(string: bestFeedSpecifier.urlString) else { - self.refreshProgress.completeTasks(4) - completion(.failure(AccountError.createErrorNotFound)) + self.refreshProgress.completeTasks(3) + if validateFeed { + self.refreshProgress.completeTask() + completion(.failure(AccountError.createErrorNotFound)) + } else { + addDeadFeed() + } return } @@ -733,30 +761,12 @@ private extension CloudKitAccountDelegate { case .failure: self.refreshProgress.completeTasks(3) - guard !validateFeed else { + if validateFeed { self.refreshProgress.completeTask() completion(.failure(AccountError.createErrorNotFound)) return - } - - let feed = account.createWebFeed(with: editedName, url: url.absoluteString, webFeedID: url.absoluteString, homePageURL: nil) - container.addWebFeed(feed) - - self.accountZone.createWebFeed(url: url.absoluteString, - name: editedName, - editedName: nil, - homePageURL: nil, - container: container) { result in - - self.refreshProgress.completeTask() - switch result { - case .success(let externalID): - feed.externalID = externalID - completion(.success(feed)) - case .failure(let error): - container.removeWebFeed(feed) - completion(.failure(error)) - } + } else { + addDeadFeed() } } }