mattermost-desktop/src/common/settings.js

101 lines
2.4 KiB
JavaScript
Raw Normal View History

'use strict';
const fs = require('fs');
2017-09-07 16:20:48 -07:00
const path = require('path');
const deepmerge = require('./deepmerge');
2017-09-07 12:00:02 -07:00
2016-01-23 05:58:44 -08:00
const settingsVersion = 1;
2017-09-07 12:00:02 -07:00
const baseConfig = require('./config/base.json');
const overrideConfig = require('./config/override.json');
2016-01-23 05:58:44 -08:00
2016-09-25 07:14:01 -07:00
function merge(base, target) {
return Object.assign({}, base, target);
}
2016-01-23 05:58:44 -08:00
2017-09-07 16:20:48 -07:00
function deepMergeArray(source, dest) {
2017-09-07 12:00:02 -07:00
return dest;
}
function loadDefault(version, spellCheckerLocale) {
2016-09-25 07:14:01 -07:00
var ver = version;
2016-01-23 05:58:44 -08:00
if (version == null) {
2016-09-25 07:14:01 -07:00
ver = settingsVersion;
2016-01-23 05:58:44 -08:00
}
2017-09-07 12:00:02 -07:00
const base = baseConfig[ver] || baseConfig.default;
const override = overrideConfig[ver] || {};
2017-09-07 16:20:48 -07:00
const defaults = deepmerge(base, override, {arrayMerge: deepMergeArray});
2017-09-07 12:00:02 -07:00
return Object.assign(defaults, {
spellCheckerLocale: spellCheckerLocale || defaults.spellCheckerLocale || 'en-US'
});
2016-09-25 07:14:01 -07:00
}
2016-09-25 07:14:01 -07:00
function upgradeV0toV1(configV0) {
var config = loadDefault(1);
2016-01-23 05:58:44 -08:00
config.teams.push({
name: 'Primary team',
2016-09-25 07:14:01 -07:00
url: configV0.url
2016-01-23 05:58:44 -08:00
});
return config;
2016-09-25 07:14:01 -07:00
}
2016-09-25 07:14:01 -07:00
function upgrade(config, newAppVersion) {
var configVersion = config.version ? config.version : 0;
2016-09-25 07:14:01 -07:00
if (newAppVersion) {
2016-10-19 02:35:32 -07:00
config.lastMattermostVersion = newAppVersion;
}
2016-09-25 07:14:01 -07:00
switch (configVersion) {
case 0:
return upgrade(upgradeV0toV1(config));
default:
return config;
}
}
module.exports = {
2016-01-23 05:58:44 -08:00
version: settingsVersion,
2016-09-25 07:14:01 -07:00
upgrade,
2016-09-25 07:14:01 -07:00
readFileSync(configFile) {
2016-01-23 05:58:44 -08:00
var config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
2017-09-07 12:00:02 -07:00
// need to be able to compare 1 to '1'
if (config.version == settingsVersion) { // eslint-disable-line
2016-09-25 07:14:01 -07:00
var defaultConfig = this.loadDefault();
config = merge(defaultConfig, config);
2016-01-23 05:58:44 -08:00
}
2017-09-07 12:00:02 -07:00
2016-01-23 05:58:44 -08:00
return config;
},
writeFile(configFile, config, callback) {
2017-09-07 12:00:02 -07:00
// need to be able to compare 1 to '1'
if (config.version != settingsVersion) { // eslint-disable-line
throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion);
}
var data = JSON.stringify(config, null, ' ');
fs.writeFile(configFile, data, 'utf8', callback);
},
2016-09-25 07:14:01 -07:00
writeFileSync(configFile, config) {
2017-09-07 12:00:02 -07:00
// need to be able to compare 1 to '1'
if (config.version != settingsVersion) { // eslint-disable-line
2016-09-25 07:14:01 -07:00
throw new Error('version ' + config.version + ' is not equal to ' + settingsVersion);
}
2017-09-07 16:20:48 -07:00
const dir = path.dirname(configFile);
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
}
var data = JSON.stringify(config, null, ' ');
fs.writeFileSync(configFile, data, 'utf8');
},
2016-09-25 07:14:01 -07:00
loadDefault
};