From de4941b799032f231cf328e5bb0e7d6878f3b1e6 Mon Sep 17 00:00:00 2001 From: Travis Shivers Date: Mon, 29 Jun 2020 01:05:07 -0500 Subject: [PATCH] Switched to nconf and removed dynamic config --- .gitignore | 2 +- SettingsHelper.js | 222 ------------- config/defaults.js | 50 +++ config/index.js | 33 ++ package-lock.json | 292 +++++++++++++++--- package.json | 8 +- src/App.vue | 23 +- src/router/index.js | 2 +- src/store/actions.js | 14 - src/store/modules/settings/getters.js | 31 +- src/store/modules/settings/state.js | 14 +- .../modules/synclounge/defaultservers.js | 35 --- src/store/modules/synclounge/getters.js | 22 +- src/store/mutations.js | 12 - src/store/state.js | 2 - src/utils/coalesce.js | 3 + src/utils/helpers.js | 3 - vue.config.js | 10 +- webapp.js | 52 ---- 19 files changed, 372 insertions(+), 458 deletions(-) delete mode 100644 SettingsHelper.js create mode 100644 config/defaults.js create mode 100644 config/index.js delete mode 100644 src/store/modules/synclounge/defaultservers.js create mode 100644 src/utils/coalesce.js delete mode 100644 src/utils/helpers.js delete mode 100644 webapp.js 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); -}