shared instance of prefs for other modules
This commit is contained in:
+17
-39
@@ -16,67 +16,45 @@ public class ExpoBlueskySharedPrefsModule: Module {
|
|||||||
Name("ExpoBlueskySharedPrefs")
|
Name("ExpoBlueskySharedPrefs")
|
||||||
|
|
||||||
AsyncFunction("setValueAsync") { (key: String, value: JavaScriptValue, promise: Promise) in
|
AsyncFunction("setValueAsync") { (key: String, value: JavaScriptValue, promise: Promise) in
|
||||||
guard value.isString() || value.isNumber() || value.isBool() || value.isNull() || value.isUndefined() else {
|
if value.isString() {
|
||||||
promise.reject("UNSUPPORTED_TYPE_ERROR", "Attempted to set an unsupported type")
|
SharedPrefs.shared.setValue(key, value.getString())
|
||||||
return false
|
} else if value.isNumber() {
|
||||||
}
|
SharedPrefs.shared.setValue(key, value.getDouble())
|
||||||
|
} else if value.isBool() {
|
||||||
guard let defaults = self.getDefaults() else {
|
SharedPrefs.shared.setValue(key, value.getBool())
|
||||||
promise.reject("PREFS_ERROR", "Was unable to get shared preferences")
|
} else if value.isNull() || value.isUndefined() {
|
||||||
return false
|
SharedPrefs.shared.removeValue(key)
|
||||||
}
|
|
||||||
|
|
||||||
if value.isNumber() {
|
|
||||||
defaults.set(value.getDouble(), forKey: key)
|
|
||||||
} else {
|
} 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
|
AsyncFunction("removeValueAsync") { (key: String) in
|
||||||
self.getDefaults(key)?.removeObject(forKey: key)
|
SharedPrefs.shared.removeValue(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("getStringAsync") { (key: String) in
|
AsyncFunction("getStringAsync") { (key: String) in
|
||||||
return self.getDefaults(key)?.string(forKey: key)
|
return SharedPrefs.shared.getString(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("getBoolAsync") { (key: String) in
|
AsyncFunction("getBoolAsync") { (key: String) in
|
||||||
return self.getDefaults(key)?.bool(forKey: key)
|
return SharedPrefs.shared.getBool(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("getNumberAsync") { (key: String) in
|
AsyncFunction("getNumberAsync") { (key: String) in
|
||||||
return self.getDefaults(key)?.double(forKey: key)
|
return SharedPrefs.shared.getNumber(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("addToSetAsync") { (key: String, value: String) in
|
AsyncFunction("addToSetAsync") { (key: String, value: String) in
|
||||||
var dict: [String:Bool]?
|
SharedPrefs.shared.addToSet(key, value)
|
||||||
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("removeFromSetAsync") { (key: String, value: String) in
|
AsyncFunction("removeFromSetAsync") { (key: String, value: String) in
|
||||||
guard var dict = self.getDefaults(key)?.dictionary(forKey: key) as? [String:Bool] else {
|
SharedPrefs.shared.removeFromSet(key, value)
|
||||||
return
|
|
||||||
}
|
|
||||||
dict.removeValue(forKey: value)
|
|
||||||
self.getDefaults(key)?.setValue(dict, forKey: key)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AsyncFunction("setContainsAsync") { (key: String, value: String) in
|
AsyncFunction("setContainsAsync") { (key: String, value: String) in
|
||||||
guard let dict = self.getDefaults(key)?.dictionary(forKey: key) as? [String:Bool] else {
|
return SharedPrefs.shared.setContains(key, value)
|
||||||
return false
|
|
||||||
}
|
|
||||||
return dict[value] == true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user