added iOS source code
[wl-app.git] / iOS / Pods / MatomoTracker / MatomoTracker / MatomoUserDefaults.swift
1 import Foundation
2
3 /// MatomoUserDefaults is a wrapper for the UserDefaults with properties
4 /// mapping onto values stored in the UserDefaults.
5 /// All getter and setter are sideeffect free and automatically syncronize
6 /// after writing.
7 internal struct MatomoUserDefaults {
8     let userDefaults: UserDefaults
9
10     init(suiteName: String?) {
11         userDefaults = UserDefaults(suiteName: suiteName)!
12     }
13     
14     var totalNumberOfVisits: Int {
15         get {
16             return userDefaults.integer(forKey: MatomoUserDefaults.Key.totalNumberOfVisits)
17         }
18         set {
19             userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.totalNumberOfVisits)
20             userDefaults.synchronize()
21         }
22     }
23     
24     var firstVisit: Date? {
25         get {
26             return userDefaults.object(forKey: MatomoUserDefaults.Key.firstVistsTimestamp) as? Date
27         }
28         set {
29             userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.firstVistsTimestamp)
30             userDefaults.synchronize()
31         }
32     }
33     
34     var previousVisit: Date? {
35         get {
36             return userDefaults.object(forKey: MatomoUserDefaults.Key.previousVistsTimestamp) as? Date
37         }
38         set {
39             userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.previousVistsTimestamp)
40             userDefaults.synchronize()
41         }
42     }
43     
44     var currentVisit: Date? {
45         get {
46             return userDefaults.object(forKey: MatomoUserDefaults.Key.currentVisitTimestamp) as? Date
47         }
48         set {
49             userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.currentVisitTimestamp)
50             userDefaults.synchronize()
51         }
52     }
53     
54     var optOut: Bool {
55         get {
56             return userDefaults.bool(forKey: MatomoUserDefaults.Key.optOut)
57         }
58         set {
59             userDefaults.set(newValue, forKey: MatomoUserDefaults.Key.optOut)
60             userDefaults.synchronize()
61         }
62     }
63     
64     var clientId: String? {
65         get {
66             return userDefaults.string(forKey: MatomoUserDefaults.Key.clientID)
67         }
68         set {
69             userDefaults.setValue(newValue, forKey: MatomoUserDefaults.Key.clientID)
70             userDefaults.synchronize()
71         }
72     }
73     
74     var visitorUserId: String? {
75         get {
76             return userDefaults.string(forKey: MatomoUserDefaults.Key.visitorUserID);
77         }
78         set {
79             userDefaults.setValue(newValue, forKey: MatomoUserDefaults.Key.visitorUserID);
80             userDefaults.synchronize()
81         }
82     }
83 }
84
85 extension MatomoUserDefaults {
86     public mutating func copy(from userDefaults: UserDefaults) {
87         totalNumberOfVisits = UserDefaults.standard.integer(forKey: MatomoUserDefaults.Key.totalNumberOfVisits)
88         firstVisit = UserDefaults.standard.object(forKey: MatomoUserDefaults.Key.firstVistsTimestamp) as? Date
89         previousVisit = UserDefaults.standard.object(forKey: MatomoUserDefaults.Key.previousVistsTimestamp) as? Date
90         currentVisit = UserDefaults.standard.object(forKey: MatomoUserDefaults.Key.currentVisitTimestamp) as? Date
91         optOut = UserDefaults.standard.bool(forKey: MatomoUserDefaults.Key.optOut)
92         clientId = UserDefaults.standard.string(forKey: MatomoUserDefaults.Key.clientID)
93         visitorUserId = UserDefaults.standard.string(forKey: MatomoUserDefaults.Key.visitorUserID)
94     }
95 }
96
97 extension MatomoUserDefaults {
98     internal struct Key {
99         static let totalNumberOfVisits = "PiwikTotalNumberOfVistsKey"
100         static let currentVisitTimestamp = "PiwikCurrentVisitTimestampKey"
101         static let previousVistsTimestamp = "PiwikPreviousVistsTimestampKey"
102         static let firstVistsTimestamp = "PiwikFirstVistsTimestampKey"
103         
104         // Note:    To be compatible with previous versions, the clientID key retains its old value,
105         //          even though it is now a misnomer since adding visitorUserID makes it a bit confusing.
106         static let clientID = "PiwikVisitorIDKey"
107         static let visitorUserID = "PiwikVisitorUserIDKey"
108         static let optOut = "PiwikOptOutKey"
109     }
110 }