- Revamp whole DB to Display flow - Filter Pipeline, arbitrary filtering and sorting - Binary tree arrays for faster lookup & manipulation - DB: introducing custom functions - DB scheme: split req into heap & cache - cache written by GlassVPN only - heap written by Main App only - Introducing DB separation: DBCore, DBCommon, DBAppOnly - Introducing DB data sources: TestDataSource, GroupedDomainDataSource, RecordingsDB, DomainFilter - Background sync: Move entries from cache to heap and notify all observers - GlassVPN: Binary tree filter lookup - GlassVPN: Reusing prepared statement
42 lines
1.3 KiB
Swift
42 lines
1.3 KiB
Swift
import Foundation
|
|
|
|
var currentVPNState: VPNState = .off
|
|
let sync = SyncUpdate(periodic: 7)
|
|
|
|
public enum VPNState : Int {
|
|
case on = 1, inbetween, off
|
|
}
|
|
|
|
struct Pref {
|
|
struct DidShowTutorial {
|
|
static var Welcome: Bool {
|
|
get { UserDefaults.standard.bool(forKey: "didShowTutorialAppWelcome") }
|
|
set { UserDefaults.standard.set(newValue, forKey: "didShowTutorialAppWelcome") }
|
|
}
|
|
static var Recordings: Bool {
|
|
get { UserDefaults.standard.bool(forKey: "didShowTutorialRecordings") }
|
|
set { UserDefaults.standard.set(newValue, forKey: "didShowTutorialRecordings") }
|
|
}
|
|
}
|
|
struct DateFilter {
|
|
static var Kind: DateFilterKind {
|
|
get { DateFilterKind(rawValue: UserDefaults.standard.integer(forKey: "dateFilterType"))! }
|
|
set { UserDefaults.standard.set(newValue.rawValue, forKey: "dateFilterType") }
|
|
}
|
|
static var LastXMin: Int {
|
|
get { UserDefaults.standard.integer(forKey: "dateFilterLastXMin") }
|
|
set { UserDefaults.standard.set(newValue, forKey: "dateFilterLastXMin") }
|
|
}
|
|
|
|
/// Return selected timestamp filter or `nil` if filtering is disabled.
|
|
/// - Returns: `Timestamp.now() - LastXMin * 60`
|
|
static func lastXMinTimestamp() -> Timestamp? {
|
|
if Kind != .LastXMin { return nil }
|
|
return Timestamp.past(minutes: Pref.DateFilter.LastXMin)
|
|
}
|
|
}
|
|
}
|
|
enum DateFilterKind: Int {
|
|
case Off = 0, LastXMin = 1, ABRange = 2;
|
|
}
|