mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-09 08:39:00 +01:00
retrieve missing articles
This commit is contained in:
parent
739256ffa4
commit
f4bee1d0b9
@ -154,6 +154,32 @@ final class FeedWranglerAPICaller: NSObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: FeedItems
|
// 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) {
|
func retrieveFeedItems(page: Int = 0, completion: @escaping (Result<[FeedWranglerFeedItem], Error>) -> Void) {
|
||||||
|
|
||||||
// todo: handle initial sync better
|
// todo: handle initial sync better
|
||||||
|
@ -123,7 +123,33 @@ final class FeedWranglerAccountDelegate: AccountDelegate {
|
|||||||
|
|
||||||
func refreshMissingArticles(for account: Account, completion: @escaping (() -> Void)) {
|
func refreshMissingArticles(for account: Account, completion: @escaping (() -> Void)) {
|
||||||
os_log(.debug, log: log, "Refreshing missing articles...")
|
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)) {
|
func sendArticleStatus(for account: Account, completion: @escaping (() -> Void)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user