diff --git a/web/index.html b/web/index.html
index 08f8e810..60daf856 100644
--- a/web/index.html
+++ b/web/index.html
@@ -119,15 +119,15 @@
-
+
-
+
-
+
@@ -138,12 +138,12 @@
-
+
-
+
{{if .Analytics.Inject}}
diff --git a/web/js/controller.js b/web/js/controller.js
index dfa6c292..e4b70086 100644
--- a/web/js/controller.js
+++ b/web/js/controller.js
@@ -50,7 +50,7 @@
state = newState;
}
- if (log.is(log.level.debug)) {
+ if (log.level === log.DEBUG) {
const previous = prevState ? prevState.name : '???';
const current = state ? state.name : '???';
const kept = lastState ? lastState.name : '???';
@@ -462,6 +462,13 @@
event.sub(RECORDING_TOGGLED, handleRecording);
event.sub(RECORDING_STATUS_CHANGED, handleRecordingStatus);
+ event.sub(SETTINGS_CHANGED, () => {
+ const newValue = settings.get()[opts.LOG_LEVEL];
+ if (newValue !== log.level) {
+ log.level = newValue;
+ }
+ });
+
// initial app state
setState(app.state.eden);
})(document, event, env, gameList, input, KEY, log, message, recording, room, rtcp, settings, socket, stats, stream, utils, workerManager);
diff --git a/web/js/gui/gui.js b/web/js/gui/gui.js
index 4a489605..e1d8c0c9 100644
--- a/web/js/gui/gui.js
+++ b/web/js/gui/gui.js
@@ -13,16 +13,21 @@ const gui = (() => {
return el;
}
- const _option = (text = '', selected = false) => {
+ const _option = (text = '', selected = false, label) => {
const el = _create('option');
- el.textContent = text;
+ if (label) {
+ el.textContent = label;
+ el.value = text;
+ } else {
+ el.textContent = text;
+ }
if (selected) el.selected = true;
return el;
}
const select = (key = '', callback = function () {
- }, values = [], current = '') => {
+ }, values = {values: [], labels: []}, current = '') => {
const el = _create();
const select = _create('select');
select.onchange = event => {
@@ -31,7 +36,9 @@ const gui = (() => {
el.append(select);
select.append(_option('none', current === ''));
- for (let value of values) select.append(_option(value, current === value));
+ values.values.forEach((value, index) => {
+ select.append(_option(value, current === value, values.labels?.[index]));
+ });
return el;
}
diff --git a/web/js/init.js b/web/js/init.js
index 782dfd05..d421bddb 100644
--- a/web/js/init.js
+++ b/web/js/init.js
@@ -1,5 +1,18 @@
settings.init();
-log.setLevel(settings.loadOr(opts.LOG_LEVEL, 'debug'));
+
+(() => {
+ let lvl = settings.loadOr(opts.LOG_LEVEL, log.DEFAULT);
+ // migrate old log level options
+ // !to remove at some point
+ if (isNaN(lvl)) {
+ console.warn(
+ `The log value [${lvl}] is not supported! ` +
+ `The default value [debug] will be used instead.`);
+ settings.set(opts.LOG_LEVEL, `${log.DEFAULT}`)
+ lvl = log.DEFAULT
+ }
+ log.level = lvl
+})();
keyboard.init();
joystick.init();
diff --git a/web/js/log.js b/web/js/log.js
index 3b80a48c..af138188 100644
--- a/web/js/log.js
+++ b/web/js/log.js
@@ -1,23 +1,35 @@
+/**
+ * Logging module.
+ *
+ * @version 2
+ */
const log = (() => {
- const levels = {'trace': 0, 'debug': 1, 'error': 2, 'warning': 3, 'info': 4};
- let level = -1;
+ const noop = () => ({})
- const atLeast = lv => (lv || -1) >= level;
- const noop = () => ({});
+ const _log = {
+ ASSERT: 1,
+ ERROR: 2,
+ WARN: 3,
+ INFO: 4,
+ DEBUG: 5,
+ TRACE: 6,
- const
- info = atLeast(levels.info) ? console.info.bind(window.console) : noop,
- debug = atLeast(levels.debug) ? console.debug.bind(window.console) : noop,
- error = atLeast(levels.error) ? console.error.bind(window.console) : noop,
- warning = atLeast(levels.warning) ? console.warn.bind(window.console) : noop;
+ DEFAULT: 5,
- return {
- level: levels,
- info,
- debug,
- error,
- warning,
- setLevel: (level_) => level = levels[level_] || -1,
- is: (level_) => level === level_
+ set level(level) {
+ this.assert = level >= this.ASSERT ? console.assert.bind(window.console) : noop;
+ this.error = level >= this.ERROR ? console.error.bind(window.console) : noop;
+ this.warn = level >= this.WARN ? console.warn.bind(window.console) : noop;
+ this.info = level >= this.INFO ? console.info.bind(window.console) : noop;
+ this.debug = level >= this.DEBUG ? console.debug.bind(window.console) : noop;
+ this.trace = level >= this.TRACE ? console.log.bind(window.console) : noop;
+ this._level = level;
+ },
+ get level() {
+ return this._level;
+ }
}
+ _log.level = _log.DEFAULT;
+
+ return _log
})(console, window);
diff --git a/web/js/settings/settings.js b/web/js/settings/settings.js
index c3686457..e3be8e81 100644
--- a/web/js/settings/settings.js
+++ b/web/js/settings/settings.js
@@ -15,7 +15,7 @@
*/
const settings = (() => {
// internal structure version
- const revision = 1;
+ const revision = 1.1;
// default settings
// keep them for revert to defaults option
@@ -169,7 +169,7 @@ const settings = (() => {
if (revision > store.settings._version) {
// !to handle this with migrations
- log.warning(`Your settings are in older format (v${store.settings._version})`);
+ log.warn(`Your settings are in older format (v${store.settings._version})`);
}
}
@@ -248,7 +248,7 @@ const settings = (() => {
const remove = (key, subKey) => {
const isRemoved = subKey !== undefined ? delete store.settings[key][subKey] : delete store.settings[key];
- if (!isRemoved) log.warning(`The key: ${key + (subKey ? '.' + subKey : '')} wasn't deleted!`);
+ if (!isRemoved) log.warn(`The key: ${key + (subKey ? '.' + subKey : '')} wasn't deleted!`);
provider.remove(key, subKey);
}
@@ -390,7 +390,7 @@ settings._renderrer = (() => {
const _settings = settings.get()[opts.INPUT_KEYBOARD_MAP];
if (_settings[newValue] !== undefined) {
- log.warning(`There are old settings for key: ${_settings[newValue]}, won't change!`);
+ log.warn(`There are old settings for key: ${_settings[newValue]}, won't change!`);
} else {
settings.remove(opts.INPUT_KEYBOARD_MAP, oldValue);
settings.set(opts.INPUT_KEYBOARD_MAP, {[newValue]: key});
@@ -446,8 +446,10 @@ settings._renderrer = (() => {
break;
case opts.LOG_LEVEL:
_option(data).withName('Log level')
- .restartNeeded()
- .add(gui.select(k, onChange, ['trace', 'debug', 'warning', 'info'], value))
+ .add(gui.select(k, onChange, {
+ labels: ['trace', 'debug', 'warning', 'info'],
+ values: [log.TRACE, log.DEBUG, log.WARN, log.INFO].map(String)
+ }, value))
.build();
break;
case opts.INPUT_KEYBOARD_MAP:
@@ -458,7 +460,7 @@ settings._renderrer = (() => {
break;
case opts.MIRROR_SCREEN:
_option(data).withName('Video mirroring without smooth')
- .add(gui.select(k, onChange, ['mirror'], value))
+ .add(gui.select(k, onChange, {values: ['mirror']}, value))
.build();
break;
default: