diff --git a/src/common/settings.js b/src/common/settings.js index b7302274..47ab48b6 100644 --- a/src/common/settings.js +++ b/src/common/settings.js @@ -1,17 +1,40 @@ 'use strict'; const fs = require('fs'); -const version = 1; +const settingsVersion = 1; + +var merge = function(base, target) { + var merged = base; + if (!target) { + target = {}; + } + for (var prop in target) { + merged[prop] = target[prop]; + } + return merged; +}; + +var loadDefault = function(version) { + if (version == null) { + version = settingsVersion + } + switch (version) { + case 1: + return { + teams: [], + hideMenuBar: false, + version: 1 + }; + } +} var upgradeV0toV1 = function(config_v0) { - return { - teams: [{ - name: 'Primary team', - url: config_v0.url - }], - hideMenuBar: false, - version: 1 - }; + var config = loadDefault(1); + config.teams.push({ + name: 'Primary team', + url: config_v0.url + }); + return config; }; var upgrade = function(config) { @@ -25,27 +48,26 @@ var upgrade = function(config) { }; module.exports = { - version: version, + version: settingsVersion, upgrade: upgrade, readFileSync: function(configFile) { - return JSON.parse(fs.readFileSync(configFile, 'utf8')); + var config = JSON.parse(fs.readFileSync(configFile, 'utf8')); + if (config.version === settingsVersion) { + var default_config = this.loadDefault(); + config = merge(default_config, config); + } + return config; }, writeFileSync: function(configFile, config) { - if (config.version != version) { - throw 'version ' + config.version + ' is not equal to ' + version; + if (config.version != settingsVersion) { + throw 'version ' + config.version + ' is not equal to ' + settingsVersion; } var data = JSON.stringify(config, null, ' '); fs.writeFileSync(configFile, data, 'utf8'); }, - loadDefault: function() { - return { - teams: [], - hideMenuBar: false, - version: version - }; - } + loadDefault: loadDefault };