From f4a0c56a540754ac339505026f105c59528fec39 Mon Sep 17 00:00:00 2001 From: Anh Do Date: Fri, 13 Mar 2020 18:30:36 -0400 Subject: [PATCH] Use NewsBlur terminologies in models (Feed, Story) --- .../Account/Account.xcodeproj/project.pbxproj | 24 ++++---- ...rSubscription.swift => NewsBlurFeed.swift} | 28 ++++----- ...sBlurArticle.swift => NewsBlurStory.swift} | 20 +++---- .../Models/NewsBlurUnreadArticle.swift | 50 ---------------- .../NewsBlur/Models/NewsBlurUnreadStory.swift | 50 ++++++++++++++++ .../Account/NewsBlur/NewsBlurAPICaller.swift | 16 ++--- .../NewsBlur/NewsBlurAccountDelegate.swift | 58 +++++++++---------- 7 files changed, 123 insertions(+), 123 deletions(-) rename Frameworks/Account/NewsBlur/Models/{NewsBlurSubscription.swift => NewsBlurFeed.swift} (63%) rename Frameworks/Account/NewsBlur/Models/{NewsBlurArticle.swift => NewsBlurStory.swift} (64%) delete mode 100644 Frameworks/Account/NewsBlur/Models/NewsBlurUnreadArticle.swift create mode 100644 Frameworks/Account/NewsBlur/Models/NewsBlurUnreadStory.swift diff --git a/Frameworks/Account/Account.xcodeproj/project.pbxproj b/Frameworks/Account/Account.xcodeproj/project.pbxproj index 83dd24f7e..193e87830 100644 --- a/Frameworks/Account/Account.xcodeproj/project.pbxproj +++ b/Frameworks/Account/Account.xcodeproj/project.pbxproj @@ -7,12 +7,12 @@ objects = { /* Begin PBXBuildFile section */ - 179DB02FFBC17AC9798F0EBC /* NewsBlurArticle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB7399814F6FB3247825C /* NewsBlurArticle.swift */; }; + 179DB02FFBC17AC9798F0EBC /* NewsBlurStory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB7399814F6FB3247825C /* NewsBlurStory.swift */; }; 179DB28CF49F73A945EBF5DB /* NewsBlurLoginResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB088236E3236010462E8 /* NewsBlurLoginResponse.swift */; }; 179DB49A960F8B78C4924458 /* NewsBlurGenericCodingKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB66D933E976C29159DEE /* NewsBlurGenericCodingKeys.swift */; }; 179DB61D33CD8DC94C90F7ED /* NewsBlurDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DBB17C42E6E434EDC29FA /* NewsBlurDate.swift */; }; - 179DBED55C9B4D6A413486C1 /* NewsBlurUnreadArticle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB818180A51098A9816B2 /* NewsBlurUnreadArticle.swift */; }; - 179DBF4DE2562D4C532F6008 /* NewsBlurSubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB1B909672E0E807B5E8C /* NewsBlurSubscription.swift */; }; + 179DBED55C9B4D6A413486C1 /* NewsBlurUnreadStory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB818180A51098A9816B2 /* NewsBlurUnreadStory.swift */; }; + 179DBF4DE2562D4C532F6008 /* NewsBlurFeed.swift in Sources */ = {isa = PBXBuildFile; fileRef = 179DB1B909672E0E807B5E8C /* NewsBlurFeed.swift */; }; 3B3A33E7238D3D6800314204 /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A33E6238D3D6800314204 /* Secrets.swift */; }; 3B826DA72385C81C00FC1ADB /* FeedWranglerAuthorizationResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B826D9E2385C81C00FC1ADB /* FeedWranglerAuthorizationResult.swift */; }; 3B826DA82385C81C00FC1ADB /* FeedWranglerFeedItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B826D9F2385C81C00FC1ADB /* FeedWranglerFeedItem.swift */; }; @@ -229,10 +229,10 @@ /* Begin PBXFileReference section */ 179DB088236E3236010462E8 /* NewsBlurLoginResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurLoginResponse.swift; sourceTree = ""; }; - 179DB1B909672E0E807B5E8C /* NewsBlurSubscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurSubscription.swift; sourceTree = ""; }; + 179DB1B909672E0E807B5E8C /* NewsBlurFeed.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurFeed.swift; sourceTree = ""; }; 179DB66D933E976C29159DEE /* NewsBlurGenericCodingKeys.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurGenericCodingKeys.swift; sourceTree = ""; }; - 179DB7399814F6FB3247825C /* NewsBlurArticle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurArticle.swift; sourceTree = ""; }; - 179DB818180A51098A9816B2 /* NewsBlurUnreadArticle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurUnreadArticle.swift; sourceTree = ""; }; + 179DB7399814F6FB3247825C /* NewsBlurStory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurStory.swift; sourceTree = ""; }; + 179DB818180A51098A9816B2 /* NewsBlurUnreadStory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurUnreadStory.swift; sourceTree = ""; }; 179DBB17C42E6E434EDC29FA /* NewsBlurDate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewsBlurDate.swift; sourceTree = ""; }; 3B3A33E6238D3D6800314204 /* Secrets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Secrets.swift; path = ../../Shared/Secrets.swift; sourceTree = ""; }; 3B826D9E2385C81C00FC1ADB /* FeedWranglerAuthorizationResult.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeedWranglerAuthorizationResult.swift; sourceTree = ""; }; @@ -455,10 +455,10 @@ isa = PBXGroup; children = ( 179DB088236E3236010462E8 /* NewsBlurLoginResponse.swift */, - 179DB1B909672E0E807B5E8C /* NewsBlurSubscription.swift */, - 179DB7399814F6FB3247825C /* NewsBlurArticle.swift */, + 179DB1B909672E0E807B5E8C /* NewsBlurFeed.swift */, + 179DB7399814F6FB3247825C /* NewsBlurStory.swift */, 179DB66D933E976C29159DEE /* NewsBlurGenericCodingKeys.swift */, - 179DB818180A51098A9816B2 /* NewsBlurUnreadArticle.swift */, + 179DB818180A51098A9816B2 /* NewsBlurUnreadStory.swift */, 179DBB17C42E6E434EDC29FA /* NewsBlurDate.swift */, ); path = Models; @@ -1150,10 +1150,10 @@ 769F295938E5A30D03DFF88F /* NewsBlurAccountDelegate.swift in Sources */, 769F2BA02EF5F329CDE45F5A /* NewsBlurAPICaller.swift in Sources */, 179DB28CF49F73A945EBF5DB /* NewsBlurLoginResponse.swift in Sources */, - 179DBF4DE2562D4C532F6008 /* NewsBlurSubscription.swift in Sources */, - 179DB02FFBC17AC9798F0EBC /* NewsBlurArticle.swift in Sources */, + 179DBF4DE2562D4C532F6008 /* NewsBlurFeed.swift in Sources */, + 179DB02FFBC17AC9798F0EBC /* NewsBlurStory.swift in Sources */, 179DB49A960F8B78C4924458 /* NewsBlurGenericCodingKeys.swift in Sources */, - 179DBED55C9B4D6A413486C1 /* NewsBlurUnreadArticle.swift in Sources */, + 179DBED55C9B4D6A413486C1 /* NewsBlurUnreadStory.swift in Sources */, 179DB61D33CD8DC94C90F7ED /* NewsBlurDate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Frameworks/Account/NewsBlur/Models/NewsBlurSubscription.swift b/Frameworks/Account/NewsBlur/Models/NewsBlurFeed.swift similarity index 63% rename from Frameworks/Account/NewsBlur/Models/NewsBlurSubscription.swift rename to Frameworks/Account/NewsBlur/Models/NewsBlurFeed.swift index 35b9a8d6c..b4f24d1d0 100644 --- a/Frameworks/Account/NewsBlur/Models/NewsBlurSubscription.swift +++ b/Frameworks/Account/NewsBlur/Models/NewsBlurFeed.swift @@ -1,5 +1,5 @@ // -// NewsBlurSubscription.swift +// NewsBlurFeed.swift // Account // // Created by Anh Quang Do on 2020-03-09. @@ -10,13 +10,13 @@ import Foundation import RSCore import RSParser -typealias NewsBlurSubscription = NewsBlurFeedsResponse.Subscription +typealias NewsBlurFeed = NewsBlurFeedsResponse.Feed struct NewsBlurFeedsResponse: Decodable { - let subscriptions: [Subscription] + let feeds: [Feed] let folders: [Folder] - struct Subscription: Hashable, Codable { + struct Feed: Hashable, Codable { let title: String let feedId: Int let feedURL: String @@ -26,7 +26,7 @@ struct NewsBlurFeedsResponse: Decodable { struct Folder: Hashable, Codable { let name: String - let subscriptionIds: [Int] + let feedIds: [Int] } } @@ -40,12 +40,12 @@ extension NewsBlurFeedsResponse { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) - // Parse subscriptions - var subscriptions: [Subscription] = [] - let subscriptionContainer = try container.nestedContainer(keyedBy: NewsBlurGenericCodingKeys.self, forKey: .feeds) - try subscriptionContainer.allKeys.forEach { key in - let subscription = try subscriptionContainer.decode(Subscription.self, forKey: key) - subscriptions.append(subscription) + // Parse feeds + var feeds: [Feed] = [] + let feedContainer = try container.nestedContainer(keyedBy: NewsBlurGenericCodingKeys.self, forKey: .feeds) + try feedContainer.allKeys.forEach { key in + let subscription = try feedContainer.decode(Feed.self, forKey: key) + feeds.append(subscription) } // Parse folders @@ -53,17 +53,17 @@ extension NewsBlurFeedsResponse { let folderContainer = try container.nestedContainer(keyedBy: NewsBlurGenericCodingKeys.self, forKey: .folders) try folderContainer.allKeys.forEach { key in let subscriptionIds = try folderContainer.decode([Int].self, forKey: key) - let folder = Folder(name: key.stringValue, subscriptionIds: subscriptionIds) + let folder = Folder(name: key.stringValue, feedIds: subscriptionIds) folders.append(folder) } - self.subscriptions = subscriptions + self.feeds = feeds self.folders = folders } } -extension NewsBlurFeedsResponse.Subscription { +extension NewsBlurFeedsResponse.Feed { private enum CodingKeys: String, CodingKey { case title = "feed_title" case feedId = "id" diff --git a/Frameworks/Account/NewsBlur/Models/NewsBlurArticle.swift b/Frameworks/Account/NewsBlur/Models/NewsBlurStory.swift similarity index 64% rename from Frameworks/Account/NewsBlur/Models/NewsBlurArticle.swift rename to Frameworks/Account/NewsBlur/Models/NewsBlurStory.swift index 39a1d54bf..f37ee421c 100644 --- a/Frameworks/Account/NewsBlur/Models/NewsBlurArticle.swift +++ b/Frameworks/Account/NewsBlur/Models/NewsBlurStory.swift @@ -1,5 +1,5 @@ // -// NewsBlurArticle.swift +// NewsBlurStory.swift // Account // // Created by Anh Quang Do on 2020-03-10. @@ -10,13 +10,13 @@ import Foundation import RSCore import RSParser -typealias NewsBlurArticle = NewsBlurArticlesResponse.Article +typealias NewsBlurStory = NewsBlurStoriesResponse.Story -struct NewsBlurArticlesResponse: Decodable { - let articles: [Article] +struct NewsBlurStoriesResponse: Decodable { + let stories: [Story] - struct Article: Decodable { - let articleId: String + struct Story: Decodable { + let storyId: String let feedId: Int let title: String? let url: String? @@ -26,15 +26,15 @@ struct NewsBlurArticlesResponse: Decodable { } } -extension NewsBlurArticlesResponse { +extension NewsBlurStoriesResponse { private enum CodingKeys: String, CodingKey { - case articles = "stories" + case stories = "stories" } } -extension NewsBlurArticlesResponse.Article { +extension NewsBlurStoriesResponse.Story { private enum CodingKeys: String, CodingKey { - case articleId = "story_hash" + case storyId = "story_hash" case feedId = "story_feed_id" case title = "story_title" case url = "story_permalink" diff --git a/Frameworks/Account/NewsBlur/Models/NewsBlurUnreadArticle.swift b/Frameworks/Account/NewsBlur/Models/NewsBlurUnreadArticle.swift deleted file mode 100644 index ad316d0a8..000000000 --- a/Frameworks/Account/NewsBlur/Models/NewsBlurUnreadArticle.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// NewsBlurUnreadArticle.swift -// Account -// -// Created by Anh Quang Do on 2020-03-13. -// Copyright (c) 2020 Ranchero Software, LLC. All rights reserved. -// - -import Foundation -import RSCore -import RSParser - -typealias NewsBlurArticleHash = NewsBlurUnreadArticleHashesResponse.ArticleHash - -struct NewsBlurUnreadArticleHashesResponse: Decodable { - let subscriptions: [String: [ArticleHash]] - - struct ArticleHash: Hashable, Codable { - var hash: String - var timestamp: Date - } -} - -extension NewsBlurUnreadArticleHashesResponse { - private enum CodingKeys: String, CodingKey { - case feeds = "unread_feed_story_hashes" - } - - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CodingKeys.self) - - // Parse subscriptions - var subscriptions: [String: [ArticleHash]] = [:] - let subscriptionContainer = try container.nestedContainer(keyedBy: NewsBlurGenericCodingKeys.self, forKey: .feeds) - try subscriptionContainer.allKeys.forEach { key in - subscriptions[key.stringValue] = [] - var hashArrayContainer = try subscriptionContainer.nestedUnkeyedContainer(forKey: key) - while !hashArrayContainer.isAtEnd { - var hashContainer = try hashArrayContainer.nestedUnkeyedContainer() - let hash = try hashContainer.decode(String.self) - let timestamp = try hashContainer.decode(Date.self) - let articleHash = ArticleHash(hash: hash, timestamp: timestamp) - - subscriptions[key.stringValue]?.append(articleHash) - } - } - - self.subscriptions = subscriptions - } -} diff --git a/Frameworks/Account/NewsBlur/Models/NewsBlurUnreadStory.swift b/Frameworks/Account/NewsBlur/Models/NewsBlurUnreadStory.swift new file mode 100644 index 000000000..25a123770 --- /dev/null +++ b/Frameworks/Account/NewsBlur/Models/NewsBlurUnreadStory.swift @@ -0,0 +1,50 @@ +// +// NewsBlurUnreadStory.swift +// Account +// +// Created by Anh Quang Do on 2020-03-13. +// Copyright (c) 2020 Ranchero Software, LLC. All rights reserved. +// + +import Foundation +import RSCore +import RSParser + +typealias NewsBlurStoryHash = NewsBlurUnreadStoryHashesResponse.StoryHash + +struct NewsBlurUnreadStoryHashesResponse: Decodable { + let feeds: [String: [StoryHash]] + + struct StoryHash: Hashable, Codable { + var hash: String + var timestamp: Date + } +} + +extension NewsBlurUnreadStoryHashesResponse { + private enum CodingKeys: String, CodingKey { + case feeds = "unread_feed_story_hashes" + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + // Parse feeds + var feeds: [String: [StoryHash]] = [:] + let feedContainer = try container.nestedContainer(keyedBy: NewsBlurGenericCodingKeys.self, forKey: .feeds) + try feedContainer.allKeys.forEach { key in + feeds[key.stringValue] = [] + var hashArrayContainer = try feedContainer.nestedUnkeyedContainer(forKey: key) + while !hashArrayContainer.isAtEnd { + var hashContainer = try hashArrayContainer.nestedUnkeyedContainer() + let hash = try hashContainer.decode(String.self) + let timestamp = try hashContainer.decode(Date.self) + let storyHash = StoryHash(hash: hash, timestamp: timestamp) + + feeds[key.stringValue]?.append(storyHash) + } + } + + self.feeds = feeds + } +} diff --git a/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift b/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift index c9b5e2c48..4dbe44ddf 100644 --- a/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift +++ b/Frameworks/Account/NewsBlur/NewsBlurAPICaller.swift @@ -84,7 +84,7 @@ final class NewsBlurAPICaller: NSObject { } } - func retrieveSubscriptions(completion: @escaping (Result<[NewsBlurSubscription]?, Error>) -> Void) { + func retrieveFeeds(completion: @escaping (Result<[NewsBlurFeed]?, Error>) -> Void) { let url = baseURL .appendingPathComponent("reader/feeds") .appendingQueryItems([ @@ -101,14 +101,14 @@ final class NewsBlurAPICaller: NSObject { transport.send(request: request, resultType: NewsBlurFeedsResponse.self) { result in switch result { case .success((_, let payload)): - completion(.success(payload?.subscriptions)) + completion(.success(payload?.feeds)) case .failure(let error): completion(.failure(error)) } } } - func retrieveUnreadArticleHashes(completion: @escaping (Result<[NewsBlurArticleHash]?, Error>) -> Void) { + func retrieveUnreadStoryHashes(completion: @escaping (Result<[NewsBlurStoryHash]?, Error>) -> Void) { let url = baseURL .appendingPathComponent("reader/unread_story_hashes") .appendingQueryItems([ @@ -121,17 +121,17 @@ final class NewsBlurAPICaller: NSObject { } let request = URLRequest(url: callURL, credentials: credentials) - transport.send(request: request, resultType: NewsBlurUnreadArticleHashesResponse.self, dateDecoding: .secondsSince1970) { result in + transport.send(request: request, resultType: NewsBlurUnreadStoryHashesResponse.self, dateDecoding: .secondsSince1970) { result in switch result { case .success((_, let payload)): - completion(.success(payload?.subscriptions.values.flatMap { $0 })) + completion(.success(payload?.feeds.values.flatMap { $0 })) case .failure(let error): completion(.failure(error)) } } } - func retrieveArticles(hashes: [NewsBlurArticleHash], completion: @escaping (Result<[NewsBlurArticle]?, Error>) -> Void) { + func retrieveStories(hashes: [NewsBlurStoryHash], completion: @escaping (Result<[NewsBlurStory]?, Error>) -> Void) { let url = baseURL .appendingPathComponent("reader/river_stories") .appendingQueryItem(.init(name: "include_hidden", value: "true"))? @@ -143,10 +143,10 @@ final class NewsBlurAPICaller: NSObject { } let request = URLRequest(url: callURL, credentials: credentials) - transport.send(request: request, resultType: NewsBlurArticlesResponse.self, dateDecoding: .formatted(NewsBlurDate.yyyyMMddHHmmss)) { result in + transport.send(request: request, resultType: NewsBlurStoriesResponse.self, dateDecoding: .formatted(NewsBlurDate.yyyyMMddHHmmss)) { result in switch result { case .success((_, let payload)): - completion(.success(payload?.articles)) + completion(.success(payload?.stories)) case .failure(let error): completion(.failure(error)) } diff --git a/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift b/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift index 2b08ee7b3..cf608504e 100644 --- a/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift +++ b/Frameworks/Account/NewsBlur/NewsBlurAccountDelegate.swift @@ -60,7 +60,7 @@ final class NewsBlurAccountDelegate: AccountDelegate { func refreshAll(for account: Account, completion: @escaping (Result) -> ()) { self.refreshProgress.addToNumberOfTasksAndRemaining(5) - refreshSubscriptions(for: account) { result in + refreshFeeds(for: account) { result in self.refreshProgress.completeTask() switch result { @@ -75,12 +75,12 @@ final class NewsBlurAccountDelegate: AccountDelegate { switch result { case .success: - self.refreshArticles(for: account) { result in + self.refreshStories(for: account) { result in self.refreshProgress.completeTask() switch result { case .success: - self.refreshMissingArticles(for: account) { result in + self.refreshMissingStories(for: account) { result in self.refreshProgress.completeTask() switch result { @@ -123,23 +123,23 @@ final class NewsBlurAccountDelegate: AccountDelegate { completion(.success(())) } - func refreshArticles(for account: Account, completion: @escaping (Result) -> Void) { - os_log(.debug, log: log, "Refreshing articles...") - os_log(.debug, log: log, "Refreshing unread articles...") + func refreshStories(for account: Account, completion: @escaping (Result) -> Void) { + os_log(.debug, log: log, "Refreshing stories...") + os_log(.debug, log: log, "Refreshing unread stories...") - caller.retrieveUnreadArticleHashes { result in + caller.retrieveUnreadStoryHashes { result in switch result { - case .success(let articleHashes): + case .success(let storyHashes): self.refreshProgress.completeTask() - self.refreshUnreadArticles(for: account, hashes: articleHashes, updateFetchDate: nil, completion: completion) + self.refreshUnreadStories(for: account, hashes: storyHashes, updateFetchDate: nil, completion: completion) case .failure(let error): completion(.failure(error)) } } } - func refreshUnreadArticles(for account: Account, hashes: [NewsBlurArticleHash]?, updateFetchDate: Date?, completion: @escaping (Result) -> Void) { + func refreshUnreadStories(for account: Account, hashes: [NewsBlurStoryHash]?, updateFetchDate: Date?, completion: @escaping (Result) -> Void) { guard let hashes = hashes, !hashes.isEmpty else { if let lastArticleFetch = updateFetchDate { self.accountMetadata?.lastArticleFetchStartTime = lastArticleFetch @@ -149,13 +149,13 @@ final class NewsBlurAccountDelegate: AccountDelegate { return } - let numberOfArticles = min(hashes.count, 100) // api limit - let hashesToFetch = Array(hashes[..)-> Void) { + func refreshMissingStories(for account: Account, completion: @escaping (Result)-> Void) { completion(.success(())) } - func processArticles(account: Account, articles: [NewsBlurArticle]?, completion: @escaping DatabaseCompletionBlock) { - let parsedItems = mapArticlesToParsedItems(articles: articles) + func processStories(account: Account, stories: [NewsBlurStory]?, completion: @escaping DatabaseCompletionBlock) { + let parsedItems = mapStoriesToParsedItems(stories: stories) let webFeedIDsAndItems = Dictionary(grouping: parsedItems, by: { item in item.feedURL } ).mapValues { Set($0) } account.update(webFeedIDsAndItems: webFeedIDsAndItems, defaultRead: true, completion: completion) } - func mapArticlesToParsedItems(articles: [NewsBlurArticle]?) -> Set { - guard let articles = articles else { + func mapStoriesToParsedItems(stories: [NewsBlurStory]?) -> Set { + guard let stories = stories else { return Set() } - let parsedItems: [ParsedItem] = articles.map { article in - let author = Set([ParsedAuthor(name: article.authorName, url: nil, avatarURL: nil, emailAddress: nil)]) - return ParsedItem(syncServiceID: article.articleId, uniqueID: String(article.articleId), feedURL: String(article.feedId), url: article.url, externalURL: nil, title: article.title, contentHTML: article.contentHTML, contentText: nil, summary: nil, imageURL: nil, bannerImageURL: nil, datePublished: article.datePublished, dateModified: nil, authors: author, tags: nil, attachments: nil) + let parsedItems: [ParsedItem] = stories.map { story in + let author = Set([ParsedAuthor(name: story.authorName, url: nil, avatarURL: nil, emailAddress: nil)]) + return ParsedItem(syncServiceID: story.storyId, uniqueID: String(story.storyId), feedURL: String(story.feedId), url: story.url, externalURL: nil, title: story.title, contentHTML: story.contentHTML, contentText: nil, summary: nil, imageURL: nil, bannerImageURL: nil, datePublished: story.datePublished, dateModified: nil, authors: author, tags: nil, attachments: nil) } return Set(parsedItems) @@ -271,13 +271,13 @@ final class NewsBlurAccountDelegate: AccountDelegate { } extension NewsBlurAccountDelegate { - private func refreshSubscriptions(for account: Account, completion: @escaping (Result) -> Void) { - os_log(.debug, log: log, "Refreshing subscriptions...") + private func refreshFeeds(for account: Account, completion: @escaping (Result) -> Void) { + os_log(.debug, log: log, "Refreshing feeds...") - caller.retrieveSubscriptions { result in + caller.retrieveFeeds { result in switch result { - case .success(let subscriptions): - print(subscriptions) + case .success(let feeds): + print(feeds) completion(.success(())) case .failure(let error): completion(.failure(error))