Clear conditional get and do full downloads of feeds that are restored. Fixes #2747

This commit is contained in:
Maurice Parker 2021-01-19 20:56:59 -06:00
parent 2c65d3c296
commit 8503582308
3 changed files with 9 additions and 26 deletions

View File

@ -242,33 +242,11 @@ final class CloudKitAccountDelegate: AccountDelegate {
} }
func restoreWebFeed(for account: Account, feed: WebFeed, container: Container, completion: @escaping (Result<Void, Error>) -> Void) { func restoreWebFeed(for account: Account, feed: WebFeed, container: Container, completion: @escaping (Result<Void, Error>) -> Void) {
refreshProgress.addToNumberOfTasksAndRemaining(2) createWebFeed(for: account, url: feed.url, name: feed.editedName, container: container) { result in
accountZone.createWebFeed(url: feed.url, name: feed.name, editedName: feed.editedName, homePageURL: feed.homePageURL, container: container) { result in
self.refreshProgress.completeTask()
switch result { switch result {
case .success(let externalID): case .success:
feed.externalID = externalID
container.addWebFeed(feed)
account.fetchArticlesAsync(.webFeed(feed)) { result in
switch result {
case .success(let articles):
self.articlesZone.saveNewArticles(articles) { result in
self.refreshProgress.completeTask()
if case .failure(let error) = result {
os_log(.error, log: self.log, "Restore articles error: %@.", error.localizedDescription)
}
completion(.success(())) completion(.success(()))
}
case .failure(let error): case .failure(let error):
self.refreshProgress.clear()
completion(.failure(error))
}
}
case .failure(let error):
self.refreshProgress.clear()
self.processAccountError(account, error)
completion(.failure(error)) completion(.failure(error))
} }
} }
@ -864,6 +842,7 @@ private extension CloudKitAccountDelegate {
return return
} }
self.articlesZone.deleteArticles(webFeedExternalID) { result in self.articlesZone.deleteArticles(webFeedExternalID) { result in
feed.dropConditionalGetInfo()
self.refreshProgress.completeTask() self.refreshProgress.completeTask()
completion(result) completion(result)
} }

View File

@ -83,7 +83,10 @@ class CloudKitAcountZoneDelegate: CloudKitZoneDelegate {
func removeWebFeed(_ externalID: String) { func removeWebFeed(_ externalID: String) {
if let webFeed = account?.existingWebFeed(withExternalID: externalID), let containers = account?.existingContainers(withWebFeed: webFeed) { if let webFeed = account?.existingWebFeed(withExternalID: externalID), let containers = account?.existingContainers(withWebFeed: webFeed) {
containers.forEach { $0.removeWebFeed(webFeed) } containers.forEach {
webFeed.dropConditionalGetInfo()
$0.removeWebFeed(webFeed)
}
} }
} }

View File

@ -235,6 +235,7 @@ public final class WebFeed: Feed, Renamable, Hashable {
public func dropConditionalGetInfo() { public func dropConditionalGetInfo() {
conditionalGetInfo = nil conditionalGetInfo = nil
contentHash = nil contentHash = nil
sinceToken = nil
} }
// MARK: - Hashable // MARK: - Hashable