X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/53b27422d140022594fc241cca91c3183be57bca..48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff:/iOS/Pods/MatomoTracker/MatomoTracker/MatomoUserDefaults.swift diff --git a/iOS/Pods/MatomoTracker/MatomoTracker/MatomoUserDefaults.swift b/iOS/Pods/MatomoTracker/MatomoTracker/MatomoUserDefaults.swift new file mode 100644 index 0000000..3acf4cf --- /dev/null +++ b/iOS/Pods/MatomoTracker/MatomoTracker/MatomoUserDefaults.swift @@ -0,0 +1,110 @@ +import Foundation + +/// MatomoUserDefaults is a wrapper for the UserDefaults with properties +/// mapping onto values stored in the UserDefaults. +/// All getter and setter are sideeffect free and automatically syncronize +/// after writing. +internal struct MatomoUserDefaults { + let userDefaults: UserDefaults + + init(suiteName: String?) { + userDefaults = UserDefaults(suiteName: suiteName)! + } + + var totalNumberOfVisits: Int { + get { + return userDefaults.integer(forKey: MatomoUserDefaults.Key.totalNumberOfVisits) + } + set { + userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.totalNumberOfVisits) + userDefaults.synchronize() + } + } + + var firstVisit: Date? { + get { + return userDefaults.object(forKey: MatomoUserDefaults.Key.firstVistsTimestamp) as? Date + } + set { + userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.firstVistsTimestamp) + userDefaults.synchronize() + } + } + + var previousVisit: Date? { + get { + return userDefaults.object(forKey: MatomoUserDefaults.Key.previousVistsTimestamp) as? Date + } + set { + userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.previousVistsTimestamp) + userDefaults.synchronize() + } + } + + var currentVisit: Date? { + get { + return userDefaults.object(forKey: MatomoUserDefaults.Key.currentVisitTimestamp) as? Date + } + set { + userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.currentVisitTimestamp) + userDefaults.synchronize() + } + } + + var optOut: Bool { + get { + return userDefaults.bool(forKey: MatomoUserDefaults.Key.optOut) + } + set { + userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.optOut) + userDefaults.synchronize() + } + } + + var clientId: String? { + get { + return userDefaults.string(forKey: MatomoUserDefaults.Key.clientID) + } + set { + userDefaults.setValue(newValue, forKey: MatomoUserDefaults.Key.clientID) + userDefaults.synchronize() + } + } + + var visitorUserId: String? { + get { + return userDefaults.string(forKey: MatomoUserDefaults.Key.visitorUserID); + } + set { + userDefaults.setValue(newValue, forKey: MatomoUserDefaults.Key.visitorUserID); + userDefaults.synchronize() + } + } +} + +extension MatomoUserDefaults { + public mutating func copy(from userDefaults: UserDefaults) { + totalNumberOfVisits = UserDefaults.standard.integer(forKey: MatomoUserDefaults.Key.totalNumberOfVisits) + firstVisit = UserDefaults.standard.object(forKey: MatomoUserDefaults.Key.firstVistsTimestamp) as? Date + previousVisit = UserDefaults.standard.object(forKey: MatomoUserDefaults.Key.previousVistsTimestamp) as? Date + currentVisit = UserDefaults.standard.object(forKey: MatomoUserDefaults.Key.currentVisitTimestamp) as? Date + optOut = UserDefaults.standard.bool(forKey: MatomoUserDefaults.Key.optOut) + clientId = UserDefaults.standard.string(forKey: MatomoUserDefaults.Key.clientID) + visitorUserId = UserDefaults.standard.string(forKey: MatomoUserDefaults.Key.visitorUserID) + } +} + +extension MatomoUserDefaults { + internal struct Key { + static let totalNumberOfVisits = "PiwikTotalNumberOfVistsKey" + static let currentVisitTimestamp = "PiwikCurrentVisitTimestampKey" + static let previousVistsTimestamp = "PiwikPreviousVistsTimestampKey" + static let firstVistsTimestamp = "PiwikFirstVistsTimestampKey" + + // Note: To be compatible with previous versions, the clientID key retains its old value, + // even though it is now a misnomer since adding visitorUserID makes it a bit confusing. + static let clientID = "PiwikVisitorIDKey" + static let visitorUserID = "PiwikVisitorUserIDKey" + static let optOut = "PiwikOptOutKey" + } +}