diff --git a/.gitignore b/.gitignore
index e6b45283..683c3398 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,4 +18,4 @@ db.sqlite
# Optional npm cache directory
.npm
-settings.json
\ No newline at end of file
+config.json
\ No newline at end of file
diff --git a/SettingsHelper.js b/SettingsHelper.js
deleted file mode 100644
index 5085bbbe..00000000
--- a/SettingsHelper.js
+++ /dev/null
@@ -1,222 +0,0 @@
-const argv = require('minimist')(process.argv.slice(2));
-
-const { coalesce } = require('./src/utils/helpers');
-
-const readSettingsFile = (file) => {
- try {
- // eslint-disable-next-line global-require, import/no-dynamic-require
- return require(file);
- } catch (e) {
- return {};
- }
-};
-
-const settings = readSettingsFile('./settings.json');
-
-const fields = [
- // Webapp settings
- {
- local: 'webroot',
- env: 'WEB_ROOT',
- default: '',
- type: 'string',
- },
- {
- local: 'webapp_port',
- env: 'WEB_PORT',
- default: '8088',
- type: 'number',
- },
- {
- local: 'autoJoin',
- env: 'AUTOJOIN_ENABLED',
- default: false,
- type: 'boolean',
- },
- {
- local: 'autoJoinServer',
- env: 'AUTOJOIN_SERVERURL',
- default: '',
- type: 'string',
- },
- {
- local: 'autoJoinRoom',
- env: 'AUTOJOIN_ROOM',
- default: '',
- type: 'string',
- },
- {
- local: 'autoJoinPassword',
- env: 'AUTOJOIN_PASSWORD',
- default: '',
- type: 'string',
- },
- {
- local: 'authentication',
- env: 'AUTHENTICATION',
- default: {
- mechanism: 'none',
- },
- type: 'object',
- },
- {
- local: 'customServer',
- env: 'CUSTOM_SERVER',
- default: null,
- type: 'object',
- },
- {
- local: 'servers',
- env: 'SERVERS',
- default: [],
- type: 'array',
- },
- {
- local: 'autoplay',
- env: 'AUTOPLAY',
- default: true,
- type: 'boolean',
- },
- {
- local: 'slPlayerQuality',
- env: 'SLPLAYERQUALITY',
- default: null,
- type: 'number',
- // null is allowed because null quality indicates Original
- nullable: true,
- },
- {
- local: 'slPlayerForceTranscode',
- env: 'SLPLAYERFORCETRANSCODE',
- default: false,
- type: 'boolean',
- },
- {
- local: 'fetchConfig',
- env: 'FETCH_CONFIG',
- default: false,
- type: 'boolean',
- },
-];
-
-// Returns the parsed setting or default value if wrong type or unable to be parsed
-const parseSetting = (value, setting) => {
- if (setting.type === 'array') {
- // If setting is array. (Have to treat arrays differently since typeof array is 'object')
- if (Array.isArray(value)) {
- return value;
- } if (typeof value === 'string') {
- // If setting is string, we have a chance to parse it and it might become an array
- try {
- const parsed = JSON.parse(value);
- if (Array.isArray(parsed)) {
- // Success, we parsed and got an array
- return parsed;
- }
- } catch (e) {
- console.error(e.message);
- }
- }
- } else {
- // If setting is not array
- // eslint-disable-next-line valid-typeof
- if (typeof value === setting.type) {
- return value;
- } if (typeof value === 'string') {
- // If setting is string, we have a chance to parse it and it might become an array
- try {
- const parsed = JSON.parse(value);
- // eslint-disable-next-line valid-typeof
- if (typeof parsed === setting.type) {
- return parsed;
- }
- } catch (e) {
- console.error(e.message);
- }
- }
- }
-
- if (value !== undefined) {
- console.error(
- `Error parsing [${setting.local}]: Reverting to default. Value: '${value}'`,
- );
- }
-
- return setting.default;
-};
-
-module.exports = {
- readSettings() {
- // Load and export our settings in preference of Args -> ENV -> Settings file -> Default
- const output = {};
- // eslint-disable-next-line no-plusplus
- for (let i = 0; i < fields.length; i++) {
- const setting = fields[i];
- // console.log('Processing setting', setting);
- // console.log(`Args: '${argv[setting.env]}'; '${argv[setting.local]}'`);
- // console.log(`ENV: '${process.env[setting.env]}'; '${process.env[setting.local]}'`);
- // console.log(`Settings: '${settings[setting.local]}'; '${setting.default}'`);
- const value = coalesce(
- argv[setting.env],
- argv[setting.local],
- process.env[setting.env],
- process.env[setting.local],
- settings[setting.env],
- settings[setting.local],
- setting.default,
- );
- output[setting.local] = parseSetting(value, setting);
-
- // Backwards compatibilty for PORT ENV setting
- if (setting.local === 'webapp_port' && output[setting.local] === 8088) {
- const port = argv.PORT || process.env.PORT || settings.PORT;
- if (port && port !== 8088) {
- console.log(`Please change 'PORT' to 'WEB_PORT'. Setting WEB_PORT to '${port}'`);
- output[setting.local] = port;
- }
- }
-
- // Remove trailing slashes, if they exist
- if (
- (setting.local === 'webroot')
- && output[setting.local].endsWith('/')
- ) {
- console.log(
- `${setting.local}/${setting.env} should not end in '/'. Removing trailing slash(es) for you.`,
- );
- output[setting.local] = output[setting.local].replace(/\/+$/, '');
- console.log('- Done.');
- }
- // Add leading slash, if not provided
- if (
- setting.local === 'webroot'
- && output[setting.local].length > 1
- && !output[setting.local].startsWith('/')
- ) {
- console.log(
- `${setting.local}/${setting.env} should always start with '/'. Adding the leading slash for you.`,
- );
- // Make sure it starts with one leading slash
- output[setting.local] = `/${output[setting.local]}`;
- console.log('- Done.');
- }
- // Make sure 'webroot' and 'serverroot' aren't set to '/'. Revert to default if they do.
- if (
- (setting.local === 'webroot' || setting.local === 'serverroot')
- && output[setting.local] === '/'
- ) {
- console.log(
- `${setting.local}/${setting.env} cannot be set to '/'. Reverting to default: '${setting.default}'`,
- );
- output[setting.local] = setting.default;
- console.log('- Done.');
- }
- process.env[setting.env] = typeof output[setting.local] === 'object'
- ? JSON.stringify(output[setting.local])
- : output[setting.local];
- }
-
- // console.log('Our settings are', output)
- return output;
- },
-};
diff --git a/config/defaults.js b/config/defaults.js
new file mode 100644
index 00000000..364cfb92
--- /dev/null
+++ b/config/defaults.js
@@ -0,0 +1,50 @@
+const defaults = {
+ port: 8088,
+ base_url: '/',
+
+ servers: [
+ {
+ name: 'SyncLounge AU1',
+ location: 'Sydney, Australia',
+ url: 'https://v3au1.synclounge.tv/slserver',
+ image: 'flags/au.png',
+ },
+ {
+ name: 'SyncLounge EU1',
+ location: 'Amsterdam, Netherlands',
+ url: 'https://v2eu1.synclounge.tv/server',
+ image: 'flags/eu.png',
+ },
+ {
+ name: 'SyncLounge US1',
+ location: 'Miami, United States',
+ url: 'https://v2us1.synclounge.tv/server',
+ image: 'flags/us.png',
+ },
+ {
+ name: 'SyncLounge US2',
+ location: 'Miami, United States',
+ url: 'https://v3us1.synclounge.tv/slserver',
+ image: 'flags/us.png',
+ },
+ {
+ name: 'SyncLounge US3',
+ location: 'Miami, United States',
+ url: 'https://v3us2.synclounge.tv/slserver',
+ image: 'flags/us.png',
+ },
+ ],
+
+ authentication: {
+ mechanism: 'none',
+ },
+
+ default_slplayer_autoplay: true,
+ default_slplayer_force_transcode: false,
+ default_slplayer_volume: 1,
+ default_client_poll_interval: 1000,
+ default_sync_flexability: 3000,
+ default_sync_mode: 'cleanseek',
+};
+
+module.exports = defaults;
diff --git a/config/index.js b/config/index.js
new file mode 100644
index 00000000..63c1997f
--- /dev/null
+++ b/config/index.js
@@ -0,0 +1,33 @@
+const nconf = require('nconf');
+const defaults = require('./defaults');
+
+nconf
+ .argv({
+ separator: '__',
+ parseValues: true,
+ })
+ .env({
+ separator: '__',
+ lowerCase: true,
+ parseValues: true,
+ whitelist: Object.keys(defaults).concat([
+ 'autojoin__server',
+ 'autojoin__room',
+ 'autojoin__password',
+ 'authentication__mechanism',
+ 'authentication__type',
+ 'authentication__authorized',
+
+ 'custom_server__name',
+ 'custom_server__location',
+ 'custom_server__url',
+ 'custom_server__image',
+
+ 'default_slplayer_quality',
+ ]),
+ })
+ .file({ file: 'config.json' });
+
+nconf.defaults(defaults);
+
+module.exports = nconf;
diff --git a/package-lock.json b/package-lock.json
index 167ae179..3461dc4c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1908,6 +1908,7 @@
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
"integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
"requires": {
"mime-types": "~2.1.24",
"negotiator": "0.6.2"
@@ -2091,7 +2092,8 @@
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
},
"array-includes": {
"version": "3.1.1",
@@ -2488,6 +2490,7 @@
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
"integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
"requires": {
"bytes": "3.1.0",
"content-type": "~1.0.4",
@@ -2744,7 +2747,8 @@
"bytes": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
},
"cacache": {
"version": "12.0.4",
@@ -3263,6 +3267,12 @@
"q": "^1.1.2"
}
},
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -3446,6 +3456,7 @@
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
"integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
"requires": {
"safe-buffer": "5.1.2"
}
@@ -3453,7 +3464,8 @@
"content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
},
"convert-source-map": {
"version": "1.7.0",
@@ -3467,12 +3479,14 @@
"cookie": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
},
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
},
"copy-concurrently": {
"version": "1.0.5",
@@ -3615,15 +3629,6 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
- "cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
"cosmiconfig": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
@@ -3959,6 +3964,7 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
"requires": {
"ms": "2.0.0"
}
@@ -4234,7 +4240,8 @@
"depd": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
},
"des.js": {
"version": "1.0.1",
@@ -4249,7 +4256,8 @@
"destroy": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
},
"detect-browser": {
"version": "5.1.1",
@@ -4450,7 +4458,8 @@
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
},
"ejs": {
"version": "2.7.4",
@@ -4508,7 +4517,8 @@
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
},
"end-of-stream": {
"version": "1.4.4",
@@ -4687,7 +4697,8 @@
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
},
"escape-string-regexp": {
"version": "1.0.5",
@@ -5167,7 +5178,8 @@
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
},
"event-pubsub": {
"version": "4.3.0",
@@ -5260,6 +5272,7 @@
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
"integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
"requires": {
"accepts": "~1.3.7",
"array-flatten": "1.1.1",
@@ -5539,6 +5552,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
@@ -5645,7 +5659,8 @@
"forwarded": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
},
"fragment-cache": {
"version": "0.2.1",
@@ -5659,7 +5674,8 @@
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
},
"from2": {
"version": "2.3.0",
@@ -6230,6 +6246,7 @@
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
"integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
"requires": {
"depd": "~1.1.2",
"inherits": "2.0.3",
@@ -6294,6 +6311,7 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
@@ -6406,7 +6424,14 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
},
"inquirer": {
"version": "7.2.0",
@@ -6552,6 +6577,12 @@
"loose-envify": "^1.0.0"
}
},
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
"ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
@@ -6567,7 +6598,8 @@
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true
},
"is-absolute-url": {
"version": "2.1.0",
@@ -7060,6 +7092,15 @@
"launch-editor": "^2.2.1"
}
},
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -7341,7 +7382,8 @@
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
},
"memory-fs": {
"version": "0.4.1",
@@ -7356,7 +7398,8 @@
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
},
"merge-source-map": {
"version": "1.1.0",
@@ -7390,7 +7433,8 @@
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
},
"micromatch": {
"version": "3.1.10",
@@ -7434,17 +7478,20 @@
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
},
"mime-db": {
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+ "dev": true
},
"mime-types": {
"version": "2.1.27",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+ "dev": true,
"requires": {
"mime-db": "1.44.0"
}
@@ -7516,7 +7563,8 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
},
"minipass": {
"version": "3.1.3",
@@ -7627,7 +7675,8 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
},
"multicast-dns": {
"version": "6.2.3",
@@ -7687,10 +7736,114 @@
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
"dev": true
},
+ "nconf": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz",
+ "integrity": "sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q==",
+ "dev": true,
+ "requires": {
+ "async": "^1.4.0",
+ "ini": "^1.3.0",
+ "secure-keys": "^1.0.0",
+ "yargs": "^3.19.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
+ }
+ }
+ },
"negotiator": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
},
"neo-async": {
"version": "2.6.1",
@@ -7829,6 +7982,12 @@
"integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
"dev": true
},
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -7838,7 +7997,8 @@
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
},
"object-component": {
"version": "0.0.3",
@@ -7978,6 +8138,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
"requires": {
"ee-first": "1.1.1"
}
@@ -8084,6 +8245,15 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -8243,7 +8413,8 @@
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
},
"pascalcase": {
"version": "0.1.1",
@@ -8296,7 +8467,8 @@
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
},
"path-type": {
"version": "3.0.0",
@@ -9060,6 +9232,7 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
"integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "dev": true,
"requires": {
"forwarded": "~0.1.2",
"ipaddr.js": "1.9.1"
@@ -9153,7 +9326,8 @@
"qs": {
"version": "6.7.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
},
"query-string": {
"version": "4.3.4",
@@ -9205,12 +9379,14 @@
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
},
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
"integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
"requires": {
"bytes": "3.1.0",
"http-errors": "1.7.2",
@@ -9692,7 +9868,8 @@
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
},
"safe-regex": {
"version": "1.1.0",
@@ -9706,7 +9883,8 @@
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
},
"sass": {
"version": "1.26.9",
@@ -9755,6 +9933,12 @@
"ajv-keywords": "^3.4.1"
}
},
+ "secure-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
+ "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o=",
+ "dev": true
+ },
"select": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
@@ -9786,6 +9970,7 @@
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
"integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
"requires": {
"debug": "2.6.9",
"depd": "~1.1.2",
@@ -9805,7 +9990,8 @@
"ms": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
}
}
},
@@ -9857,6 +10043,7 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
"integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
@@ -9902,7 +10089,8 @@
"setprototypeof": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
},
"sha.js": {
"version": "2.4.11",
@@ -10482,7 +10670,8 @@
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
},
"stream-browserify": {
"version": "2.0.2",
@@ -10939,7 +11128,8 @@
"toidentifier": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
},
"toposort": {
"version": "1.0.7",
@@ -11038,6 +11228,7 @@
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
"requires": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
@@ -11152,7 +11343,8 @@
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
},
"unquote": {
"version": "1.1.1",
@@ -11322,7 +11514,8 @@
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
},
"uuid": {
"version": "3.4.0",
@@ -11355,7 +11548,8 @@
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
},
"vendors": {
"version": "1.0.4",
@@ -12249,6 +12443,12 @@
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
"dev": true
},
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=",
+ "dev": true
+ },
"word-wrap": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
diff --git a/package.json b/package.json
index 392c519d..b49ab00d 100644
--- a/package.json
+++ b/package.json
@@ -7,15 +7,10 @@
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
- "lint": "vue-cli-service lint",
- "server": "node server.js",
- "start": "node server.js"
+ "lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.6.5",
- "cors": "^2.8.5",
- "express": "^4.17.1",
- "minimist": "^1.2.5",
"vue": "^2.6.11",
"vue-router": "^3.3.4",
"vuetify": "^2.3.2",
@@ -40,6 +35,7 @@
"git-rev-sync": "^2.0.0",
"humanize-duration": "^3.23.1",
"lodash-es": "^4.17.15",
+ "nconf": "^0.10.0",
"sass": "^1.26.9",
"sass-loader": "^8.0.2",
"shaka-player": "^2.5.13",
diff --git a/src/App.vue b/src/App.vue
index 4361ec56..61d2af84 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -110,19 +110,8 @@
style="height: 100%"
fluid
>
-
- Failed to fetch config: {{ GET_CONFIGURATION_FETCHED_ERROR }}
-
-
{
commit('SET_LEFT_SIDEBAR_OPEN', open);
@@ -17,18 +15,6 @@ export default {
commit('SET_MANUAL_SYNC_QUEUED', true);
},
- FETCH_CONFIG: async ({ commit }) => {
- const url = window.location.origin + window.location.pathname.replace(/\/+$/, '');
- try {
- const { data } = await axios.get(`${url}/config`);
- commit('SET_CONFIG', data);
- } catch (e) {
- commit('SET_CONFIGURATION_FETCH_ERROR', e);
- }
-
- commit('SET_CONFIGURATION_FETCHED', true);
- },
-
DISPLAY_NOTIFICATION: ({ commit }, message) => {
commit('SET_SNACKBAR_MESSAGE', message);
commit('SET_SNACKBAR_OPEN', true);
diff --git a/src/store/modules/settings/getters.js b/src/store/modules/settings/getters.js
index d9ce14d0..3451fc74 100644
--- a/src/store/modules/settings/getters.js
+++ b/src/store/modules/settings/getters.js
@@ -1,29 +1,38 @@
-const { coalesce } = require('@/utils/helpers');
+import coalesce from '@/utils/coalesce';
// Use stored value if not null, othewise fallback to config, then default values
export default {
GET_AUTOPLAY: (state, getters, rootState, rootGetters) => coalesce(state.autoplay,
- rootGetters.GET_CONFIG.autoplay),
+ rootGetters.GET_CONFIG.default_slplayer_autoplay),
- GET_CLIENTPOLLINTERVAL: (state) => state.clientPollInterval,
+ GET_CLIENTPOLLINTERVAL: (state, getters, rootState, rootGetters) => coalesce(
+ state.clientPollInterval,
+ rootGetters.GET_CONFIG.default_client_poll_interval,
+ ),
- GET_SYNCMODE: (state) => state.syncMode,
+ GET_SYNCMODE: (state, getters, rootState, rootGetters) => coalesce(
+ state.syncMode,
+ rootGetters.GET_CONFIG.default_sync_mode,
+ ),
- GET_SYNCFLEXIBILITY: (state) => state.syncFlexibility,
-
- GET_CUSTOMSERVER: (state, getters, rootState, rootGetters) => coalesce(state.customServer,
- rootGetters.GET_CONFIG.customServer),
+ GET_SYNCFLEXIBILITY: (state, getters, rootState, rootGetters) => coalesce(
+ state.syncFlexibility,
+ rootGetters.GET_CONFIG.default_sync_flexability,
+ ),
GET_SLPLAYERQUALITY: (state, getters, rootState, rootGetters) => coalesce(
state.slPlayerQuality,
- rootGetters.GET_CONFIG.slPlayerQuality,
+ rootGetters.GET_CONFIG.default_slplayer_quality,
) || null,
- GET_SLPLAYERVOLUME: (state) => state.slPlayerVolume,
+ GET_SLPLAYERVOLUME: (state, getters, rootState, rootGetters) => coalesce(
+ state.slPlayerVolume,
+ rootGetters.GET_CONFIG.default_slplayer_volume,
+ ),
GET_SLPLAYERFORCETRANSCODE: (state, getters, rootState, rootGetters) => coalesce(
state.slPlayerForceTranscode,
- rootGetters.GET_CONFIG.slPlayerForceTranscode,
+ rootGetters.GET_CONFIG.default_slplayer_force_transcode,
),
GET_HIDEUSERNAME: (state) => state.hideUsername,
diff --git a/src/store/modules/settings/state.js b/src/store/modules/settings/state.js
index 84332006..5f9b7464 100644
--- a/src/store/modules/settings/state.js
+++ b/src/store/modules/settings/state.js
@@ -3,18 +3,12 @@ import guid from '@/utils/guid';
// All of these settings are stored in localStorage and are persistent across reloads
const state = () => ({
autoplay: null,
- clientPollInterval: 1000,
- syncMode: 'cleanseek',
- syncFlexibility: 3000,
- customServer: {
- name: 'Custom Server',
- location: 'Anywhere!',
- url: 'custom',
- image: 'synclounge-white.png',
- },
+ clientPollInterval: null,
+ syncMode: null,
+ syncFlexibility: null,
customServerUserInputtedUrl: 'http://',
slPlayerQuality: null,
- slPlayerVolume: 1,
+ slPlayerVolume: null,
slPlayerForceTranscode: null,
hideUsername: false,
altUsername: null,
diff --git a/src/store/modules/synclounge/defaultservers.js b/src/store/modules/synclounge/defaultservers.js
deleted file mode 100644
index 350b1fd4..00000000
--- a/src/store/modules/synclounge/defaultservers.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Custom Servers list settings
-const defaultSyncloungeServers = [
- {
- name: 'SyncLounge AU1',
- location: 'Sydney, Australia',
- url: 'https://v3au1.synclounge.tv/slserver',
- image: 'flags/au.png',
- },
- {
- name: 'SyncLounge EU1',
- location: 'Amsterdam, Netherlands',
- url: 'https://v2eu1.synclounge.tv/server',
- image: 'flags/eu.png',
- },
- {
- name: 'SyncLounge US1',
- location: 'Miami, United States',
- url: 'https://v2us1.synclounge.tv/server',
- image: 'flags/us.png',
- },
- {
- name: 'SyncLounge US2',
- location: 'Miami, United States',
- url: 'https://v3us1.synclounge.tv/slserver',
- image: 'flags/us.png',
- },
- {
- name: 'SyncLounge US3',
- location: 'Miami, United States',
- url: 'https://v3us2.synclounge.tv/slserver',
- image: 'flags/us.png',
- },
-];
-
-export default defaultSyncloungeServers;
diff --git a/src/store/modules/synclounge/getters.js b/src/store/modules/synclounge/getters.js
index da9b5bd8..219e5453 100644
--- a/src/store/modules/synclounge/getters.js
+++ b/src/store/modules/synclounge/getters.js
@@ -1,5 +1,3 @@
-import defaultSyncloungeServers from './defaultservers';
-
const loadToNumber = (load) => {
switch (load) {
case 'low':
@@ -29,22 +27,10 @@ export default {
GET_HOST_USER: (state, getters) => getters.GET_USERS.find((u) => u.role === 'host'),
AM_I_HOST: (state, getters) => getters.GET_ME && getters.GET_ME.role === 'host',
- GET_SYNCLOUNGE_SERVERS: (state, getters, rootState, rootGetters) => {
- if (rootGetters.GET_CONFIG.servers && rootGetters.GET_CONFIG.servers.length > 0) {
- if (rootGetters.GET_CONFIG.customServer) {
- console.error(
- "'customServer' setting provided with 'servers' setting. Ignoring 'customServer' setting.",
- );
- }
- return rootGetters.GET_CONFIG.servers;
- }
-
- if (rootGetters.GET_CONFIG.customServer) {
- return defaultSyncloungeServers.concat([rootGetters.GET_CONFIG.customServer]);
- }
-
- return defaultSyncloungeServers.concat([rootGetters['settings/GET_CUSTOMSERVER']]);
- },
+ GET_SYNCLOUNGE_SERVERS: (state, getters, rootState, rootGetters) => (
+ rootGetters.GET_CONFIG.customServer
+ ? rootGetters.GET_CONFIG.servers.concat([rootGetters.GET_CONFIG.customServer])
+ : rootGetters.GET_CONFIG.servers),
GET_SERVERS_HEALTH: (state) => state.serversHealth,
diff --git a/src/store/mutations.js b/src/store/mutations.js
index 678759f9..7f2123b3 100644
--- a/src/store/mutations.js
+++ b/src/store/mutations.js
@@ -15,18 +15,6 @@ export default {
state.upNextPostPlayData = data;
},
- SET_CONFIG: (state, data) => {
- state.configuration = data;
- },
-
- SET_CONFIGURATION_FETCHED: (state, fetched) => {
- state.configurationFetcehd = fetched;
- },
-
- SET_CONFIGURATION_FETCH_ERROR: (state, error) => {
- state.configurationFetchError = error;
- },
-
SET_ACTIVE_METADATA: (state, metadata) => {
state.activeMetadata = metadata;
},
diff --git a/src/store/state.js b/src/store/state.js
index af7ec882..bdf5fe01 100644
--- a/src/store/state.js
+++ b/src/store/state.js
@@ -4,8 +4,6 @@ const state = () => ({
background: null,
upNextCache: {},
configuration: JSON.parse(process.env.VUE_APP_CONFIGURATION),
- configurationFetched: false,
- configurationFetchError: false,
isLeftSidebarOpen: false,
isRightSidebarOpen: false,
diff --git a/src/utils/coalesce.js b/src/utils/coalesce.js
new file mode 100644
index 00000000..6b54b9ff
--- /dev/null
+++ b/src/utils/coalesce.js
@@ -0,0 +1,3 @@
+const coalesce = (...arr) => arr.find((element) => element !== null && element !== undefined);
+
+export default coalesce;
diff --git a/src/utils/helpers.js b/src/utils/helpers.js
deleted file mode 100644
index e6274c2a..00000000
--- a/src/utils/helpers.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- coalesce: (...arr) => arr.find((element) => element !== null && element !== undefined),
-};
diff --git a/vue.config.js b/vue.config.js
index 52fe1565..5fee5ffe 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,11 +1,11 @@
const path = require('path');
const git = require('git-rev-sync');
-const { readSettings } = require('./SettingsHelper');
+const config = require('./config');
-const settings = readSettings();
+console.log(config.get());
-process.env.VUE_APP_CONFIGURATION = JSON.stringify(settings);
+process.env.VUE_APP_CONFIGURATION = JSON.stringify(config.get());
process.env.VUE_APP_VERSION = require('./package.json').version;
try {
@@ -13,11 +13,11 @@ try {
process.env.VUE_APP_GIT_DATE = git.date().toISOString();
} catch (e) {
// Sometimes on CI stuff they build with .git being present
- process.env.VUE_APP_GIT_DATE = new Date().toISOString();
+ process.env.VUE_APP_GIT_DATE = Date.now().toISOString();
}
module.exports = {
- publicPath: settings.webroot,
+ publicPath: config.get('baseurl'),
lintOnSave: process.env.NODE_ENV !== 'production',
productionSourceMap: false,
transpileDependencies: ['vuetify'],
diff --git a/webapp.js b/webapp.js
deleted file mode 100644
index 45ca51a9..00000000
--- a/webapp.js
+++ /dev/null
@@ -1,52 +0,0 @@
-/* eslint-disable no-param-reassign */
-// ABOUT
-// Runs the SyncLounge Web App - handles serving the static web content and link shortening services
-// Port defaults to 8088
-
-const express = require('express');
-const path = require('path');
-const cors = require('cors');
-
-const { readSettings } = require('./SettingsHelper');
-
-const settings = readSettings();
-
-const app = express();
-const router = express.Router();
-
-// Setup our web app
-app.use(cors());
-
-app.use(settings.webroot, router);
-
-router.use('/', express.static(path.join(__dirname, 'dist')));
-
-// Config handling
-router.get('/config', (req, res) => {
- res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
- res.header('Expires', '-1');
- res.header('Pragma', 'no-cache');
- res.send(settings);
-});
-
-// Catch anything else and redirect to the base URL
-router.get('*', (req, res) => {
- console.log('Catch all:', req.url);
- return res.redirect(`${settings.webroot}/`);
-});
-
-app.listen(settings.webapp_port, () => {
- console.log('SyncLounge WebApp successfully started on port ', settings.webapp_port);
-});
-
-console.log('Running with base URL: ', settings.webroot);
-
-if (settings.authentication && settings.authentication.mechanism !== 'none') {
- console.log('Authentication:', settings.authentication);
-}
-
-if (settings.servers) {
- console.log('Servers List:', settings.servers);
-} else if (settings.custom_server) {
- console.log('Custom Server List:', settings.custom_server);
-}