From ccac456d778e8f0fb6a7237886f51112d5d60b1c Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Mon, 13 May 2019 10:29:34 -0500 Subject: [PATCH] Change to use the entries.json service for Feedbin instead of the per feed one --- .../Account/Feedbin/FeedbinAPICaller.swift | 6 +-- .../Feedbin/FeedbinAccountDelegate.swift | 48 +++++++++---------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/Frameworks/Account/Feedbin/FeedbinAPICaller.swift b/Frameworks/Account/Feedbin/FeedbinAPICaller.swift index edc45f75c..41bad4b39 100644 --- a/Frameworks/Account/Feedbin/FeedbinAPICaller.swift +++ b/Frameworks/Account/Feedbin/FeedbinAPICaller.swift @@ -299,7 +299,7 @@ final class FeedbinAPICaller: NSObject { } - func retrieveEntries(_ feedID: String, completion: @escaping (Result<([FeedbinEntry]?, String?), Error>) -> Void) { + func retrieveEntries(completion: @escaping (Result<([FeedbinEntry]?, String?), Error>) -> Void) { let since: Date = { if let lastArticleFetch = accountMetadata?.lastArticleFetch { @@ -310,8 +310,8 @@ final class FeedbinAPICaller: NSObject { }() let sinceString = FeedbinDate.formatter.string(from: since) - var callURL = URLComponents(url: feedbinBaseURL.appendingPathComponent("feeds/\(feedID)/entries.json"), resolvingAgainstBaseURL: false)! - callURL.queryItems = [URLQueryItem(name: "since", value: sinceString)] + var callURL = URLComponents(url: feedbinBaseURL.appendingPathComponent("entries.json"), resolvingAgainstBaseURL: false)! + callURL.queryItems = [URLQueryItem(name: "since", value: sinceString), URLQueryItem(name: "per_page", value: "100")] let request = URLRequest(url: callURL.url!, credentials: credentials) transport.send(request: request, resultType: [FeedbinEntry].self) { [weak self] result in diff --git a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift index d638355ad..9d4f4e7cd 100644 --- a/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift +++ b/Frameworks/Account/Feedbin/FeedbinAccountDelegate.swift @@ -850,37 +850,26 @@ private extension FeedbinAccountDelegate { os_log(.debug, log: log, "Refreshing articles...") - let group = DispatchGroup() - - for feed in account.flattenedFeeds() { - - group.enter() + caller.retrieveEntries() { [weak self] result in - caller.retrieveEntries(feed.feedID) { [weak self] result in + switch result { + case .success(let (entries, page)): - switch result { - case .success(let (entries, page)): - - self?.processEntries(account: account, entries: entries) { - self?.refreshArticles(account, page: page) { - group.leave() - } + self?.processEntries(account: account, entries: entries) { + self?.refreshArticles(account, page: page) { + guard let self = self else { return } + os_log(.debug, log: self.log, "Done refreshing articles.") + completion() } - - case .failure(let error): - guard let self = self else { return } - os_log(.error, log: self.log, "Refresh articles failed: %@.", error.localizedDescription) } - + + case .failure(let error): + guard let self = self else { return } + os_log(.error, log: self.log, "Refresh articles failed: %@.", error.localizedDescription) } } - group.notify(queue: DispatchQueue.main) { - completion() - } - - } func refreshArticles(_ account: Account, page: String?, completion: @escaping (() -> Void)) { @@ -908,20 +897,29 @@ private extension FeedbinAccountDelegate { } - func processEntries(account: Account, entries: [FeedbinEntry]?, completion: @escaping (() -> Void)) { let parsedItems = mapEntriesToParsedItems(entries: entries) let parsedMap = Dictionary(grouping: parsedItems, by: { item in item.feedURL } ) + let group = DispatchGroup() + for (feedID, mapItems) in parsedMap { + + group.enter() + if let feed = account.idToFeedDictionary[feedID] { DispatchQueue.main.async { account.update(feed, parsedItems: Set(mapItems), defaultRead: true) { - completion() + group.leave() } } } + + } + + group.notify(queue: DispatchQueue.main) { + completion() } }