diff --git a/main/Common Classes/Prefs.swift b/main/Common Classes/Prefs.swift index d7e8a88..23da221 100644 --- a/main/Common Classes/Prefs.swift +++ b/main/Common Classes/Prefs.swift @@ -1,58 +1,58 @@ import Foundation -enum Pref { - static func Int(_ key: String) -> Int { UserDefaults.standard.integer(forKey: key) } - static func Int(_ val: Int, _ key: String) { UserDefaults.standard.set(val, forKey: key) } - static func Bool(_ key: String) -> Bool { UserDefaults.standard.bool(forKey: key) } - static func Bool(_ val: Bool, _ key: String) { UserDefaults.standard.set(val, forKey: key) } - static func `Any`(_ key: String) -> Any? { UserDefaults.standard.object(forKey: key) } - static func `Any`(_ val: Any?, _ key: String) { UserDefaults.standard.set(val, forKey: key) } +enum Prefs { + private static func Int(_ key: String) -> Int { UserDefaults.standard.integer(forKey: key) } + private static func Int(_ val: Int, _ key: String) { UserDefaults.standard.set(val, forKey: key) } + private static func Bool(_ key: String) -> Bool { UserDefaults.standard.bool(forKey: key) } + private static func Bool(_ val: Bool, _ key: String) { UserDefaults.standard.set(val, forKey: key) } + private static func `Any`(_ key: String) -> Any? { UserDefaults.standard.object(forKey: key) } + private static func `Any`(_ val: Any?, _ key: String) { UserDefaults.standard.set(val, forKey: key) } enum DidShowTutorial { static var Welcome: Bool { - get { Pref.Bool("didShowTutorialAppWelcome") } - set { Pref.Bool(newValue, "didShowTutorialAppWelcome") } + get { Prefs.Bool("didShowTutorialAppWelcome") } + set { Prefs.Bool(newValue, "didShowTutorialAppWelcome") } } static var Recordings: Bool { - get { Pref.Bool("didShowTutorialRecordings") } - set { Pref.Bool(newValue, "didShowTutorialRecordings") } + get { Prefs.Bool("didShowTutorialRecordings") } + set { Prefs.Bool(newValue, "didShowTutorialRecordings") } } } enum ContextAnalyis { static var CoOccurrenceTime: Int? { - get { Pref.Any("contextAnalyisCoOccurrenceTime") as? Int } - set { Pref.Any(newValue, "contextAnalyisCoOccurrenceTime") } + get { Prefs.Any("contextAnalyisCoOccurrenceTime") as? Int } + set { Prefs.Any(newValue, "contextAnalyisCoOccurrenceTime") } } } enum DateFilter { static var Kind: DateFilterKind { - get { DateFilterKind(rawValue: Pref.Int("dateFilterType"))! } - set { Pref.Int(newValue.rawValue, "dateFilterType") } + get { DateFilterKind(rawValue: Prefs.Int("dateFilterType"))! } + set { Prefs.Int(newValue.rawValue, "dateFilterType") } } /// Default: `0` (disabled) static var LastXMin: Int { - get { Pref.Int("dateFilterLastXMin") } - set { Pref.Int(newValue, "dateFilterLastXMin") } + get { Prefs.Int("dateFilterLastXMin") } + set { Prefs.Int(newValue, "dateFilterLastXMin") } } /// Default: `nil` (disabled) static var RangeA: Timestamp? { - get { Pref.Any("dateFilterRangeA") as? Timestamp } - set { Pref.Any(newValue, "dateFilterRangeA") } + get { Prefs.Any("dateFilterRangeA") as? Timestamp } + set { Prefs.Any(newValue, "dateFilterRangeA") } } /// Default: `nil` (disabled) static var RangeB: Timestamp? { - get { Pref.Any("dateFilterRangeB") as? Timestamp } - set { Pref.Any(newValue, "dateFilterRangeB") } + get { Prefs.Any("dateFilterRangeB") as? Timestamp } + set { Prefs.Any(newValue, "dateFilterRangeB") } } /// default: `.Date` static var OrderBy: DateFilterOrderBy { - get { DateFilterOrderBy(rawValue: Pref.Int("dateFilterOderType"))! } - set { Pref.Int(newValue.rawValue, "dateFilterOderType") } + get { DateFilterOrderBy(rawValue: Prefs.Int("dateFilterOderType"))! } + set { Prefs.Int(newValue.rawValue, "dateFilterOderType") } } /// default: `false` (Desc) static var OrderAsc: Bool { - get { Pref.Bool("dateFilterOderAsc") } - set { Pref.Bool(newValue, "dateFilterOderAsc") } + get { Prefs.Bool("dateFilterOderAsc") } + set { Prefs.Bool(newValue, "dateFilterOderAsc") } } /// - Returns: Timestamp restriction depending on current selected date filter. @@ -63,8 +63,8 @@ enum Pref { let type = Kind switch type { case .Off: return (type, nil, nil) - case .LastXMin: return (type, Timestamp.past(minutes: Pref.DateFilter.LastXMin), nil) - case .ABRange: return (type, Pref.DateFilter.RangeA, Pref.DateFilter.RangeB) + case .LastXMin: return (type, Timestamp.past(minutes: Prefs.DateFilter.LastXMin), nil) + case .ABRange: return (type, Prefs.DateFilter.RangeA, Prefs.DateFilter.RangeB) } } } diff --git a/main/Data Source/GroupedDomainDataSource.swift b/main/Data Source/GroupedDomainDataSource.swift index d292d5e..3bc8275 100644 --- a/main/Data Source/GroupedDomainDataSource.swift +++ b/main/Data Source/GroupedDomainDataSource.swift @@ -55,8 +55,8 @@ class GroupedDomainDataSource: FilterPipelineDelegate, SyncUpdateDelegate { /// Read user defaults and apply new sorting order. Either by setting a new or reversing the current. /// - Parameter force: If `true` set new sorting even if the type does not differ. private func resetSortingOrder(force: Bool = false) { - let orderAscChanged = (orderAsc <-? Pref.DateFilter.OrderAsc) - let orderTypChanged = (currentOrder <-? Pref.DateFilter.OrderBy) + let orderAscChanged = (orderAsc <-? Prefs.DateFilter.OrderAsc) + let orderTypChanged = (currentOrder <-? Prefs.DateFilter.OrderBy) if orderTypChanged || force { switch currentOrder { case .Date: diff --git a/main/Data Source/SyncUpdate.swift b/main/Data Source/SyncUpdate.swift index b806366..74b58d1 100644 --- a/main/Data Source/SyncUpdate.swift +++ b/main/Data Source/SyncUpdate.swift @@ -19,7 +19,7 @@ class SyncUpdate { init(periodic interval: TimeInterval) { - (filterType, tsEarliest, tsLatest) = Pref.DateFilter.restrictions() + (filterType, tsEarliest, tsLatest) = Prefs.DateFilter.restrictions() reloadRangeFromDB() NotifyDateFilterChanged.observe(call: #selector(didChangeDateFilter), on: self) @@ -33,7 +33,7 @@ class SyncUpdate { /// Callback fired when user changes `DateFilter` on root tableView controller @objc private func didChangeDateFilter() { self.pause() - let filter = Pref.DateFilter.restrictions() + let filter = Prefs.DateFilter.restrictions() filterType = filter.type DispatchQueue.global().async { // Not necessary, but improve execution order (delete then insert). @@ -109,7 +109,7 @@ class SyncUpdate { } } if filterType == .LastXMin { - set(newEarliest: Timestamp.past(minutes: Pref.DateFilter.LastXMin)) + set(newEarliest: Timestamp.past(minutes: Prefs.DateFilter.LastXMin)) } // TODO: periodic hard delete old logs (will reset rowids!) } diff --git a/main/Recordings/VCRecordings.swift b/main/Recordings/VCRecordings.swift index 7ded67a..5426c00 100644 --- a/main/Recordings/VCRecordings.swift +++ b/main/Recordings/VCRecordings.swift @@ -17,7 +17,7 @@ class VCRecordings: UIViewController, UINavigationControllerDelegate { updateUI(setRecording: false, animated: false) currentRecording = RecordingsDB.getCurrent() - if !Pref.DidShowTutorial.Recordings { + if !Prefs.DidShowTutorial.Recordings { self.perform(#selector(showTutorial), with: nil, afterDelay: 0.5) } } @@ -134,7 +134,7 @@ class VCRecordings: UIViewController, UINavigationControllerDelegate { )) x.buttonTitleDone = "Got it" x.present { - Pref.DidShowTutorial.Recordings = true + Prefs.DidShowTutorial.Recordings = true } } } diff --git a/main/Requests/Analytics/VCCoOccurrence.swift b/main/Requests/Analytics/VCCoOccurrence.swift index ec4e9fa..9b634ba 100644 --- a/main/Requests/Analytics/VCCoOccurrence.swift +++ b/main/Requests/Analytics/VCCoOccurrence.swift @@ -15,7 +15,7 @@ class VCCoOccurrence: UIViewController, UITableViewDataSource { override func viewDidLoad() { super.viewDidLoad() - selectedTime = Pref.ContextAnalyis.CoOccurrenceTime ?? 5 // calls `didSet` and `logTimeDelta` + selectedTime = Prefs.ContextAnalyis.CoOccurrenceTime ?? 5 // calls `didSet` and `logTimeDelta` timeSegment.removeAllSegments() // clear IB values for (i, time) in availableTimes.enumerated() { timeSegment.insertSegment(withTitle: TimeFormat(.abbreviated).from(seconds: time), at: i, animated: false) @@ -58,7 +58,7 @@ class VCCoOccurrence: UIViewController, UITableViewDataSource { @IBAction func didChangeTime(_ sender: UISegmentedControl) { selectedTime = availableTimes[sender.selectedSegmentIndex] - Pref.ContextAnalyis.CoOccurrenceTime = selectedTime + Prefs.ContextAnalyis.CoOccurrenceTime = selectedTime reloadDataSource() } diff --git a/main/Requests/TVCDomains.swift b/main/Requests/TVCDomains.swift index 7aec3ef..479e0e8 100644 --- a/main/Requests/TVCDomains.swift +++ b/main/Requests/TVCDomains.swift @@ -38,12 +38,12 @@ class TVCDomains: UITableViewController, UISearchBarDelegate, GroupedDomainDataS } @objc private func didChangeDateFilter() { - switch Pref.DateFilter.Kind { + switch Prefs.DateFilter.Kind { case .ABRange: // read start/end time self.filterButtonDetail.title = "A – B" self.filterButton.image = UIImage(named: "filter-filled") case .LastXMin: // most recent - let lastXMin = Pref.DateFilter.LastXMin + let lastXMin = Prefs.DateFilter.LastXMin if lastXMin == 0 { fallthrough } self.filterButtonDetail.title = TimeFormat(.abbreviated).from(minutes: lastXMin) self.filterButton.image = UIImage(named: "filter-filled") diff --git a/main/Requests/VCDateFilter.swift b/main/Requests/VCDateFilter.swift index 54cda65..95401be 100644 --- a/main/Requests/VCDateFilter.swift +++ b/main/Requests/VCDateFilter.swift @@ -18,8 +18,8 @@ class VCDateFilter: UIViewController, UIGestureRecognizerDelegate { @IBOutlet private var rangeView: UIView! @IBOutlet private var buttonRangeStart: UIButton! @IBOutlet private var buttonRangeEnd: UIButton! - private lazy var tsRangeA: Timestamp = Pref.DateFilter.RangeA ?? AppDB?.dnsLogsMinDate() ?? .now() - private lazy var tsRangeB: Timestamp = Pref.DateFilter.RangeB ?? .now() + private lazy var tsRangeA: Timestamp = Prefs.DateFilter.RangeA ?? AppDB?.dnsLogsMinDate() ?? .now() + private lazy var tsRangeB: Timestamp = Prefs.DateFilter.RangeB ?? .now() // order by @IBOutlet private var orderbyType: UISegmentedControl! @@ -29,18 +29,18 @@ class VCDateFilter: UIViewController, UIGestureRecognizerDelegate { override func viewDidLoad() { super.viewDidLoad() - filterBy.selectedSegmentIndex = (Pref.DateFilter.Kind == .ABRange ? 1 : 0) + filterBy.selectedSegmentIndex = (Prefs.DateFilter.Kind == .ABRange ? 1 : 0) didChangeFilterBy(filterBy) durationSlider.tag = -1 // otherwise wont update because `tag == 0` - durationSlider.value = Float(durationTimes.firstIndex(of: Pref.DateFilter.LastXMin) ?? 0) / 9 + durationSlider.value = Float(durationTimes.firstIndex(of: Prefs.DateFilter.LastXMin) ?? 0) / 9 durationSliderChanged(durationSlider) buttonRangeStart.setTitle(DateFormat.minutes(tsRangeA), for: .normal) buttonRangeEnd.setTitle(DateFormat.minutes(tsRangeB), for: .normal) - orderbyType.selectedSegmentIndex = Pref.DateFilter.OrderBy.rawValue - orderbyAsc.selectedSegmentIndex = (Pref.DateFilter.OrderAsc ? 0 : 1) + orderbyType.selectedSegmentIndex = Prefs.DateFilter.OrderBy.rawValue + orderbyAsc.selectedSegmentIndex = (Prefs.DateFilter.OrderAsc ? 0 : 1) } @IBAction private func didChangeFilterBy(_ sender: UISegmentedControl) { @@ -103,15 +103,15 @@ class VCDateFilter: UIViewController, UIGestureRecognizerDelegate { case 2: orderType = .Count default: preconditionFailure() } - let a = Pref.DateFilter.OrderBy <-? orderType - let b = Pref.DateFilter.OrderAsc <-? (orderbyAsc.selectedSegmentIndex == 0) + let a = Prefs.DateFilter.OrderBy <-? orderType + let b = Prefs.DateFilter.OrderAsc <-? (orderbyAsc.selectedSegmentIndex == 0) if a || b { NotifySortOrderChanged.post() } - let c = Pref.DateFilter.Kind <-? filterType - let d = Pref.DateFilter.LastXMin <-? newXMin - let e = Pref.DateFilter.RangeA <-? (filterType == .ABRange ? tsRangeA : nil) - let f = Pref.DateFilter.RangeB <-? (filterType == .ABRange ? tsRangeB : nil) + let c = Prefs.DateFilter.Kind <-? filterType + let d = Prefs.DateFilter.LastXMin <-? newXMin + let e = Prefs.DateFilter.RangeA <-? (filterType == .ABRange ? tsRangeA : nil) + let f = Prefs.DateFilter.RangeB <-? (filterType == .ABRange ? tsRangeB : nil) if c || d || e || f { NotifyDateFilterChanged.post() } diff --git a/main/Settings/TVCSettings.swift b/main/Settings/TVCSettings.swift index 091aaf0..45e3a0a 100644 --- a/main/Settings/TVCSettings.swift +++ b/main/Settings/TVCSettings.swift @@ -97,8 +97,8 @@ class TVCSettings: UITableViewController { // MARK: - Reset Settings @IBAction private func resetTutorialAlerts(_ sender: UIButton) { - Pref.DidShowTutorial.Welcome = false - Pref.DidShowTutorial.Recordings = false + Prefs.DidShowTutorial.Welcome = false + Prefs.DidShowTutorial.Recordings = false Alert(title: sender.titleLabel?.text, text: "\nDone.\n\nYou may need to restart the application.").presentIn(self) } diff --git a/main/TBCMain.swift b/main/TBCMain.swift index e17896f..d194daa 100644 --- a/main/TBCMain.swift +++ b/main/TBCMain.swift @@ -8,7 +8,7 @@ class TBCMain: UITabBarController { NotifyVPNStateChanged.observe(call: #selector(vpnStateChanged(_:)), on: self) changedState(currentVPNState) - if !Pref.DidShowTutorial.Welcome { + if !Prefs.DidShowTutorial.Welcome { self.perform(#selector(showWelcomeMessage), with: nil, afterDelay: 0.5) } } @@ -37,7 +37,7 @@ class TBCMain: UITabBarController { ) )) x.present { - Pref.DidShowTutorial.Welcome = true + Prefs.DidShowTutorial.Welcome = true } }