]> git.r.bdr.sh - rbdr/lyricli/blobdiff - Sources/configuration.swift
Add iTunes source manager
[rbdr/lyricli] / Sources / configuration.swift
index f5e4b0f53b04f52cebf5cc524d247728761b3d4b..f1a1ee1203ac04c5e129d80ff69ab98b96be220a 100644 (file)
@@ -1,34 +1,38 @@
 import Foundation
 
-/// Handles reading and writing the configuration
-public class Configuration {
-
-    let configurationPath = NSString(string: "~/.lyricli.conf").expandingTildeInPath
-
-    // The defaults are added here
+// Reads and writes the configuration. Config keys are accessed as a dictionary.
+class Configuration {
+    // Location of the global configuration file
+    private let configurationPath = NSString(string: "~/.lyricli.conf").expandingTildeInPath
 
+    // Default options, will be automatically written to the global config if
+    // not found.
     private var configuration: [String: Any] =  [
-        "enabled_sources": ["arguments"],
-        "default": true
+        "enabled_sources": ["arguments"]
     ]
 
-    static let sharedInstance: Configuration = Configuration()
+    // The shared instance of the object
+    static let shared: 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
+        // Read the config file and attempt to set any of the values. Otherwise
+        // don't do anything.
 
         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 let parsedConfig = try? JSONSerialization.jsonObject(with: data) {
+                if let parsedConfig = parsedConfig as? [String: Any] {
+                    for (key, value) in parsedConfig {
 
-                    if key == "enabled_sources" {
-                        configuration[key] = value as! [String]
-                    }
-                    else {
-                        configuration[key] = value as! String
+                        if key == "enabled_sources" {
+                            if let value = value as? [String] {
+                                configuration[key] = value
+                            }
+                        } else {
+                            if let value = value as? String {
+                                configuration[key] = value
+                            }
+                        }
                     }
                 }
             }
@@ -37,18 +41,22 @@ public class Configuration {
         writeConfiguration()
     }
 
+    // Write the configuration back to the file
     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)
+            JSONSerialization.writeJSONObject(configuration,
+                    to: outputStream,
+                    options: [JSONSerialization.WritingOptions.prettyPrinted],
+                    error: &error)
             outputStream.close()
         }
     }
 
-    // Allow access as an object
+    // Allow access to the config properties as a dictionary
     subscript(index: String) -> Any? {
         get {
             return configuration[index]