about summary refs log tree commit diff
path: root/modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift
diff options
context:
space:
mode:
Diffstat (limited to 'modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift')
-rw-r--r--modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift89
1 files changed, 89 insertions, 0 deletions
diff --git a/modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift b/modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift
new file mode 100644
index 000000000..a11a71834
--- /dev/null
+++ b/modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift
@@ -0,0 +1,89 @@
+import Foundation
+
+public class SharedPrefs {
+  public static let shared = SharedPrefs()
+
+  private let defaults = UserDefaults(suiteName: "group.app.bsky")
+
+  init() {
+    if defaults == nil {
+      NSLog("Failed to get user defaults for app group.")
+    }
+  }
+
+  private func getDefaults(_ info: String = "(no info)") -> UserDefaults? {
+    guard let defaults = self.defaults else {
+      NSLog("Failed to get defaults for app group: \(info)")
+      return nil
+    }
+    return defaults
+  }
+
+  public func setValue(_ key: String, _ value: String?) {
+    getDefaults(key)?.setValue(value, forKey: key)
+  }
+
+  public func setValue(_ key: String, _ value: Double?) {
+    getDefaults(key)?.setValue(value, forKey: key)
+  }
+
+  public func setValue(_ key: String, _ value: Bool?) {
+    getDefaults(key)?.setValue(value, forKey: key)
+  }
+
+  public func _setAnyValue(_ key: String, _ value: Any?) {
+    getDefaults(key)?.setValue(value, forKey: key)
+  }
+
+  public func removeValue(_ key: String) {
+    getDefaults(key)?.removeObject(forKey: key)
+  }
+
+  public func getString(_ key: String) -> String? {
+    return getDefaults(key)?.string(forKey: key)
+  }
+
+  public func getNumber(_ key: String) -> Double? {
+    return getDefaults(key)?.double(forKey: key)
+  }
+
+  public func getBool(_ key: String) -> Bool? {
+    return getDefaults(key)?.bool(forKey: key)
+  }
+
+  public func addToSet(_ key: String, _ value: String) {
+    var dict: [String: Bool]?
+    if var currDict = getDefaults(key)?.dictionary(forKey: key) as? [String: Bool] {
+      currDict[value] = true
+      dict = currDict
+    } else {
+      dict = [
+        value: true
+      ]
+    }
+    getDefaults(key)?.setValue(dict, forKey: key)
+  }
+
+  public func removeFromSet(_ key: String, _ value: String) {
+    guard var dict = getDefaults(key)?.dictionary(forKey: key) as? [String: Bool] else {
+      return
+    }
+    dict.removeValue(forKey: value)
+    getDefaults(key)?.setValue(dict, forKey: key)
+  }
+
+  public func setContains(_ key: String, _ value: String) -> Bool {
+    guard let dict = getDefaults(key)?.dictionary(forKey: key) as? [String: Bool] else {
+      return false
+    }
+    return dict[value] == true
+  }
+
+  public func hasValue(_ key: String) -> Bool {
+    return getDefaults(key)?.value(forKey: key) != nil
+  }
+
+  public func getValues(_ keys: [String]) -> [String: Any?]? {
+    return getDefaults("keys:\(keys)")?.dictionaryWithValues(forKeys: keys)
+  }
+}