]> git.r.bdr.sh - rbdr/lyricli/blobdiff - Sources/configuration.swift
Add the arguments source
[rbdr/lyricli] / Sources / configuration.swift
diff --git a/Sources/configuration.swift b/Sources/configuration.swift
new file mode 100644 (file)
index 0000000..f5e4b0f
--- /dev/null
@@ -0,0 +1,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()
+        }
+    }
+}