Skip to content

Commit 05e0f08

Browse files
committed
Add bookmarks filter to persistence so that filter reapplies on state restoration
1 parent f91aaf9 commit 05e0f08

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

App/Data Sources/ThreadListDataSource.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,34 @@ enum BookmarkFilter {
1717
case textSearch(String)
1818
}
1919

20+
extension BookmarkFilter {
21+
/// Returns nil for `.textSearch` so transient queries are not persisted.
22+
var persistenceKey: String? {
23+
switch self {
24+
case .all: return "all"
25+
case .unreadOnly: return "unread"
26+
case .readOnly: return "read"
27+
case .starCategory(let c): return "star_\(c.rawValue)"
28+
case .textSearch: return nil
29+
}
30+
}
31+
32+
init(persistenceKey: String) {
33+
switch persistenceKey {
34+
case "unread": self = .unreadOnly
35+
case "read": self = .readOnly
36+
case let s where s.hasPrefix("star_"):
37+
if let raw = Int16(s.dropFirst("star_".count)),
38+
let cat = StarCategory(rawValue: raw) {
39+
self = .starCategory(cat)
40+
} else {
41+
self = .all
42+
}
43+
default: self = .all
44+
}
45+
}
46+
}
47+
2048
private let Log = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "ThreadListDataSource")
2149

2250
final class ThreadListDataSource: NSObject {

App/View Controllers/Threads/BookmarksTableViewController.swift

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import UIKit
1313

1414
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "BookmarksTableViewController")
1515

16+
private enum UserDefaultsKey {
17+
static let bookmarksFilter = "BookmarksListFilter"
18+
}
19+
1620
private class FilterMenuViewController: UIViewController {
1721
// MARK: - Constants
1822
private enum Layout {
@@ -586,7 +590,12 @@ final class BookmarksTableViewController: TableViewController {
586590
@FoilDefaultStorage(Settings.showThreadTags) private var showThreadTags
587591
@FoilDefaultStorage(Settings.bookmarksSortedUnread) private var sortUnreadToTop
588592

589-
private var currentFilter: BookmarkFilter = .all
593+
private var currentFilter: BookmarkFilter = {
594+
if let saved = UserDefaults.standard.string(forKey: UserDefaultsKey.bookmarksFilter) {
595+
return BookmarkFilter(persistenceKey: saved)
596+
}
597+
return .all
598+
}()
590599
private var filterButton: UIBarButtonItem!
591600
private var filterButtonView: UIButton?
592601
private var searchButton: UIBarButtonItem!
@@ -823,9 +832,12 @@ final class BookmarksTableViewController: TableViewController {
823832

824833
private func applyFilter(_ filter: BookmarkFilter) {
825834
currentFilter = filter
835+
if let key = filter.persistenceKey {
836+
UserDefaults.standard.set(key, forKey: UserDefaultsKey.bookmarksFilter)
837+
}
826838
dataSource = makeDataSource()
827839
tableView.reloadData()
828-
840+
829841
updateButtonColors()
830842
}
831843

0 commit comments

Comments
 (0)