118 lines
3.7 KiB
Swift
118 lines
3.7 KiB
Swift
import Foundation
|
|
import Capacitor
|
|
|
|
@objc(PreferencesPlugin)
|
|
public class PreferencesPlugin: CAPPlugin, CAPBridgedPlugin {
|
|
public let identifier = "PreferencesPlugin"
|
|
public let jsName = "Preferences"
|
|
public let pluginMethods: [CAPPluginMethod] = [
|
|
CAPPluginMethod(name: "configure", returnType: CAPPluginReturnPromise),
|
|
CAPPluginMethod(name: "get", returnType: CAPPluginReturnPromise),
|
|
CAPPluginMethod(name: "set", returnType: CAPPluginReturnPromise),
|
|
CAPPluginMethod(name: "remove", returnType: CAPPluginReturnPromise),
|
|
CAPPluginMethod(name: "keys", returnType: CAPPluginReturnPromise),
|
|
CAPPluginMethod(name: "clear", returnType: CAPPluginReturnPromise),
|
|
CAPPluginMethod(name: "migrate", returnType: CAPPluginReturnPromise),
|
|
CAPPluginMethod(name: "removeOld", returnType: CAPPluginReturnPromise)
|
|
]
|
|
private var preferences = Preferences(with: PreferencesConfiguration())
|
|
|
|
@objc func configure(_ call: CAPPluginCall) {
|
|
let group = call.getString("group")
|
|
let configuration: PreferencesConfiguration
|
|
|
|
if let group = group {
|
|
if group == "NativeStorage" {
|
|
configuration = PreferencesConfiguration(for: .cordovaNativeStorage)
|
|
} else {
|
|
configuration = PreferencesConfiguration(for: .named(group))
|
|
}
|
|
} else {
|
|
configuration = PreferencesConfiguration()
|
|
}
|
|
|
|
preferences = Preferences(with: configuration)
|
|
call.resolve()
|
|
}
|
|
|
|
@objc func get(_ call: CAPPluginCall) {
|
|
guard let key = call.getString("key") else {
|
|
call.reject("Must provide a key")
|
|
return
|
|
}
|
|
|
|
let value = preferences.get(by: key)
|
|
|
|
call.resolve([
|
|
"value": value as Any
|
|
])
|
|
}
|
|
|
|
@objc func set(_ call: CAPPluginCall) {
|
|
guard let key = call.getString("key") else {
|
|
call.reject("Must provide a key")
|
|
return
|
|
}
|
|
let value = call.getString("value", "")
|
|
|
|
preferences.set(value, for: key)
|
|
call.resolve()
|
|
}
|
|
|
|
@objc func remove(_ call: CAPPluginCall) {
|
|
guard let key = call.getString("key") else {
|
|
call.reject("Must provide a key")
|
|
return
|
|
}
|
|
|
|
preferences.remove(by: key)
|
|
call.resolve()
|
|
}
|
|
|
|
@objc func keys(_ call: CAPPluginCall) {
|
|
let keys = preferences.keys()
|
|
|
|
call.resolve([
|
|
"keys": keys
|
|
])
|
|
}
|
|
|
|
@objc func clear(_ call: CAPPluginCall) {
|
|
preferences.removeAll()
|
|
call.resolve()
|
|
}
|
|
|
|
@objc func migrate(_ call: CAPPluginCall) {
|
|
var migrated: [String] = []
|
|
var existing: [String] = []
|
|
let oldPrefix = "_cap_"
|
|
let oldKeys = UserDefaults.standard.dictionaryRepresentation().keys.filter { $0.hasPrefix(oldPrefix) }
|
|
|
|
for oldKey in oldKeys {
|
|
let key = String(oldKey.dropFirst(oldPrefix.count))
|
|
let value = UserDefaults.standard.string(forKey: oldKey) ?? ""
|
|
let currentValue = preferences.get(by: key)
|
|
|
|
if currentValue == nil {
|
|
preferences.set(value, for: key)
|
|
migrated.append(key)
|
|
} else {
|
|
existing.append(key)
|
|
}
|
|
}
|
|
|
|
call.resolve([
|
|
"migrated": migrated,
|
|
"existing": existing
|
|
])
|
|
}
|
|
|
|
@objc func removeOld(_ call: CAPPluginCall) {
|
|
let oldPrefix = "_cap_"
|
|
let oldKeys = UserDefaults.standard.dictionaryRepresentation().keys.filter { $0.hasPrefix(oldPrefix) }
|
|
for oldKey in oldKeys {
|
|
UserDefaults.standard.removeObject(forKey: oldKey)
|
|
}
|
|
call.resolve()
|
|
}
|
|
}
|