Fetch the contents of the feed when first adding it
This commit is contained in:
parent
614628883f
commit
a965677687
@ -90,6 +90,11 @@ final class FeedlyAPICaller {
|
||||
}
|
||||
|
||||
func getStream(for collection: FeedlyCollection, newerThan: Date? = nil, unreadOnly: Bool? = nil, completionHandler: @escaping (Result<FeedlyStream, Error>) -> ()) {
|
||||
let id = FeedlyCategoryResourceId(id: collection.id)
|
||||
getStream(for: id, newerThan: newerThan, unreadOnly: unreadOnly, completionHandler: completionHandler)
|
||||
}
|
||||
|
||||
func getStream(for resource: FeedlyResourceId, newerThan: Date?, unreadOnly: Bool?, completionHandler: @escaping (Result<FeedlyStream, Error>) -> ()) {
|
||||
guard let accessToken = credentials?.secret else {
|
||||
return DispatchQueue.main.async {
|
||||
completionHandler(.failure(CredentialsError.incompleteCredentials))
|
||||
@ -115,7 +120,7 @@ final class FeedlyAPICaller {
|
||||
|
||||
queryItems.append(contentsOf: [
|
||||
URLQueryItem(name: "count", value: "1000"),
|
||||
URLQueryItem(name: "streamId", value: collection.id),
|
||||
URLQueryItem(name: "streamId", value: resource.id),
|
||||
])
|
||||
|
||||
components.queryItems = queryItems
|
||||
@ -129,12 +134,6 @@ final class FeedlyAPICaller {
|
||||
request.addValue("application/json", forHTTPHeaderField: "Accept-Type")
|
||||
request.addValue("OAuth \(accessToken)", forHTTPHeaderField: HTTPRequestHeader.authorization)
|
||||
|
||||
// URLSession.shared.dataTask(with: request) { (data, response, error) in
|
||||
// let obj = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments)
|
||||
// let data = try! JSONSerialization.data(withJSONObject: obj, options: .prettyPrinted)
|
||||
// print(String(data: data, encoding: .utf8)!)
|
||||
// }.resume()
|
||||
|
||||
transport.send(request: request, resultType: FeedlyStream.self, dateDecoding: .millisecondsSince1970, keyDecoding: .convertFromSnakeCase) { result in
|
||||
switch result {
|
||||
case .success(let (_, collections)):
|
||||
|
@ -253,7 +253,7 @@ final class FeedlyAccountDelegate: AccountDelegate {
|
||||
let progress = refreshProgress
|
||||
progress.addToNumberOfTasksAndRemaining(1)
|
||||
|
||||
caller.addFeed(with: resourceId, title: name, toCollectionWith: collectionId) { result in
|
||||
caller.addFeed(with: resourceId, title: name, toCollectionWith: collectionId) { [weak self] result in
|
||||
progress.completeTask()
|
||||
|
||||
switch result {
|
||||
@ -271,10 +271,35 @@ final class FeedlyAccountDelegate: AccountDelegate {
|
||||
let feedsAfter = folder.flattenedFeeds()
|
||||
let added = feedsAfter.subtracting(feedsBefore)
|
||||
|
||||
if let feed = added.first {
|
||||
completion(.success(feed))
|
||||
} else {
|
||||
completion(.failure(AccountError.createErrorNotFound))
|
||||
guard let first = added.first else {
|
||||
return completion(.failure(AccountError.createErrorNotFound))
|
||||
}
|
||||
|
||||
let group = DispatchGroup()
|
||||
|
||||
if let self = self {
|
||||
for feed in added {
|
||||
group.enter()
|
||||
let resourceId = FeedlyFeedResourceId(id: feed.feedID)
|
||||
self.caller.getStream(for: resourceId, newerThan: nil, unreadOnly: nil) { result in
|
||||
switch result {
|
||||
case .success(let stream):
|
||||
let items = Set(stream.items.map { FeedlyEntryParser(entry: $0).parsedItemRepresentation })
|
||||
|
||||
account.update(feed, parsedItems: items, defaultRead: false) {
|
||||
group.leave()
|
||||
}
|
||||
|
||||
case .failure:
|
||||
// Feed will remain empty until new articles appear.
|
||||
group.leave()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
group.notify(queue: .main) {
|
||||
completion(.success(first))
|
||||
}
|
||||
|
||||
case .failure(let error):
|
||||
|
Loading…
x
Reference in New Issue
Block a user