blob: f5e4b0f53b04f52cebf5cc524d247728761b3d4b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
import Foundation
/// Handles reading and writing the configuration
public class Configuration {
let configurationPath = NSString(string: "~/.lyricli.conf").expandingTildeInPath
// The defaults are added here
private var configuration: [String: Any] = [
"enabled_sources": ["arguments"],
"default": true
]
static let sharedInstance: Configuration = Configuration()
private init() {
// Read the config file and attempt toset any of the values. Otherwise
// Don't do anything.
// IMPROVEMENT: Enable a debug mode
if let data = try? NSData(contentsOfFile: configurationPath) as Data {
if let parsedConfig = try? JSONSerialization.jsonObject(with: data) as! [String:Any] {
for (key, value) in parsedConfig {
if key == "enabled_sources" {
configuration[key] = value as! [String]
}
else {
configuration[key] = value as! String
}
}
}
}
writeConfiguration()
}
private func writeConfiguration() {
var error: NSError?
if let outputStream = OutputStream(toFileAtPath: configurationPath, append: false) {
outputStream.open()
JSONSerialization.writeJSONObject(configuration, to: outputStream, options: [JSONSerialization.WritingOptions.prettyPrinted], error: &error)
outputStream.close()
}
}
// Allow access as an object
subscript(index: String) -> Any? {
get {
return configuration[index]
}
set(newValue) {
configuration[index] = newValue
writeConfiguration()
}
}
}
|