// This is the raw parsed json
parsedSettings map[string]interface{}
+
+ // ModifiedSettings is a map of settings which should be written to disk
+ // because they have been modified by the user in this session
+ ModifiedSettings map[string]bool
)
func init() {
+ ModifiedSettings = make(map[string]bool)
parsedSettings = make(map[string]interface{})
}
func WriteSettings(filename string) error {
var err error
if _, e := os.Stat(ConfigDir); e == nil {
+ defaults := DefaultGlobalSettings()
+
+ // remove any options froms parsedSettings that have since been marked as default
+ for k, v := range parsedSettings {
+ if !strings.HasPrefix(reflect.TypeOf(v).String(), "map") {
+ cur, okcur := GlobalSettings[k]
+ if def, ok := defaults[k]; ok && okcur && reflect.DeepEqual(cur, def) {
+ delete(parsedSettings, k)
+ }
+ }
+ }
+
+ // add any options to parsedSettings that have since been marked as non-default
for k, v := range GlobalSettings {
- parsedSettings[k] = v
+ if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) {
+ if _, wr := ModifiedSettings[k]; wr {
+ parsedSettings[k] = v
+ }
+ }
}
txt, _ := json.MarshalIndent(parsedSettings, "", " ")
return err
}
+// OverwriteSettings writes the current settings to settings.json and
+// resets any user configuration of local settings present in settings.json
func OverwriteSettings(filename string) error {
+ settings := make(map[string]interface{})
+
var err error
if _, e := os.Stat(ConfigDir); e == nil {
- txt, _ := json.MarshalIndent(GlobalSettings, "", " ")
+ defaults := DefaultGlobalSettings()
+ for k, v := range GlobalSettings {
+ if def, ok := defaults[k]; !ok || !reflect.DeepEqual(v, def) {
+ if _, wr := ModifiedSettings[k]; wr {
+ settings[k] = v
+ }
+ }
+ }
+
+ txt, _ := json.MarshalIndent(settings, "", " ")
err = ioutil.WriteFile(filename, append(txt, '\n'), 0644)
}
return err