diff --git a/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift b/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift index a80d94e160..dae73b2a97 100644 --- a/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift +++ b/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift @@ -16,67 +16,45 @@ public class ExpoBlueskySharedPrefsModule: Module { Name("ExpoBlueskySharedPrefs") AsyncFunction("setValueAsync") { (key: String, value: JavaScriptValue, promise: Promise) in - guard value.isString() || value.isNumber() || value.isBool() || value.isNull() || value.isUndefined() else { - promise.reject("UNSUPPORTED_TYPE_ERROR", "Attempted to set an unsupported type") - return false - } - - guard let defaults = self.getDefaults() else { - promise.reject("PREFS_ERROR", "Was unable to get shared preferences") - return false - } - - if value.isNumber() { - defaults.set(value.getDouble(), forKey: key) + if value.isString() { + SharedPrefs.shared.setValue(key, value.getString()) + } else if value.isNumber() { + SharedPrefs.shared.setValue(key, value.getDouble()) + } else if value.isBool() { + SharedPrefs.shared.setValue(key, value.getBool()) + } else if value.isNull() || value.isUndefined() { + SharedPrefs.shared.removeValue(key) } else { - defaults.set(value.getRaw(), forKey: key) + promise.reject("UNSUPPORTED_TYPE_ERROR", "Attempted to set an unsupported type") } - promise.resolve() - return true } AsyncFunction("removeValueAsync") { (key: String) in - self.getDefaults(key)?.removeObject(forKey: key) + SharedPrefs.shared.removeValue(key) } AsyncFunction("getStringAsync") { (key: String) in - return self.getDefaults(key)?.string(forKey: key) + return SharedPrefs.shared.getString(key) } AsyncFunction("getBoolAsync") { (key: String) in - return self.getDefaults(key)?.bool(forKey: key) + return SharedPrefs.shared.getBool(key) } AsyncFunction("getNumberAsync") { (key: String) in - return self.getDefaults(key)?.double(forKey: key) + return SharedPrefs.shared.getNumber(key) } - AsyncFunction("addToSetAsync") { (key: String, value: String) in - var dict: [String:Bool]? - if var currDict = self.getDefaults(key)?.dictionary(forKey: key) as? [String:Bool] { - currDict[value] = true - dict = currDict - } else { - dict = [ - value : true - ] - } - self.getDefaults(key)?.setValue(dict, forKey: key) + AsyncFunction("addToSetAsync") { (key: String, value: String) in + SharedPrefs.shared.addToSet(key, value) } AsyncFunction("removeFromSetAsync") { (key: String, value: String) in - guard var dict = self.getDefaults(key)?.dictionary(forKey: key) as? [String:Bool] else { - return - } - dict.removeValue(forKey: value) - self.getDefaults(key)?.setValue(dict, forKey: key) + SharedPrefs.shared.removeFromSet(key, value) } AsyncFunction("setContainsAsync") { (key: String, value: String) in - guard let dict = self.getDefaults(key)?.dictionary(forKey: key) as? [String:Bool] else { - return false - } - return dict[value] == true + return SharedPrefs.shared.setContains(key, value) } } } 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 0000000000..cef69e86e7 --- /dev/null +++ b/modules/expo-bluesky-swiss-army/ios/SharedPrefs/SharedPrefs.swift @@ -0,0 +1,77 @@ +import Foundation + +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.") + } + } + + 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 + } + + func setValue(_ key: String, _ value: String?) { + getDefaults(key)?.setValue(value, forKey: key) + } + + func setValue(_ key: String, _ value: Double?) { + getDefaults(key)?.setValue(value, forKey: key) + } + + func setValue(_ key: String, _ value: Bool?) { + getDefaults(key)?.setValue(value, forKey: key) + } + + func removeValue(_ key: String) { + getDefaults(key)?.removeObject(forKey: key) + } + + func getString(_ key: String) -> String? { + return getDefaults(key)?.string(forKey: key) + } + + func getNumber(_ key: String) -> Double? { + return getDefaults(key)?.double(forKey: key) + } + + func getBool(_ key: String) -> Bool? { + return getDefaults(key)?.bool(forKey: key) + } + + 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) + } + + 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) + } + + 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 + } +}