Read/Write/Upgrade config.json with settings module
This commit is contained in:
39
src/common/settings.js
Normal file
39
src/common/settings.js
Normal file
@@ -0,0 +1,39 @@
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const version = 1;
|
||||
|
||||
var upgradeV0toV1 = function(config_v0) {
|
||||
return {
|
||||
url: [config_v0.url],
|
||||
version: 1
|
||||
};
|
||||
};
|
||||
|
||||
var upgrade = function(config) {
|
||||
var config_version = config.version ? config.version : 0;
|
||||
switch (config_version) {
|
||||
case 0:
|
||||
return upgrade(upgradeV0toV1(config));
|
||||
default:
|
||||
return config;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
version: version,
|
||||
|
||||
upgrade: upgrade,
|
||||
|
||||
readFileSync: function(configFile) {
|
||||
return JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
||||
},
|
||||
|
||||
writeFileSync: function(configFile, config) {
|
||||
if (config.version != version) {
|
||||
throw 'version ' + config.version + ' is not equal to ' + version;
|
||||
}
|
||||
var data = JSON.stringify(config, null, ' ');
|
||||
fs.writeFileSync(configFile, data, 'utf8');
|
||||
}
|
||||
};
|
12
src/index.js
12
src/index.js
@@ -8,15 +8,19 @@ const fs = require('fs');
|
||||
var url = require('url');
|
||||
|
||||
var contextMenu = require('./menus/context');
|
||||
const settings = require('./common/settings');
|
||||
|
||||
var webView = document.getElementById('mainWebview');
|
||||
|
||||
try {
|
||||
var configFile = remote.getGlobal('config-file');
|
||||
var str = fs.readFileSync(configFile);
|
||||
var config = JSON.parse(str);
|
||||
if (config.url) {
|
||||
webView.setAttribute('src', config.url);
|
||||
var config = settings.readFileSync(configFile);
|
||||
if (config.version != settings.version) {
|
||||
config = settings.upgrade(config);
|
||||
settings.writeFileSync(configFile, config);
|
||||
}
|
||||
if (config.url[0]) {
|
||||
webView.setAttribute('src', config.url[0]);
|
||||
}
|
||||
else {
|
||||
throw 'URL is not configured';
|
||||
|
@@ -16,18 +16,17 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
const remote = require('electron').remote;
|
||||
var fs = require('fs');
|
||||
const settings = require('./common/settings');
|
||||
|
||||
var saveSettings = function() {
|
||||
var configFile = remote.getGlobal('config-file');
|
||||
var urlInput = document.getElementById('url');
|
||||
var config = {
|
||||
url: urlInput.value
|
||||
url: [urlInput.value],
|
||||
version: 1
|
||||
};
|
||||
fs.writeFile(configFile, JSON.stringify(config, null, ' '), function(err) {
|
||||
if (err) throw err;
|
||||
window.location.href = './index.html';
|
||||
});
|
||||
settings.writeFileSync(configFile, config);
|
||||
window.location.href = './index.html';
|
||||
}
|
||||
|
||||
var goBack = function() {
|
||||
|
@@ -59,6 +59,26 @@ describe('electron-mattermost', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('should upgrade v0 config file', function(done) {
|
||||
const settings = require('../src/common/settings');
|
||||
fs.writeFileSync(config_file_path, JSON.stringify({
|
||||
url: mattermost_url
|
||||
}));
|
||||
var client = webdriverio.remote(options);
|
||||
client
|
||||
.init()
|
||||
.getUrl().then(function(url) {
|
||||
var p = path.parse(url);
|
||||
p.base.should.equal('index.html');
|
||||
})
|
||||
.end().then(function() {
|
||||
var str = fs.readFileSync(config_file_path, 'utf8');
|
||||
var config = JSON.parse(str);
|
||||
config.version.should.equal(settings.version);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
describe('index.html', function() {
|
||||
before(function() {
|
||||
fs.writeFileSync(config_file_path, JSON.stringify({
|
18
test/settings_test.js
Normal file
18
test/settings_test.js
Normal file
@@ -0,0 +1,18 @@
|
||||
const should = require('should');
|
||||
const fs = require('fs');
|
||||
const settings = require('../src/common/settings');
|
||||
|
||||
const config_file_path = '../test_config.json'
|
||||
|
||||
describe('settings.js', function() {
|
||||
|
||||
it('should upgrade v0 config file', function() {
|
||||
const v0_config = {
|
||||
url: 'http://example.com/team'
|
||||
};
|
||||
config = settings.upgrade(v0_config);
|
||||
config.url.length.should.equal(1);
|
||||
config.url[0].should.equal(v0_config.url);
|
||||
config.version.should.equal(settings.version);
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user