Fetch the contents of the feed when first adding it

This commit is contained in:
Kiel Gillard 2019-10-09 19:38:16 +11:00
parent 614628883f
commit a965677687
2 changed files with 36 additions and 12 deletions

View File

@ -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)):

View File

@ -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):