Simplify and split config.json into defaultPreferences and buildConfig
This commit is contained in:
parent
73a7476de8
commit
3613f70a72
|
@ -8,6 +8,7 @@ const {ipcRenderer, remote} = require('electron');
|
|||
const AutoLaunch = require('auto-launch');
|
||||
const {debounce} = require('underscore');
|
||||
|
||||
const buildConfig = require('../../common/config/buildConfig');
|
||||
const settings = require('../../common/settings');
|
||||
|
||||
const TeamList = require('./TeamList.jsx');
|
||||
|
@ -301,8 +302,10 @@ const SettingsPage = createReactClass({
|
|||
onTeamsChange={this.handleTeamsChange}
|
||||
updateTeam={this.updateTeam}
|
||||
addServer={this.addServer}
|
||||
onTeamClick={backToIndex}
|
||||
allowTeamEdit={this.state.enableTeamModification}
|
||||
onTeamClick={(index) => {
|
||||
backToIndex(index + buildConfig.defaultTeams.length);
|
||||
}}
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
|
|
|
@ -12,11 +12,15 @@ const {remote, ipcRenderer} = require('electron');
|
|||
const MainPage = require('./components/MainPage.jsx');
|
||||
|
||||
const AppConfig = require('./config/AppConfig.js');
|
||||
const buildConfig = require('../common/config/buildConfig');
|
||||
const settings = require('../common/settings');
|
||||
const url = require('url');
|
||||
|
||||
const badge = require('./js/badge');
|
||||
const utils = require('../utils/util');
|
||||
|
||||
const teams = settings.mergeDefaultTeams(AppConfig.data.teams);
|
||||
|
||||
remote.getCurrentWindow().removeAllListeners('focus');
|
||||
|
||||
if (AppConfig.data.teams.length === 0) {
|
||||
|
@ -90,8 +94,9 @@ function showUnreadBadge(unreadCount, mentionCount) {
|
|||
const permissionRequestQueue = [];
|
||||
const requestingPermission = new Array(AppConfig.data.teams.length);
|
||||
|
||||
function teamConfigChange(teams) {
|
||||
AppConfig.set('teams', teams);
|
||||
function teamConfigChange(updatedTeams) {
|
||||
AppConfig.set('teams', updatedTeams.slice(buildConfig.defaultTeams.length));
|
||||
teams.splice(0, teams.length, ...updatedTeams);
|
||||
requestingPermission.length = teams.length;
|
||||
ipcRenderer.send('update-menu', AppConfig.data);
|
||||
ipcRenderer.send('update-config');
|
||||
|
@ -157,7 +162,7 @@ if (!parsedURL.query.index || parsedURL.query.index === null) {
|
|||
|
||||
ReactDOM.render(
|
||||
<MainPage
|
||||
teams={AppConfig.data.teams}
|
||||
teams={teams}
|
||||
initialIndex={initialIndex}
|
||||
onUnreadCountChange={showUnreadBadge}
|
||||
onTeamConfigChange={teamConfigChange}
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
{
|
||||
"default": {
|
||||
"teams": [],
|
||||
"showTrayIcon": false,
|
||||
"trayIconTheme": "light",
|
||||
"minimizeToTray": false,
|
||||
"version": 1,
|
||||
"notifications": {
|
||||
"flashWindow": 0
|
||||
},
|
||||
"showUnreadBadge": true,
|
||||
"useSpellChecker": true,
|
||||
"spellCheckerLocale": "en-US",
|
||||
"helpLink": "https://docs.mattermost.com/help/apps/desktop-guide.html",
|
||||
"enableServerManagement": true
|
||||
},
|
||||
"1": {
|
||||
"teams": [],
|
||||
"showTrayIcon": false,
|
||||
"trayIconTheme": "light",
|
||||
"minimizeToTray": false,
|
||||
"version": 1,
|
||||
"notifications": {
|
||||
"flashWindow": 0
|
||||
},
|
||||
"showUnreadBadge": true,
|
||||
"useSpellChecker": true,
|
||||
"spellCheckerLocale": "en-US",
|
||||
"helpLink": "https://docs.mattermost.com/help/apps/desktop-guide.html",
|
||||
"enableServerManagement": true
|
||||
}
|
||||
}
|
19
src/common/config/buildConfig.js
Normal file
19
src/common/config/buildConfig.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
/**
|
||||
* Build-time configuration. End-users can't change these parameters.
|
||||
* @prop {Object[]} defaultTeams
|
||||
* @prop {string} defaultTeams[].name - The tab name for default team.
|
||||
* @prop {string} defaultTeams[].url - The URL for default team.
|
||||
* @prop {string} helpLink - The URL for "Help->Learn More..." menu item.
|
||||
* If null is specified, the menu disappears.
|
||||
*/
|
||||
const buildConfig = {
|
||||
defaultTeams: [/*
|
||||
{
|
||||
name: 'example',
|
||||
url: 'https://example.com'
|
||||
}*/
|
||||
],
|
||||
helpLink: 'https://docs.mattermost.com/help/apps/desktop-guide.html'
|
||||
};
|
||||
|
||||
module.exports = buildConfig;
|
20
src/common/config/defaultPreferences.js
Normal file
20
src/common/config/defaultPreferences.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
/**
|
||||
* Default user preferences. End-users can change these parameters by editing config.json
|
||||
* @param {number} version - Scheme version. (Not application version)
|
||||
*/
|
||||
const defaultPreferences = {
|
||||
version: 1,
|
||||
teams: [],
|
||||
showTrayIcon: false,
|
||||
trayIconTheme: 'light',
|
||||
minimizeToTray: false,
|
||||
notifications: {
|
||||
flashWindow: 0
|
||||
},
|
||||
showUnreadBadge: true,
|
||||
useSpellChecker: true,
|
||||
spellCheckerLocale: 'en-US',
|
||||
enableServerManagement: true
|
||||
};
|
||||
|
||||
module.exports = defaultPreferences;
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
|
||||
}
|
10
src/common/config/pastDefaultPreferences.js
Normal file
10
src/common/config/pastDefaultPreferences.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
const defaultPreferences = require('./defaultPreferences');
|
||||
|
||||
const pastDefaultPreferences = {
|
||||
1: defaultPreferences,
|
||||
0: {
|
||||
url: ''
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = pastDefaultPreferences;
|
29
src/common/config/upgradePreferences.js
Normal file
29
src/common/config/upgradePreferences.js
Normal file
|
@ -0,0 +1,29 @@
|
|||
const pastDefaultPreferences = require('./pastDefaultPreferences');
|
||||
|
||||
function deepCopy(object) {
|
||||
return JSON.parse(JSON.stringify(object));
|
||||
}
|
||||
|
||||
function upgradeV0toV1(configV0) {
|
||||
const config = deepCopy(pastDefaultPreferences['1']);
|
||||
if (config.version !== 1) {
|
||||
throw new Error('pastDefaultPreferences[\'1\'].version is not equal to 1');
|
||||
}
|
||||
config.teams.push({
|
||||
name: 'Primary team',
|
||||
url: configV0.url
|
||||
});
|
||||
return config;
|
||||
}
|
||||
|
||||
function upgradeToLatest(config) {
|
||||
var configVersion = config.version ? config.version : 0;
|
||||
switch (configVersion) {
|
||||
case 0:
|
||||
return upgradeToLatest(upgradeV0toV1(config));
|
||||
default:
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = upgradeToLatest;
|
|
@ -1,90 +1,56 @@
|
|||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
const path = require('path');
|
||||
const deepmerge = require('./deepmerge');
|
||||
|
||||
const settingsVersion = 1;
|
||||
const baseConfig = require('./config/base.json');
|
||||
const overrideConfig = require('./config/override.json');
|
||||
const buildConfig = require('./config/buildConfig');
|
||||
|
||||
function merge(base, target) {
|
||||
return Object.assign({}, base, target);
|
||||
}
|
||||
|
||||
function deepMergeArray(source, dest) {
|
||||
return dest;
|
||||
}
|
||||
const defaultPreferences = require('./config/defaultPreferences');
|
||||
const upgradePreferences = require('./config/upgradePreferences');
|
||||
|
||||
function loadDefault(version, spellCheckerLocale) {
|
||||
var ver = version;
|
||||
if (version == null) {
|
||||
ver = settingsVersion;
|
||||
}
|
||||
|
||||
const base = baseConfig[ver] || baseConfig.default;
|
||||
const override = overrideConfig[ver] || {};
|
||||
|
||||
const defaults = deepmerge(base, override, {arrayMerge: deepMergeArray});
|
||||
|
||||
return Object.assign(defaults, {
|
||||
spellCheckerLocale: spellCheckerLocale || defaults.spellCheckerLocale || 'en-US'
|
||||
function loadDefault(spellCheckerLocale) {
|
||||
const config = JSON.parse(JSON.stringify(defaultPreferences));
|
||||
return Object.assign({}, config, {
|
||||
spellCheckerLocale: spellCheckerLocale || defaultPreferences.pellCheckerLocale || 'en-US'
|
||||
});
|
||||
}
|
||||
|
||||
function upgradeV0toV1(configV0) {
|
||||
var config = loadDefault(1);
|
||||
config.teams.push({
|
||||
name: 'Primary team',
|
||||
url: configV0.url
|
||||
});
|
||||
return config;
|
||||
function hasBuildConfigDefaultTeams(config) {
|
||||
return config.defaultTeams.length > 0;
|
||||
}
|
||||
|
||||
function upgrade(config, newAppVersion) {
|
||||
var configVersion = config.version ? config.version : 0;
|
||||
if (newAppVersion) {
|
||||
config.lastMattermostVersion = newAppVersion;
|
||||
}
|
||||
switch (configVersion) {
|
||||
case 0:
|
||||
return upgrade(upgradeV0toV1(config));
|
||||
default:
|
||||
return config;
|
||||
}
|
||||
function upgrade(config) {
|
||||
return upgradePreferences(config);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
version: settingsVersion,
|
||||
version: defaultPreferences.version,
|
||||
|
||||
upgrade,
|
||||
|
||||
readFileSync(configFile) {
|
||||
var config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
||||
|
||||
// need to be able to compare 1 to '1'
|
||||
if (config.version == settingsVersion) { // eslint-disable-line
|
||||
var defaultConfig = this.loadDefault();
|
||||
config = merge(defaultConfig, config);
|
||||
const config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
|
||||
if (config.version === defaultPreferences.version) {
|
||||
const defaultConfig = loadDefault();
|
||||
return merge(defaultConfig, config);
|
||||
}
|
||||
|
||||
return config;
|
||||
},
|
||||
|
||||
writeFile(configFile, config, callback) {
|
||||
// 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);
|
||||
if (config.version !== defaultPreferences.version) {
|
||||
throw new Error('version ' + config.version + ' is not equal to ' + defaultPreferences.version);
|
||||
}
|
||||
var data = JSON.stringify(config, null, ' ');
|
||||
fs.writeFile(configFile, data, 'utf8', callback);
|
||||
},
|
||||
|
||||
writeFileSync(configFile, config) {
|
||||
// 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);
|
||||
if (config.version !== defaultPreferences.version) {
|
||||
throw new Error('version ' + config.version + ' is not equal to ' + defaultPreferences.version);
|
||||
}
|
||||
|
||||
const dir = path.dirname(configFile);
|
||||
|
@ -96,5 +62,14 @@ module.exports = {
|
|||
fs.writeFileSync(configFile, data, 'utf8');
|
||||
},
|
||||
|
||||
loadDefault
|
||||
loadDefault,
|
||||
|
||||
mergeDefaultTeams(teams) {
|
||||
const newTeams = [];
|
||||
if (hasBuildConfigDefaultTeams(buildConfig)) {
|
||||
newTeams.push(...JSON.parse(JSON.stringify(buildConfig.defaultTeams)));
|
||||
}
|
||||
newTeams.push(...JSON.parse(JSON.stringify(teams)));
|
||||
return newTeams;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -69,7 +69,7 @@ try {
|
|||
config = settings.readFileSync(configFile);
|
||||
if (config.version !== settings.version || wasUpdated()) {
|
||||
clearAppCache();
|
||||
config = settings.upgrade(config, app.getVersion());
|
||||
config = settings.upgrade(config);
|
||||
settings.writeFileSync(configFile, config);
|
||||
}
|
||||
} catch (e) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
const electron = require('electron');
|
||||
const settings = require('../../common/settings');
|
||||
const buildConfig = require('../../common/config/buildConfig');
|
||||
|
||||
const Menu = electron.Menu;
|
||||
|
||||
|
@ -173,13 +175,14 @@ function createTemplate(mainWindow, config, isDev) {
|
|||
}]
|
||||
});
|
||||
|
||||
const teams = settings.mergeDefaultTeams(config.teams);
|
||||
const windowMenu = {
|
||||
label: '&Window',
|
||||
submenu: [{
|
||||
role: 'minimize'
|
||||
}, {
|
||||
role: 'close'
|
||||
}, separatorItem, ...config.teams.slice(0, 9).map((team, i) => {
|
||||
}, separatorItem, ...teams.slice(0, 9).map((team, i) => {
|
||||
return {
|
||||
label: team.name,
|
||||
accelerator: `CmdOrCtrl+${i + 1}`,
|
||||
|
@ -194,23 +197,23 @@ function createTemplate(mainWindow, config, isDev) {
|
|||
click() {
|
||||
mainWindow.webContents.send('select-next-tab');
|
||||
},
|
||||
enabled: (config.teams.length > 1)
|
||||
enabled: (teams.length > 1)
|
||||
}, {
|
||||
label: 'Select Previous Server',
|
||||
accelerator: 'Ctrl+Shift+Tab',
|
||||
click() {
|
||||
mainWindow.webContents.send('select-previous-tab');
|
||||
},
|
||||
enabled: (config.teams.length > 1)
|
||||
enabled: (teams.length > 1)
|
||||
}]
|
||||
};
|
||||
template.push(windowMenu);
|
||||
var submenu = [];
|
||||
if (config.helpLink) {
|
||||
if (buildConfig.helpLink) {
|
||||
submenu.push({
|
||||
label: 'Learn More...',
|
||||
click() {
|
||||
electron.shell.openExternal(config.helpLink);
|
||||
electron.shell.openExternal(buildConfig.helpLink);
|
||||
}
|
||||
});
|
||||
submenu.push(separatorItem);
|
||||
|
|
|
@ -4,11 +4,13 @@ const {
|
|||
app,
|
||||
Menu
|
||||
} = require('electron');
|
||||
const settings = require('../../common/settings');
|
||||
|
||||
function createTemplate(mainWindow, config, isDev) {
|
||||
const settingsURL = isDev ? 'http://localhost:8080/browser/settings.html' : `file://${app.getAppPath()}/browser/settings.html`;
|
||||
const teams = settings.mergeDefaultTeams(config.teams);
|
||||
var template = [
|
||||
...config.teams.slice(0, 9).map((team, i) => {
|
||||
...teams.slice(0, 9).map((team, i) => {
|
||||
return {
|
||||
label: team.name,
|
||||
click: () => {
|
||||
|
|
Loading…
Reference in a new issue