about summary refs log tree commit diff
path: root/modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift
blob: a11a71834c84543026f3b0ceb223dc64375f9530 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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)
  }
}