about summary refs log tree commit diff
path: root/modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-07-11 18:37:43 -0700
committerGitHub <noreply@github.com>2024-07-11 18:37:43 -0700
commit83e8522e0a89be28b1733f4c50dbd4379d98d03b (patch)
treec51a1054ffa8f1b226412a77fa7d69f5c891f7ae /modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift
parent2397104ad6169ced02b1acd9fbbbe426f4cc4da0 (diff)
downloadvoidsky-83e8522e0a89be28b1733f4c50dbd4379d98d03b.tar.zst
Create shared preferences API (#4654)
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)
+  }
+}