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 url = require('url');
|
||||||
|
|
||||||
var contextMenu = require('./menus/context');
|
var contextMenu = require('./menus/context');
|
||||||
|
const settings = require('./common/settings');
|
||||||
|
|
||||||
var webView = document.getElementById('mainWebview');
|
var webView = document.getElementById('mainWebview');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var configFile = remote.getGlobal('config-file');
|
var configFile = remote.getGlobal('config-file');
|
||||||
var str = fs.readFileSync(configFile);
|
var config = settings.readFileSync(configFile);
|
||||||
var config = JSON.parse(str);
|
if (config.version != settings.version) {
|
||||||
if (config.url) {
|
config = settings.upgrade(config);
|
||||||
webView.setAttribute('src', config.url);
|
settings.writeFileSync(configFile, config);
|
||||||
|
}
|
||||||
|
if (config.url[0]) {
|
||||||
|
webView.setAttribute('src', config.url[0]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
throw 'URL is not configured';
|
throw 'URL is not configured';
|
||||||
|
@@ -16,18 +16,17 @@
|
|||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const remote = require('electron').remote;
|
const remote = require('electron').remote;
|
||||||
var fs = require('fs');
|
const settings = require('./common/settings');
|
||||||
|
|
||||||
var saveSettings = function() {
|
var saveSettings = function() {
|
||||||
var configFile = remote.getGlobal('config-file');
|
var configFile = remote.getGlobal('config-file');
|
||||||
var urlInput = document.getElementById('url');
|
var urlInput = document.getElementById('url');
|
||||||
var config = {
|
var config = {
|
||||||
url: urlInput.value
|
url: [urlInput.value],
|
||||||
|
version: 1
|
||||||
};
|
};
|
||||||
fs.writeFile(configFile, JSON.stringify(config, null, ' '), function(err) {
|
settings.writeFileSync(configFile, config);
|
||||||
if (err) throw err;
|
window.location.href = './index.html';
|
||||||
window.location.href = './index.html';
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var goBack = function() {
|
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() {
|
describe('index.html', function() {
|
||||||
before(function() {
|
before(function() {
|
||||||
fs.writeFileSync(config_file_path, JSON.stringify({
|
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