66 lines
2.1 KiB
Swift
66 lines
2.1 KiB
Swift
import Foundation
|
|
|
|
class ConfigManager {
|
|
static let shared = ConfigManager()
|
|
|
|
private let configDir: URL
|
|
private let configFile: URL
|
|
private let defaultNotesDir: URL
|
|
private var config: [String: String]
|
|
|
|
private init() {
|
|
let home = FileManager.default.homeDirectoryForCurrentUser
|
|
configDir = home.appendingPathComponent(".acord")
|
|
configFile = configDir.appendingPathComponent("config.json")
|
|
defaultNotesDir = configDir.appendingPathComponent("notes")
|
|
config = [:]
|
|
ensureDirectories()
|
|
load()
|
|
}
|
|
|
|
private func ensureDirectories() {
|
|
let fm = FileManager.default
|
|
try? fm.createDirectory(at: configDir, withIntermediateDirectories: true)
|
|
try? fm.createDirectory(at: defaultNotesDir, withIntermediateDirectories: true)
|
|
}
|
|
|
|
private func load() {
|
|
guard let data = try? Data(contentsOf: configFile),
|
|
let dict = try? JSONSerialization.jsonObject(with: data) as? [String: String]
|
|
else { return }
|
|
config = dict
|
|
}
|
|
|
|
private func save() {
|
|
guard let data = try? JSONSerialization.data(
|
|
withJSONObject: config, options: [.prettyPrinted, .sortedKeys]
|
|
) else { return }
|
|
try? data.write(to: configFile, options: .atomic)
|
|
}
|
|
|
|
var autoSaveDirectory: String {
|
|
get { config["autoSaveDirectory"] ?? defaultNotesDir.path }
|
|
set { config["autoSaveDirectory"] = newValue; save() }
|
|
}
|
|
|
|
var themeMode: String {
|
|
get { config["themeMode"] ?? "auto" }
|
|
set { config["themeMode"] = newValue; save() }
|
|
}
|
|
|
|
var lineIndicatorMode: String {
|
|
get { config["lineIndicatorMode"] ?? "on" }
|
|
set { config["lineIndicatorMode"] = newValue; save() }
|
|
}
|
|
|
|
var gutterRainbow: Bool {
|
|
get { (config["gutterRainbow"] ?? "true") != "false" }
|
|
set { config["gutterRainbow"] = newValue ? "true" : "false"; save() }
|
|
}
|
|
|
|
var zoomLevel: CGFloat {
|
|
get { CGFloat(Double(config["zoomLevel"] ?? "0") ?? 0) }
|
|
set { config["zoomLevel"] = String(Double(newValue)); save() }
|
|
}
|
|
}
|