mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-04 04:47:52 +01:00
Change to use the entries.json service for Feedbin instead of the per feed one
This commit is contained in:
parent
c4ce93e96a
commit
ccac456d77
@ -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 = {
|
let since: Date = {
|
||||||
if let lastArticleFetch = accountMetadata?.lastArticleFetch {
|
if let lastArticleFetch = accountMetadata?.lastArticleFetch {
|
||||||
@ -310,8 +310,8 @@ final class FeedbinAPICaller: NSObject {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
let sinceString = FeedbinDate.formatter.string(from: since)
|
let sinceString = FeedbinDate.formatter.string(from: since)
|
||||||
var callURL = URLComponents(url: feedbinBaseURL.appendingPathComponent("feeds/\(feedID)/entries.json"), resolvingAgainstBaseURL: false)!
|
var callURL = URLComponents(url: feedbinBaseURL.appendingPathComponent("entries.json"), resolvingAgainstBaseURL: false)!
|
||||||
callURL.queryItems = [URLQueryItem(name: "since", value: sinceString)]
|
callURL.queryItems = [URLQueryItem(name: "since", value: sinceString), URLQueryItem(name: "per_page", value: "100")]
|
||||||
let request = URLRequest(url: callURL.url!, credentials: credentials)
|
let request = URLRequest(url: callURL.url!, credentials: credentials)
|
||||||
|
|
||||||
transport.send(request: request, resultType: [FeedbinEntry].self) { [weak self] result in
|
transport.send(request: request, resultType: [FeedbinEntry].self) { [weak self] result in
|
||||||
|
@ -850,37 +850,26 @@ private extension FeedbinAccountDelegate {
|
|||||||
|
|
||||||
os_log(.debug, log: log, "Refreshing articles...")
|
os_log(.debug, log: log, "Refreshing articles...")
|
||||||
|
|
||||||
let group = DispatchGroup()
|
caller.retrieveEntries() { [weak self] result in
|
||||||
|
|
||||||
for feed in account.flattenedFeeds() {
|
|
||||||
|
|
||||||
group.enter()
|
|
||||||
|
|
||||||
caller.retrieveEntries(feed.feedID) { [weak self] result in
|
switch result {
|
||||||
|
case .success(let (entries, page)):
|
||||||
|
|
||||||
switch result {
|
self?.processEntries(account: account, entries: entries) {
|
||||||
case .success(let (entries, page)):
|
self?.refreshArticles(account, page: page) {
|
||||||
|
guard let self = self else { return }
|
||||||
self?.processEntries(account: account, entries: entries) {
|
os_log(.debug, log: self.log, "Done refreshing articles.")
|
||||||
self?.refreshArticles(account, page: page) {
|
completion()
|
||||||
group.leave()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)) {
|
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)) {
|
func processEntries(account: Account, entries: [FeedbinEntry]?, completion: @escaping (() -> Void)) {
|
||||||
|
|
||||||
let parsedItems = mapEntriesToParsedItems(entries: entries)
|
let parsedItems = mapEntriesToParsedItems(entries: entries)
|
||||||
let parsedMap = Dictionary(grouping: parsedItems, by: { item in item.feedURL } )
|
let parsedMap = Dictionary(grouping: parsedItems, by: { item in item.feedURL } )
|
||||||
|
|
||||||
|
let group = DispatchGroup()
|
||||||
|
|
||||||
for (feedID, mapItems) in parsedMap {
|
for (feedID, mapItems) in parsedMap {
|
||||||
|
|
||||||
|
group.enter()
|
||||||
|
|
||||||
if let feed = account.idToFeedDictionary[feedID] {
|
if let feed = account.idToFeedDictionary[feedID] {
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
account.update(feed, parsedItems: Set(mapItems), defaultRead: true) {
|
account.update(feed, parsedItems: Set(mapItems), defaultRead: true) {
|
||||||
completion()
|
group.leave()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
group.notify(queue: DispatchQueue.main) {
|
||||||
|
completion()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user