diff --git a/Frameworks/Account/Feedly/FeedlyAPICaller.swift b/Frameworks/Account/Feedly/FeedlyAPICaller.swift index 5ef56bb1a..4d93167af 100644 --- a/Frameworks/Account/Feedly/FeedlyAPICaller.swift +++ b/Frameworks/Account/Feedly/FeedlyAPICaller.swift @@ -90,6 +90,11 @@ final class FeedlyAPICaller { } func getStream(for collection: FeedlyCollection, newerThan: Date? = nil, unreadOnly: Bool? = nil, completionHandler: @escaping (Result) -> ()) { + 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) -> ()) { 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)): diff --git a/Frameworks/Account/Feedly/FeedlyAccountDelegate.swift b/Frameworks/Account/Feedly/FeedlyAccountDelegate.swift index c510f7da5..32d0b459d 100644 --- a/Frameworks/Account/Feedly/FeedlyAccountDelegate.swift +++ b/Frameworks/Account/Feedly/FeedlyAccountDelegate.swift @@ -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):