retrieve missing articles

This commit is contained in:
Jonathan Bennett 2019-11-20 06:13:30 -05:00
parent 739256ffa4
commit f4bee1d0b9
2 changed files with 53 additions and 1 deletions

View File

@ -154,6 +154,32 @@ final class FeedWranglerAPICaller: NSObject {
}
// MARK: FeedItems
func retrieveEntries(articleIDs: [String], completion: @escaping (Result<[FeedWranglerFeedItem], Error>) -> Void) {
let IDs = articleIDs.joined(separator: ",")
let url = FeedWranglerConfig.clientURL
.appendingPathComponent("feed_items/get")
.appendingQueryItem(URLQueryItem(name: "feed_item_ids", value: IDs))
print("\(url!)")
guard let callURL = url else {
completion(.failure(TransportError.noURL))
return
}
let request = URLRequest(url: callURL, credentials: credentials)
transport.send(request: request, resultType: FeedWranglerFeedItemsRequest.self) { result in
switch result {
case .success(let (_, results)):
completion(.success(results?.feedItems ?? []))
case .failure(let error):
completion(.failure(error))
}
}
}
func retrieveFeedItems(page: Int = 0, completion: @escaping (Result<[FeedWranglerFeedItem], Error>) -> Void) {
// todo: handle initial sync better

View File

@ -123,7 +123,33 @@ final class FeedWranglerAccountDelegate: AccountDelegate {
func refreshMissingArticles(for account: Account, completion: @escaping (() -> Void)) {
os_log(.debug, log: log, "Refreshing missing articles...")
completion()
let group = DispatchGroup()
let fetchedArticleIDs = account.fetchArticleIDsForStatusesWithoutArticles()
let articleIDs = Array(fetchedArticleIDs)
let chunkedArticleIDs = articleIDs.chunked(into: 100)
for chunk in chunkedArticleIDs {
group.enter()
self.caller.retrieveEntries(articleIDs: chunk) { result in
switch result {
case .success(let entries):
self.syncFeedItems(account, entries) {
group.leave()
}
case .failure(let error):
os_log(.error, log: self.log, "Refresh missing articles failed: %@", error.localizedDescription)
group.leave()
}
}
}
group.notify(queue: DispatchQueue.main) {
self.refreshProgress.completeTask()
os_log(.debug, log: self.log, "Done refreshing missing articles.")
completion()
}
}
func sendArticleStatus(for account: Account, completion: @escaping (() -> Void)) {