From 9516392c61c18a67faaffd0122a1ae08a851220d Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Mon, 16 Dec 2019 17:03:05 -0800 Subject: [PATCH] Make two more Feedly operations compatible with DatabaseQueue changes. --- .../FeedlySetStarredArticlesOperation.swift | 39 +++++-------------- ...UpdateAccountFeedsWithItemsOperation.swift | 4 +- 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/Frameworks/Account/Feedly/Operations/FeedlySetStarredArticlesOperation.swift b/Frameworks/Account/Feedly/Operations/FeedlySetStarredArticlesOperation.swift index 9af83ea4e..c7713d6ff 100644 --- a/Frameworks/Account/Feedly/Operations/FeedlySetStarredArticlesOperation.swift +++ b/Frameworks/Account/Feedly/Operations/FeedlySetStarredArticlesOperation.swift @@ -34,7 +34,7 @@ final class FeedlySetStarredArticlesOperation: FeedlyOperation { account.fetchStarredArticleIDs { (articleIDsResult) in if let localStarredArticleIDs = try? articleIDsResult.get() { - self.didFetchStarredArticleIDs(localStarredArticleIDs) + self.processStarredArticleIDs(localStarredArticleIDs) } else { self.didFinish() @@ -45,41 +45,20 @@ final class FeedlySetStarredArticlesOperation: FeedlyOperation { private extension FeedlySetStarredArticlesOperation { - func didFetchStarredArticleIDs(_ localStarredArticleIDs: Set) { + func processStarredArticleIDs(_ localStarredArticleIDs: Set) { guard !isCancelled else { didFinish() return } - - let group = DispatchGroup() - let remoteStarredArticleIds = allStarredEntryIdsProvider.entryIds - - // Mark articles as starred - let deltaStarredArticleIDs = remoteStarredArticleIds.subtracting(localStarredArticleIDs) - let markStarredArticles = account.fetchArticles(.articleIDs(deltaStarredArticleIDs)) - account.update(markStarredArticles, statusKey: .starred, flag: true) - // Save any starred statuses for articles we haven't yet received - let markStarredArticleIDs = Set(markStarredArticles.map { $0.articleID }) - let missingStarredArticleIDs = deltaStarredArticleIDs.subtracting(markStarredArticleIDs) - group.enter() - account.ensureStatuses(missingStarredArticleIDs, true, .starred, true) { - group.leave() - } + // Mark as starred + let remoteStarredArticleIDs = allStarredEntryIdsProvider.entryIds + account.mark(articleIDs: remoteStarredArticleIDs, statusKey: .starred, flag: true) - // Mark articles as unstarred - let deltaUnstarredArticleIDs = localStarredArticleIDs.subtracting(remoteStarredArticleIds) - let markUnstarredArticles = account.fetchArticles(.articleIDs(deltaUnstarredArticleIDs)) - account.update(markUnstarredArticles, statusKey: .starred, flag: false) + // Mark as unstarred + let deltaUnstarredArticleIDs = localStarredArticleIDs.subtracting(remoteStarredArticleIDs) + account.mark(articleIDs: deltaUnstarredArticleIDs, statusKey: .starred, flag: false) - // Save any unstarred statuses for articles we haven't yet received - let markUnstarredArticleIDs = Set(markUnstarredArticles.map { $0.articleID }) - let missingUnstarredArticleIDs = deltaUnstarredArticleIDs.subtracting(markUnstarredArticleIDs) - group.enter() - account.ensureStatuses(missingUnstarredArticleIDs, true, .starred, false) { - group.leave() - } - - group.notify(queue: .main, execute: didFinish) + didFinish() } } diff --git a/Frameworks/Account/Feedly/Operations/FeedlyUpdateAccountFeedsWithItemsOperation.swift b/Frameworks/Account/Feedly/Operations/FeedlyUpdateAccountFeedsWithItemsOperation.swift index 850f24c28..a9465d349 100644 --- a/Frameworks/Account/Feedly/Operations/FeedlyUpdateAccountFeedsWithItemsOperation.swift +++ b/Frameworks/Account/Feedly/Operations/FeedlyUpdateAccountFeedsWithItemsOperation.swift @@ -23,7 +23,7 @@ final class FeedlyUpdateAccountFeedsWithItemsOperation: FeedlyOperation { } override func main() { - assert(Thread.isMainThread) // Needs to be on main thread because Feed is a main-thread-only model type. + precondition(Thread.isMainThread) // Needs to be on main thread because Feed is a main-thread-only model type. guard !isCancelled else { didFinish() return @@ -31,7 +31,7 @@ final class FeedlyUpdateAccountFeedsWithItemsOperation: FeedlyOperation { let webFeedIDsAndItems = organisedItemsProvider.parsedItemsKeyedByFeedId - account.update(webFeedIDsAndItems: webFeedIDsAndItems, defaultRead: true) { + account.update(webFeedIDsAndItems: webFeedIDsAndItems, defaultRead: true) { _ in os_log(.debug, log: self.log, "Updated %i feeds for \"%@\"", webFeedIDsAndItems.count, self.organisedItemsProvider.providerName) self.didFinish() }