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