Switched to nconf and removed dynamic config

This commit is contained in:
Travis Shivers 2020-06-29 01:05:07 -05:00
parent 98f7bfc775
commit de4941b799
19 changed files with 372 additions and 458 deletions

2
.gitignore vendored
View File

@ -18,4 +18,4 @@ db.sqlite
# Optional npm cache directory
.npm
settings.json
config.json

View File

@ -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;
},
};

50
config/defaults.js Normal file
View File

@ -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;

33
config/index.js Normal file
View File

@ -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;

292
package-lock.json generated
View File

@ -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",

View File

@ -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",

View File

@ -110,19 +110,8 @@
style="height: 100%"
fluid
>
<v-alert
v-if="GET_CONFIGURATION_FETCHED_ERROR"
width="100%"
:dismissible="true"
type="error"
class="mt-0 mb-0"
>
Failed to fetch config: {{ GET_CONFIGURATION_FETCHED_ERROR }}
</v-alert>
<v-container
v-if="((GET_CONFIG.fetchConfig && !GET_CONFIGURATION_FETCHED)
|| !IS_DONE_FETCHING_DEVICES) && $route.matched.some((record) => record.meta.protected)"
v-if="!IS_DONE_FETCHING_DEVICES && $route.matched.some((record) => record.meta.protected)"
fill-height
>
<v-row
@ -212,8 +201,6 @@ export default {
'GET_UP_NEXT_POST_PLAY_DATA',
'getLogos',
'GET_CONFIG',
'GET_CONFIGURATION_FETCHED',
'GET_CONFIGURATION_FETCHED_ERROR',
'GET_ACTIVE_METADATA',
'GET_SNACKBAR_MESSAGE',
'GET_SNACKBAR_OPEN',
@ -280,7 +267,7 @@ export default {
// TODO: investigate passwords and invites. Is there really a point of a password if the invite link contains it?
// One alternative is to prompt for a password always instead, but maybe we don't need passwords at all
if (this.GET_ROOM) {
if (this.GET_CONFIG.autoJoin) {
if (this.GET_CONFIG.autojoin) {
// If autojoin, just link to main site
return window.location.origin;
}
@ -330,10 +317,7 @@ export default {
},
async created() {
if (this.GET_CONFIG.fetchConfig) {
await this.FETCH_CONFIG();
}
console.log(process.env);
if (this.IS_AUTHENTICATED) {
// Kick off a bunch of requests that we need for later
await this.FETCH_PLEX_USER();
@ -346,7 +330,6 @@ export default {
'SET_LEFT_SIDEBAR_OPEN',
'SET_RIGHT_SIDEBAR_OPEN',
'TOGGLE_RIGHT_SIDEBAR_OPEN',
'FETCH_CONFIG',
'DISPLAY_NOTIFICATION',
]),

View File

@ -7,7 +7,7 @@ Vue.use(Router);
// ==================== Router registration ====================
export default new Router({
base: process.env.webroot,
base: process.env.BASE_URL,
mode: 'hash',
routes: [
{

View File

@ -1,5 +1,3 @@
import axios from 'axios';
export default {
SET_LEFT_SIDEBAR_OPEN: ({ commit }, open) => {
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);

View File

@ -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,

View File

@ -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,

View File

@ -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;

View File

@ -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,

View File

@ -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;
},

View File

@ -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,

3
src/utils/coalesce.js Normal file
View File

@ -0,0 +1,3 @@
const coalesce = (...arr) => arr.find((element) => element !== null && element !== undefined);
export default coalesce;

View File

@ -1,3 +0,0 @@
module.exports = {
coalesce: (...arr) => arr.find((element) => element !== null && element !== undefined),
};

View File

@ -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'],

View File

@ -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);
}