From 41cdb8bcdd2aacc816a24fc996483d7ba086a393 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Wed, 2 Sep 2020 13:09:46 -0400 Subject: [PATCH] Allow saving/loading nvs from the nvs editor - release --- components/wifi-manager/code.js | 141 +++++++++++++----- .../wifi-manager/http_server_handlers.c | 1 + components/wifi-manager/index.html | 7 +- 3 files changed, 112 insertions(+), 37 deletions(-) diff --git a/components/wifi-manager/code.js b/components/wifi-manager/code.js index 511c4038..2ab63777 100644 --- a/components/wifi-manager/code.js +++ b/components/wifi-manager/code.js @@ -100,8 +100,95 @@ function RepeatRefreshAPInterval(){ if(RefreshAPIIntervalActive) startRefreshAPInterval(); } +function getConfigJson(slimMode){ + var config = {}; + $("input.nvs").each(function() { + var key = $(this)[0].id; + var val = $(this).val(); + if(!slimMode){ + var nvs_type = parseInt($(this)[0].attributes.nvs_type.nodeValue,10); + if (key != '') { + config[key] = {}; + if(nvs_type == nvs_type_t.NVS_TYPE_U8 + || nvs_type == nvs_type_t.NVS_TYPE_I8 + || nvs_type == nvs_type_t.NVS_TYPE_U16 + || nvs_type == nvs_type_t.NVS_TYPE_I16 + || nvs_type == nvs_type_t.NVS_TYPE_U32 + || nvs_type == nvs_type_t.NVS_TYPE_I32 + || nvs_type == nvs_type_t.NVS_TYPE_U64 + || nvs_type == nvs_type_t.NVS_TYPE_I64) { + config[key].value = parseInt(val); + } + else { + config[key].value = val; + } + config[key].type = nvs_type; + } + } + else { + config[key] = val; + } + }); + var key = $("#nvs-new-key").val(); + var val = $("#nvs-new-value").val(); + if (key != '') { + if(!slimMode){ + config[key] = {}; + config[key].value = val; + config[key].type = 33; + } + else { + config[key] = val; + } + } + return config; + } -$(document).ready(function(){ + + function onFileLoad(elementId, event) { + var data={}; + try{ + data = JSON.parse(elementId.srcElement.result); + } + catch (e){ + alert('Parsing failed!\r\n '+ e); + } + $("input.nvs").each(function() { + var key = $(this)[0].id; + var val = $(this).val(); + if(data[key]){ + if(data[key] != val){ + console.log("Changed "& key & " " & val & "==>" & data[key]); + $(this).val(data[key]); + } + } + else { + console.log("Value " & key & " missing from file"); + } + }); + + } + + function onChooseFile(event, onLoadFileHandler) { + if (typeof window.FileReader !== 'function') + throw ("The file API isn't supported on this browser."); + let input = event.target; + if (!input) + throw ("The browser does not properly implement the event object"); + if (!input.files) + throw ("This browser does not support the `files` property of the file input."); + if (!input.files[0]) + return undefined; + let file = input.files[0]; + let fr = new FileReader(); + fr.onload = onLoadFileHandler; + fr.readAsText(file); + input.value=""; + } + $(document).ready(function(){ + $("#load-nvs").click(function () { + $("#nvsfilename").trigger('click'); + }); $("#wifi-status").on("click", ".ape", function() { $( "#wifi" ).slideUp( "fast", function() {}); $( "#connect-details" ).slideDown( "fast", function() {}); @@ -334,42 +421,27 @@ $(document).ready(function(){ console.log('sent config JSON with data:', JSON.stringify(data)); }); + + $("#save-as-nvs").on("click", function() { + var data = { 'timestamp': Date.now() }; + var config = getConfigJson(true); + const a = document.createElement("a"); + a.href = URL.createObjectURL( + new Blob([JSON.stringify(config, null, 2)], { + type: "text/plain" + })); + a.setAttribute("download", "nvs_config" + Date.now() +"json"); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + console.log('sent config JSON with headers:', JSON.stringify(headers)); + console.log('sent config JSON with data:', JSON.stringify(data)); + }); + $("#save-nvs").on("click", function() { var headers = {}; var data = { 'timestamp': Date.now() }; - var config = {}; - $("input.nvs").each(function() { - var key = $(this)[0].id; - var val = $(this).val(); - var nvs_type = parseInt($(this)[0].attributes.nvs_type.nodeValue,10); - if (key != '') { - config[key] = {}; - if(nvs_type == nvs_type_t.NVS_TYPE_U8 - || nvs_type == nvs_type_t.NVS_TYPE_I8 - || nvs_type == nvs_type_t.NVS_TYPE_U16 - || nvs_type == nvs_type_t.NVS_TYPE_I16 - || nvs_type == nvs_type_t.NVS_TYPE_U32 - || nvs_type == nvs_type_t.NVS_TYPE_I32 - || nvs_type == nvs_type_t.NVS_TYPE_U64 - || nvs_type == nvs_type_t.NVS_TYPE_I64) { - config[key].value = parseInt(val); - } - else { - config[key].value = val; - } - - - config[key].type = nvs_type; - } - }); - var key = $("#nvs-new-key").val(); - var val = $("#nvs-new-value").val(); - if (key != '') { -// headers["X-Custom-" +key] = val; - config[key] = {}; - config[key].value = val; - config[key].type = 33; - } + var config = getConfigJson(false); data['config'] = config; $.ajax({ url: '/config.json', @@ -421,7 +493,6 @@ $(document).ready(function(){ fwurl : { value : url, type : 33 - } }; diff --git a/components/wifi-manager/http_server_handlers.c b/components/wifi-manager/http_server_handlers.c index 0d50b61d..ecb78abf 100644 --- a/components/wifi-manager/http_server_handlers.c +++ b/components/wifi-manager/http_server_handlers.c @@ -721,6 +721,7 @@ esp_err_t config_post_handler(httpd_req_t *req){ if(err==ESP_OK){ httpd_resp_sendstr(req, "{ \"result\" : \"OK\" }"); + messaging_post_message(MESSAGING_INFO,MESSAGING_CLASS_SYSTEM,"Save Success"); } cJSON_Delete(root); if(bOTA) { diff --git a/components/wifi-manager/index.html b/components/wifi-manager/index.html index a2813831..1ee93e93 100644 --- a/components/wifi-manager/index.html +++ b/components/wifi-manager/index.html @@ -332,13 +332,16 @@ -
+
- + + + +