spiegel-keyman/mac/KeymanSettings/Sources/Persistence/SettingsRepository.swift
Shawn Schantz 364ccc2d52
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
feat(mac): migrate keyman packages individually to group containers
also rename Keyman-Keyboards directory to
Keyman-Packages
2026-04-17 14:13:23 -04:00

94 lines
2.9 KiB
Swift

/*
* Keyman is copyright (C) SIL Global. MIT License.
*
* Created by Shawn Schantz on 2025-12-10
*
* SettingsRepository is responsible for reading, writing and removing
* settings stored in the UserDefaults
*
*/
import Foundation
public enum UserDefaultsError: Error {
case unknownSuite
}
public struct SettingsRepository {
fileprivate let pathUtil: KeymanPaths
let defaultsSuiteName: String
let defaults: UserDefaults?
let kActiveKeyboardsKey = "KMActiveKeyboardsKey"
let kSelectedKeyboardKey = "KMSelectedKeyboardKey"
let kPersistedOptionsKey = "KMPersistedOptionsKey"
let kDataModelVersionKey = "KMDataModelVersion"
let kShowOskOnActivateKey = "KMShowOskOnActivate"
let kForceSentryError = "KMForceSentryError"
// public init() {
// self.pathUtil = KeymanPaths()
// self.defaultsSuiteName = KeymanPaths.groupId
// }
//
public init(suiteName: String) throws(Error) {
self.pathUtil = KeymanPaths()
self.defaultsSuiteName = suiteName
let userDefaults = UserDefaults(suiteName: suiteName)
if userDefaults == nil {
throw(UserDefaultsError.unknownSuite)
} else {
self.defaults = userDefaults
}
}
public func readActiveKeyboards() -> Set<String> {
guard let sharedDefaults = self.defaults else {
print("Group container UserDefaults not found.")
return Set([])
}
let activeKeyboardsArray = sharedDefaults.stringArray(forKey: kActiveKeyboardsKey) ?? []
let activeKeyboardsSet = Set(activeKeyboardsArray)
return activeKeyboardsSet
}
public func readSelectedKeyboard() -> String {
if let sharedDefaults = self.defaults {
return sharedDefaults.value(forKey: kSelectedKeyboardKey) as? String ?? ""
} else {
return ""
}
}
public func writeSelectedKeyboard(keyboardName: String) {
if let sharedDefaults = self.defaults {
sharedDefaults.set(keyboardName, forKey: kSelectedKeyboardKey)
}
}
public func logSettings() {
print("UserDefaults:")
if let sharedDefaults = self.defaults {
print("kSelectedKeyboardKey: \(sharedDefaults.value(forKey: kSelectedKeyboardKey) ?? "nil")")
print("kDataModelVersionKey: \(sharedDefaults.value(forKey: kDataModelVersionKey) ?? "nil")")
print("kForceSentryError: \(sharedDefaults.value(forKey: kForceSentryError) ?? "nil")")
print("kShowOskOnActivateKey: \(sharedDefaults.value(forKey: kShowOskOnActivateKey) ?? "nil")")
print("kActiveKeyboardsKey: \(sharedDefaults.value(forKey: kActiveKeyboardsKey) ?? "nil")")
print("kPersistedOptionsKey: \(sharedDefaults.value(forKey: kPersistedOptionsKey) ?? "nil")")
}
}
public func clearSettings() {
guard let sharedDefaults = self.defaults else {
print("Group container UserDefaults not found.")
return
}
sharedDefaults.dictionaryRepresentation().keys.forEach { key in
sharedDefaults.removeObject(forKey: key)
}
}
}