From 12cdd1d58a6ea20b454b837f96dc90d1500b2cde Mon Sep 17 00:00:00 2001 From: LordGrey <48840279+Lord-Grey@users.noreply.github.com> Date: Tue, 31 Aug 2021 10:55:32 +0200 Subject: [PATCH] Streamline API calls from UI (incl. Fix #1311, #1314) (#1312) * JSONeditor: Disable watchers when updating selections dynamically * Refactor - Load last instance config when loading UI page * LED Devices - Notify getproperties watchers for configured hostname * Remove unused variable * Fix #1314 - Additional classic & matrix configuration items were not saved --- .vs/launch.vs.json | 3 +- .../js/20210820_LoadInstanceConfig.zip | Bin 0 -> 29542 bytes assets/webconfig/js/content_index.js | 26 ++++----- assets/webconfig/js/content_leds.js | 31 +++++----- assets/webconfig/js/ui_utils.js | 54 ++++++++++++------ dependencies/external/rpi_ws281x | 2 +- libsrc/leddevice/dev_net/LedDeviceWled.cpp | 2 +- 7 files changed, 70 insertions(+), 48 deletions(-) create mode 100644 assets/webconfig/js/20210820_LoadInstanceConfig.zip diff --git a/.vs/launch.vs.json b/.vs/launch.vs.json index 37627ab1..895d6f98 100644 --- a/.vs/launch.vs.json +++ b/.vs/launch.vs.json @@ -9,7 +9,8 @@ "name": "Run hyperion with debug option and external console", "args": [ "-d", - "-c" + "-c", + "-u test" ], "externalConsole": true } diff --git a/assets/webconfig/js/20210820_LoadInstanceConfig.zip b/assets/webconfig/js/20210820_LoadInstanceConfig.zip new file mode 100644 index 0000000000000000000000000000000000000000..e77752d04c1ad44b866d49e4c7390567aa1a41c4 GIT binary patch literal 29542 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 L02b~4>+b&p3#h0K literal 0 HcmV?d00001 diff --git a/assets/webconfig/js/content_index.js b/assets/webconfig/js/content_index.js index 26fd19d9..728c3f55 100755 --- a/assets/webconfig/js/content_index.js +++ b/assets/webconfig/js/content_index.js @@ -1,5 +1,3 @@ -var instNameInit = false - $(document).ready(function () { var darkModeOverwrite = getStorage("darkModeOverwrite", true); @@ -27,8 +25,6 @@ $(document).ready(function () { // comps window.comps = event.response.info.components - $(window.hyperion).trigger("ready"); - window.comps.forEach(function (obj) { if (obj.name == "ALL") { if (obj.enabled) @@ -44,12 +40,6 @@ $(document).ready(function () { $('#btn_hypinstanceswitch').toggle(true) else $('#btn_hypinstanceswitch').toggle(false) - // update listing at button - updateHyperionInstanceListing() - if (!instNameInit) { - window.currentHyperionInstanceName = getInstanceNameByIndex(0); - instNameInit = true; - } updateSessions(); }); // end cmd-serverinfo @@ -112,11 +102,9 @@ $(document).ready(function () { $(window.hyperion).one("cmd-authorize-getTokenList", function (event) { tokenList = event.response.info; - requestServerInfo(); }); $(window.hyperion).on("cmd-sysinfo", function (event) { - requestServerInfo(); window.sysInfo = event.response.info; window.currentVersion = window.sysInfo.hyperion.version; @@ -126,16 +114,22 @@ $(document).ready(function () { $(window.hyperion).one("cmd-config-getschema", function (event) { window.serverSchema = event.response.info; - requestServerConfig(); + window.schema = window.serverSchema.properties; + requestTokenInfo(); requestGetPendingTokenRequests(); - window.schema = window.serverSchema.properties; + //Switch to last selected instance and load related config + var lastSelectedInstance = getStorage('lastSelectedInstance', false); + if (!window.serverInfo.instance[lastSelectedInstance]) { + lastSelectedInstance = 0; + } + instanceSwitch(lastSelectedInstance); + }); $(window.hyperion).on("cmd-config-getconfig", function (event) { window.serverConfig = event.response.info; - requestSysInfo(); window.showOptHelp = window.serverConfig.general.showOptHelp; }); @@ -163,6 +157,8 @@ $(document).ready(function () { if (event.response.hasOwnProperty('info')) setStorage("loginToken", event.response.info.token, true); + requestSysInfo(); + requestServerInfo(); requestServerConfigSchema(); }); diff --git a/assets/webconfig/js/content_leds.js b/assets/webconfig/js/content_leds.js index a99b68af..678e9e72 100755 --- a/assets/webconfig/js/content_leds.js +++ b/assets/webconfig/js/content_leds.js @@ -383,22 +383,24 @@ function blackListLeds(nonBlacklistLedArray, blackList) { } function getLedConfig() { - var ledConfig = { classic: {}, matrix: {} }; - var slConfig = window.serverConfig.ledConfig; - for (var key in slConfig.classic) { - if (typeof (slConfig.classic[key]) === "boolean") + var ledConfig = { classic: {}, matrix: {} }; + + var classicSchema = window.serverSchema.properties.ledConfig.properties.classic.properties; + for (var key in classicSchema) { + if (classicSchema[key].type === "boolean") ledConfig.classic[key] = $('#ip_cl_' + key).is(':checked'); - else if (Number.isInteger(slConfig.classic[key])) + else if (classicSchema[key].type === "integer") ledConfig.classic[key] = parseInt($('#ip_cl_' + key).val()); else ledConfig.classic[key] = $('#ip_cl_' + key).val(); } - for (var key in slConfig.matrix) { - if (typeof (slConfig.matrix[key]) === "boolean") + var matrixSchema = window.serverSchema.properties.ledConfig.properties.matrix.properties; + for (var key in matrixSchema) { + if (matrixSchema[key].type === "boolean") ledConfig.matrix[key] = $('#ip_ma_' + key).is(':checked'); - else if (Number.isInteger(slConfig.matrix[key])) + else if (matrixSchema[key].type === "integer") ledConfig.matrix[key] = parseInt($('#ip_ma_' + key).val()); else ledConfig.matrix[key] = $('#ip_ma_' + key).val(); @@ -876,6 +878,8 @@ $(document).ready(function () { break; case 'NONE': conf_editor.getEditor(specOptPath + "host").enable(); + //Trigger getProperties via host value + conf_editor.notifyWatchers(specOptPath + "host"); break; case 'SELECT': conf_editor.getEditor(specOptPath + "host").setValue(""); @@ -884,9 +888,8 @@ $(document).ready(function () { break; default: conf_editor.getEditor(specOptPath + "host").disable(); - //Reset host value, to trigger getProperties via host value - conf_editor.getEditor(specOptPath + "host").setValue(""); - conf_editor.getEditor(specOptPath + "host").setValue(val); + //Trigger getProperties via host value + conf_editor.notifyWatchers(specOptPath + "host"); break; } @@ -1510,10 +1513,10 @@ async function getProperties_device(ledType, key, params) { if (!devicesProperties[ledType][key]) { const res = await requestLedDeviceProperties(ledType, params); if (res && !res.error) { - var deviceProperties = res.info.properties; + var ledDeviceProperties = res.info.properties; - if (!jQuery.isEmptyObject(deviceProperties)) { - devicesProperties[ledType][key] = deviceProperties; + if (!jQuery.isEmptyObject(ledDeviceProperties)) { + devicesProperties[ledType][key] = ledDeviceProperties; if (!window.readOnlyMode) { $('#btn_submit_controller').attr('disabled', false); diff --git a/assets/webconfig/js/ui_utils.js b/assets/webconfig/js/ui_utils.js index 76a0d160..c1542af4 100644 --- a/assets/webconfig/js/ui_utils.js +++ b/assets/webconfig/js/ui_utils.js @@ -88,7 +88,7 @@ function loadContent(event, forceRefresh) { var tag; var lastSelectedInstance = getStorage('lastSelectedInstance', false); - + if (lastSelectedInstance && (lastSelectedInstance != window.currentHyperionInstance)) { if (window.serverInfo.instance[lastSelectedInstance] && window.serverInfo.instance[lastSelectedInstance].running) { instanceSwitch(lastSelectedInstance); @@ -128,12 +128,13 @@ function getInstanceNameByIndex(index) { } function updateHyperionInstanceListing() { - var data = window.serverInfo.instance.filter(entry => entry.running); - $('#hyp_inst_listing').html(""); - for (var key in data) { - var currInstMarker = (data[key].instance == window.currentHyperionInstance) ? "component-on" : ""; + if (window.serverInfo.instance) { + var data = window.serverInfo.instance.filter(entry => entry.running); + $('#hyp_inst_listing').html(""); + for (var key in data) { + var currInstMarker = (data[key].instance == window.currentHyperionInstance) ? "component-on" : ""; - var html = '
  • \ + var html = '
  • ' - if (data.length - 1 > key) - html += '
  • ' + if (data.length - 1 > key) + html += '
  • ' - $('#hyp_inst_listing').append(html); + $('#hyp_inst_listing').append(html); - $('#hyperioninstance_' + data[key].instance).off().on("click", function (e) { - var inst = e.currentTarget.id.split("_")[1] - instanceSwitch(inst) - }); + $('#hyperioninstance_' + data[key].instance).off().on("click", function (e) { + var inst = e.currentTarget.id.split("_")[1] + instanceSwitch(inst) + }); + } } } @@ -290,9 +292,9 @@ function showInfoDialog(type, header, message) { $('#id_body_rename').append('

    ' + header + '


    '); $('#id_body_rename').append('

    ' + $.i18n('infoDialog_username_text') + '


    '); - $('#id_body_rename').append('

    ' + $.i18n('infoDialog_password_current_text') + - '


    '); - $('#id_body_rename').append('

    ' + $.i18n('infoDialog_password_new_text')+ + $('#id_body_rename').append('

    ' + $.i18n('infoDialog_password_current_text') + + '


    '); + $('#id_body_rename').append('

    ' + $.i18n('infoDialog_password_new_text') + '

    '); $('#id_body_rename').append('
    ' + $.i18n('infoDialog_password_minimum_length') + '
    '); $('#id_footer_rename').html('
    '); @@ -469,6 +471,9 @@ function updateJsonEditorSelection(rootEditor, path, key, addElements, newEnumVa var editor = rootEditor.getEditor(path); var orginalProperties = editor.schema.properties[key]; + var orginalWatchFunctions = rootEditor.watchlist[path + "." + key]; + rootEditor.unwatch(path + "." + key); + var newSchema = []; newSchema[key] = { @@ -546,12 +551,22 @@ function updateJsonEditorSelection(rootEditor, path, key, addElements, newEnumVa editor.removeObjectProperty(key); delete editor.cached_editors[key]; editor.addObjectProperty(key); + + if (orginalWatchFunctions) { + for (var i = 0; i < orginalWatchFunctions.length; i++) { + rootEditor.watch(path + "." + key, orginalWatchFunctions[i]); + } + } + rootEditor.notifyWatchers(path + "." + key); } function updateJsonEditorMultiSelection(rootEditor, path, key, addElements, newEnumVals, newTitelVals, newDefaultVal) { var editor = rootEditor.getEditor(path); var orginalProperties = editor.schema.properties[key]; + var orginalWatchFunctions = rootEditor.watchlist[path + "." + key]; + rootEditor.unwatch(path + "." + key); + var newSchema = []; newSchema[key] = { @@ -605,6 +620,13 @@ function updateJsonEditorMultiSelection(rootEditor, path, key, addElements, newE editor.removeObjectProperty(key); delete editor.cached_editors[key]; editor.addObjectProperty(key); + + if (orginalWatchFunctions) { + for (var i = 0; i < orginalWatchFunctions.length; i++) { + rootEditor.watch(path + "." + key, orginalWatchFunctions[i]); + } + } + rootEditor.notifyWatchers(path + "." + key); } function updateJsonEditorRange(rootEditor, path, key, minimum, maximum, defaultValue, step, clear) { diff --git a/dependencies/external/rpi_ws281x b/dependencies/external/rpi_ws281x index 5d0041eb..3a20f1bd 160000 --- a/dependencies/external/rpi_ws281x +++ b/dependencies/external/rpi_ws281x @@ -1 +1 @@ -Subproject commit 5d0041eba608e3a52aa637122a72396d3336d91b +Subproject commit 3a20f1bdd740a144de180a07d8d3317920459d2d diff --git a/libsrc/leddevice/dev_net/LedDeviceWled.cpp b/libsrc/leddevice/dev_net/LedDeviceWled.cpp index a2139342..2e848147 100644 --- a/libsrc/leddevice/dev_net/LedDeviceWled.cpp +++ b/libsrc/leddevice/dev_net/LedDeviceWled.cpp @@ -10,7 +10,7 @@ // Constants namespace { -const bool verbose = false; +const bool verbose = true; // Configuration settings const char CONFIG_ADDRESS[] = "host";
  • \ \