added iOS source code
[wl-app.git] / iOS / Pods / FolioReaderKit / Source / FolioReaderUserDefaults.swift
1 //
2 //  FolioReaderUserDefaults.swift
3 //  Pods
4 //
5 //  Created by Kevin Delord on 01/04/17.
6 //
7 //
8
9 import Foundation
10
11 class FolioReaderUserDefaults {
12
13     /// User Defaults which are dependend on an identifier. If no identifier is given the default standard user defaults are used.
14     fileprivate var userDefaults = [String: Any]()
15
16     fileprivate var identifier: String?
17
18     fileprivate var useStandardUserDefaultsDirectly: Bool {
19         return (self.identifier == nil)
20     }
21
22     init(withIdentifier identifier: String?) {
23         if let _identifier = identifier {
24             self.identifier = "folioreader.userdefaults.identifier.\(_identifier)"
25         }
26
27         guard
28             let prefixedIdentifier = self.identifier,
29             let defaults = UserDefaults.standard.value(forKey: prefixedIdentifier) as? [String: Any] else {
30                 return
31         }
32
33         self.userDefaults = defaults
34     }
35
36     public func synchronize() {
37         if let identifier = self.identifier {
38             // Add the keys to to the user defaults it they are identifier dependend
39             UserDefaults.standard.set(self.userDefaults, forKey: identifier)
40         }
41
42         UserDefaults.standard.synchronize()
43     }
44 }
45
46 // MARK: - Getter
47
48 extension FolioReaderUserDefaults {
49
50     internal func bool(forKey key: String) -> Bool {
51         guard (self.useStandardUserDefaultsDirectly == false) else {
52                 return ((UserDefaults.standard.object(forKey: key) as? Bool) ?? false)
53         }
54
55         guard let value = self.userDefaults[key] as? Bool else {
56             return false
57         }
58
59         return value
60     }
61
62     internal func integer(forKey key: String) -> Int {
63         guard (self.useStandardUserDefaultsDirectly == false) else {
64             return ((UserDefaults.standard.object(forKey: key) as? Int) ?? 0)
65         }
66
67         guard let value = self.userDefaults[key] as? Int else {
68             return 0
69         }
70
71         return value
72     }
73
74     internal func value(forKey key: String) -> Any? {
75         guard (self.useStandardUserDefaultsDirectly == false) else {
76             return UserDefaults.standard.object(forKey: key)
77         }
78
79         return self.userDefaults[key]
80     }
81 }
82 // MARK: - Setter
83
84 extension FolioReaderUserDefaults {
85     
86     internal func register(defaults: [String: Any]) {
87         guard (self.useStandardUserDefaultsDirectly == false) else {
88             UserDefaults.standard.register(defaults: defaults)
89             return
90         }
91
92         for (key, value) in defaults where (self.userDefaults[key] == nil) {
93             self.userDefaults[key] = value
94         }
95
96         self.synchronize()
97     }
98
99     internal func set(_ value: Any?, forKey key: String) {
100         if (self.useStandardUserDefaultsDirectly == true) {
101             UserDefaults.standard.set(value, forKey: key)
102         } else {
103             self.userDefaults[key] = value
104         }
105
106         self.synchronize()
107     }
108 }