From 01c48e788b727f3c30af272204db7fc62ff2ef80 Mon Sep 17 00:00:00 2001 From: Phil Viso Date: Sun, 8 Sep 2019 17:41:00 -0500 Subject: [PATCH] Implemented group by feed for iOS --- iOS/AppDefaults.swift | 17 +++++++++++++++-- iOS/SceneCoordinator.swift | 14 +++++++++++++- iOS/Settings/SettingsView.swift | 13 +++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/iOS/AppDefaults.swift b/iOS/AppDefaults.swift index 52b98d30d..98c59261a 100644 --- a/iOS/AppDefaults.swift +++ b/iOS/AppDefaults.swift @@ -12,10 +12,11 @@ struct AppDefaults { struct Key { static let firstRunDate = "firstRunDate" + static let timelineGroupByFeed = "timelineGroupByFeed" + static let timelineNumberOfLines = "timelineNumberOfLines" static let timelineSortDirection = "timelineSortDirection" static let refreshInterval = "refreshInterval" static let lastRefresh = "lastRefresh" - static let timelineNumberOfLines = "timelineNumberOfLines" } static let isFirstRun: Bool = { @@ -35,6 +36,15 @@ struct AppDefaults { UserDefaults.standard.set(newValue.rawValue, forKey: Key.refreshInterval) } } + + static var timelineGroupByFeed: Bool { + get { + return bool(for: Key.timelineGroupByFeed) + } + set { + setBool(for: Key.timelineGroupByFeed, newValue) + } + } static var timelineSortDirection: ComparisonResult { get { @@ -64,7 +74,10 @@ struct AppDefaults { } static func registerDefaults() { - let defaults: [String : Any] = [Key.timelineSortDirection: ComparisonResult.orderedDescending.rawValue, Key.refreshInterval: RefreshInterval.everyHour.rawValue, Key.timelineNumberOfLines: 3] + let defaults: [String : Any] = [Key.refreshInterval: RefreshInterval.everyHour.rawValue, + Key.timelineGroupByFeed: false, + Key.timelineNumberOfLines: 3, + Key.timelineSortDirection: ComparisonResult.orderedDescending.rawValue] UserDefaults.standard.register(defaults: defaults) } diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 8db81d157..eb3c97550 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -68,6 +68,13 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { } } } + private(set) var groupByFeed = AppDefaults.timelineGroupByFeed { + didSet { + if groupByFeed != oldValue { + groupByFeedDidChange() + } + } + } private let treeControllerDelegate = FeedTreeControllerDelegate() private lazy var treeController: TreeController = { @@ -412,6 +419,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { @objc func userDefaultsDidChange(_ note: Notification) { self.sortDirection = AppDefaults.timelineSortDirection + self.groupByFeed = AppDefaults.timelineGroupByFeed } @objc func accountDidDownloadArticles(_ note: Notification) { @@ -1344,8 +1352,12 @@ private extension SceneCoordinator { replaceArticles(with: Set(articles), animate: true) } + func groupByFeedDidChange() { + replaceArticles(with: Set(articles), animate: true) + } + func replaceArticles(with unsortedArticles: Set
, animate: Bool) { - let sortedArticles = Array(unsortedArticles).sortedByDate(sortDirection) + let sortedArticles = Array(unsortedArticles).sortedByDate(sortDirection, groupByFeed: groupByFeed) if articles != sortedArticles { diff --git a/iOS/Settings/SettingsView.swift b/iOS/Settings/SettingsView.swift index 3636dcaed..a293d534e 100644 --- a/iOS/Settings/SettingsView.swift +++ b/iOS/Settings/SettingsView.swift @@ -56,6 +56,9 @@ struct SettingsView : View { Toggle(isOn: $viewModel.sortOldestToNewest) { Text("Sort Oldest to Newest") } + Toggle(isOn: $viewModel.groupByFeed) { + Text("Group By Feed") + } Stepper(value: $viewModel.timelineNumberOfLines, in: 2...6) { Text("Number of Text Lines: \(viewModel.timelineNumberOfLines)") } @@ -221,6 +224,16 @@ struct SettingsView : View { } } + var groupByFeed: Bool { + get { + return AppDefaults.timelineGroupByFeed + } + set { + objectWillChange.send() + AppDefaults.timelineGroupByFeed = newValue + } + } + var timelineNumberOfLines: Int { get { return AppDefaults.timelineNumberOfLines