GuruAnalytics_iOS/GuruAnalytics/Classes/Internal/Database/UserDefaults.swift

125 lines
3.0 KiB
Swift

//
// UserDefaults.swift
// GuruAnalytics
//
// Created by mayue on 2022/11/21.
//
import Foundation
internal enum UserDefaults {
static let defaults = Foundation.UserDefaults(suiteName: "com.guru.guru_analytics_lib")
static var eventsServerHost: String? {
get {
return defaults?.value(forKey: eventsServerHostKey) as? String
}
set {
var host = newValue
let h_sch = "http://"
let hs_sch = "https://"
host?.deletePrefix(h_sch)
host?.deletePrefix(hs_sch)
host?.trimmed(in: .whitespacesAndNewlines.union(.init(charactersIn: "/")))
defaults?.set(host, forKey: eventsServerHostKey)
}
}
static var fgAccumulatedDuration: Int64 {
get {
return defaults?.value(forKey: fgDurationKey) as? Int64 ?? 0
}
set {
defaults?.set(newValue, forKey: fgDurationKey)
}
}
static var totalEventsCount: Int {
get {
return defaults?.value(forKey: totalEventsCountKey) as? Int ?? 0
}
set {
defaults?.set(newValue, forKey: totalEventsCountKey)
}
}
static var deletedEventsCount: Int {
get {
return defaults?.value(forKey: deletedEventsCountKey) as? Int ?? 0
}
set {
defaults?.set(newValue, forKey: deletedEventsCountKey)
}
}
static var uploadedEventsCount: Int {
get {
return defaults?.value(forKey: uploadedEventsCountKey) as? Int ?? 0
}
set {
defaults?.set(newValue, forKey: uploadedEventsCountKey)
}
}
static var sessionNumber: Entity.SessionNumber {
get {
let jsonString = defaults?.value(forKey: sessionNumberKey) as? String ?? ""
let sessionNumber = JSONDecoder().decodeObject(Entity.SessionNumber.self, from: jsonString)
?? Entity.SessionNumber.createNumber()
return sessionNumber
}
set {
let jsonString = newValue.asString
defaults?.setValue(jsonString, forKey: sessionNumberKey)
}
}
}
extension UserDefaults {
static var firstOpenTimeKey: String {
return "app.first.open.timestamp"
}
static var dbVersionKey: String {
return "db.version"
}
static var hostsMapKey: String {
return "hosts.map"
}
static var eventsServerHostKey: String {
return "events.server.host"
}
static var fgDurationKey: String {
return "fg.duration.ms"
}
static var totalEventsCountKey: String {
return "events.recorded.total.count"
}
static var deletedEventsCountKey: String {
return "events.deleted.count"
}
static var uploadedEventsCountKey: String {
return "events.uploaded.count"
}
static var sessionNumberKey: String {
return "session.number"
}
}