diff --git a/Modules/Sources/WordPressKit/ReaderPostServiceRemote+Cards.swift b/Modules/Sources/WordPressKit/ReaderPostServiceRemote+Cards.swift index e5c45ef241ef..f89a47939e4c 100644 --- a/Modules/Sources/WordPressKit/ReaderPostServiceRemote+Cards.swift +++ b/Modules/Sources/WordPressKit/ReaderPostServiceRemote+Cards.swift @@ -14,6 +14,7 @@ public enum ReaderSortingOption: String, CaseIterable { public enum ReaderStream: String { case discover = "discover" + case freshlyPressed = "freshly-pressed" case firstPosts = "first-posts" } diff --git a/Modules/Sources/WordPressKitObjC/ReaderPostServiceRemote.m b/Modules/Sources/WordPressKitObjC/ReaderPostServiceRemote.m index bfb56a7bd80d..0e28369fcbf7 100644 --- a/Modules/Sources/WordPressKitObjC/ReaderPostServiceRemote.m +++ b/Modules/Sources/WordPressKitObjC/ReaderPostServiceRemote.m @@ -40,6 +40,10 @@ - (void)fetchPostsFromEndpoint:(NSURL *)endpoint if (algorithm) { params[ParamsKeyAlgorithm] = algorithm; } + // TODO: refactor (add a new parameter + if ([endpoint.path hasSuffix:@"/freshly-pressed"]) { + [params removeAllObjects]; + } [self fetchPostsFromEndpoint:endpoint withParameters:params success:success failure:failure]; } diff --git a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderDiscoverViewController.swift b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderDiscoverViewController.swift index c03c926ab802..ddf28cda1e04 100644 --- a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderDiscoverViewController.swift +++ b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderDiscoverViewController.swift @@ -7,7 +7,7 @@ import WordPressShared class ReaderDiscoverViewController: UIViewController, ReaderDiscoverHeaderViewDelegate { private let headerView = ReaderDiscoverHeaderView() - private var selectedChannel: ReaderDiscoverChannel = .recommended + private var selectedChannel: ReaderDiscoverChannel = .freshlyPresed private let topic: ReaderAbstractTopic private var streamVC: ReaderStreamViewController? private weak var selectInterestsVC: ReaderSelectInterestsViewController? @@ -83,7 +83,7 @@ class ReaderDiscoverViewController: UIViewController, ReaderDiscoverHeaderViewDe .filter { $0.slug != ReaderTagTopic.dailyPromptTag } .map(ReaderDiscoverChannel.tag) - headerView.configure(channels: [.recommended, .firstPosts, .latest, .dailyPrompts] + channels) + headerView.configure(channels: [.freshlyPresed, .recommended, .firstPosts, .latest, .dailyPrompts] + channels) headerView.setSelectedChannel(selectedChannel) } @@ -95,6 +95,8 @@ class ReaderDiscoverViewController: UIViewController, ReaderDiscoverHeaderViewDe private func makeViewController(for channel: ReaderDiscoverChannel) -> ReaderStreamViewController { switch channel { + case .freshlyPresed: + ReaderStreamViewController.controllerWithTopic(ReaderHelpers.getFreshlyPressedTopic()) case .recommended: ReaderDiscoverStreamViewController(topic: topic) case .firstPosts: diff --git a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderHelpers.swift b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderHelpers.swift index 8802271ecfa7..b27b78d586d2 100644 --- a/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderHelpers.swift +++ b/WordPress/Classes/ViewRelated/Reader/Controllers/ReaderHelpers.swift @@ -118,6 +118,18 @@ struct ReaderNotificationKeys { return topic.path.hasSuffix("/freshly-pressed") } + public static func getFreshlyPressedTopic(in context: NSManagedObjectContext = ContextManager.shared.mainContext) -> ReaderSiteTopic { + let path = "/rest/v1.2/freshly-pressed" + if let topic = try? ReaderSiteTopic.lookup(withFeedURL: path, in: context) { + return topic + } + let topic = context.insertNewObject(ofType: ReaderSiteTopic.self) + topic.feedURL = path + topic.path = path + try? context.save() + return topic + } + /// Check if the specified topic is for Discover /// /// - Parameters: diff --git a/WordPress/Classes/ViewRelated/Reader/Headers/ReaderDiscoverHeaderView.swift b/WordPress/Classes/ViewRelated/Reader/Headers/ReaderDiscoverHeaderView.swift index 0b70ce482680..47e035282930 100644 --- a/WordPress/Classes/ViewRelated/Reader/Headers/ReaderDiscoverHeaderView.swift +++ b/WordPress/Classes/ViewRelated/Reader/Headers/ReaderDiscoverHeaderView.swift @@ -191,6 +191,9 @@ private final class ReaderDiscoverChannelView: UIView { } enum ReaderDiscoverChannel: Hashable { + /// Curated posts. + case freshlyPresed + /// The default channel showing your selected tags. case recommended @@ -207,6 +210,8 @@ enum ReaderDiscoverChannel: Hashable { var localizedTitle: String { switch self { + case .freshlyPresed: + NSLocalizedString("reader.discover.channel.freshlyPresed", value: "Freshly Pressed", comment: "Header view channel (filter)") case .recommended: NSLocalizedString("reader.discover.channel.recommended", value: "Recommended", comment: "Header view channel (filter)") case .firstPosts: @@ -230,6 +235,7 @@ enum ReaderDiscoverChannel: Hashable { private var analyticsID: String { switch self { + case .freshlyPresed: "freshly_presed" case .recommended: "recommended" case .firstPosts: "first_posts" case .latest: "latest"