From 99088fb723fb5959d9d671b3b16bccb8ab8f27a1 Mon Sep 17 00:00:00 2001 From: Yurii Date: Thu, 18 Jan 2024 23:37:12 +0300 Subject: [PATCH] fix: data output via web server on ESP32 fixed --- data/static/app.js.gz | Bin 3814 -> 3813 bytes lib/BufferedWebServer/BufferedWebServer.h | 11 +++++++---- lib/WebServerHandlers/DynamicPage.h | 5 +++-- src/PortalTask.h | 20 ++++++-------------- src_data/static/app.js | 19 +++++++++++++------ 5 files changed, 29 insertions(+), 26 deletions(-) diff --git a/data/static/app.js.gz b/data/static/app.js.gz index ce89d1f2cfa8c969c45e34e0707863c64fef3dad..3e85d834493029e664605b77b12d2f4d0d9e3512 100644 GIT binary patch delta 3112 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 DOfM?u diff --git a/lib/BufferedWebServer/BufferedWebServer.h b/lib/BufferedWebServer/BufferedWebServer.h index 0960052..e289e8e 100644 --- a/lib/BufferedWebServer/BufferedWebServer.h +++ b/lib/BufferedWebServer/BufferedWebServer.h @@ -16,18 +16,21 @@ public: this->webServer->send(505, F("text/html"), F("HTTP1.1 required")); return; } - #else - this->webServer->send(code, contentType, ""); - #endif this->webServer->setContentLength(measureJson(content)); + #else + this->webServer->setContentLength(CONTENT_LENGTH_UNKNOWN); + this->webServer->sendHeader(F("Content-Length"), String(measureJson(content))); + this->webServer->send(code, contentType, emptyString); + #endif + serializeJson(content, *this); this->flush(); #ifdef ARDUINO_ARCH_ESP8266 this->webServer->chunkedResponseFinalize(); #else - this->webServer->sendContent(""); + this->webServer->sendContent(emptyString); #endif } diff --git a/lib/WebServerHandlers/DynamicPage.h b/lib/WebServerHandlers/DynamicPage.h index 34c9cbb..c455d45 100644 --- a/lib/WebServerHandlers/DynamicPage.h +++ b/lib/WebServerHandlers/DynamicPage.h @@ -72,7 +72,8 @@ public: return true; } #else - server.send(200, F("text/html"), ""); + server.setContentLength(CONTENT_LENGTH_UNKNOWN); + server.send(200, "text/html", emptyString); #endif uint8_t* argStartPos = nullptr; @@ -209,7 +210,7 @@ public: #ifdef ARDUINO_ARCH_ESP8266 server.chunkedResponseFinalize(); #else - server.sendContent(""); + server.sendContent(emptyString); #endif return true; diff --git a/src/PortalTask.h b/src/PortalTask.h index bf2a5f1..133f415 100644 --- a/src/PortalTask.h +++ b/src/PortalTask.h @@ -349,19 +349,11 @@ protected: auto apCount = WiFi.scanComplete(); if (apCount <= 0) { - WiFi.scanNetworks(true, true); - - if (apCount == WIFI_SCAN_RUNNING || apCount == WIFI_SCAN_FAILED) { - this->webServer->send(202); - - } else if (apCount == 0) { - this->webServer->send(200, "application/json", "[]"); - - } else { - this->webServer->send(500); + if (apCount != WIFI_SCAN_RUNNING) { + WiFi.scanNetworks(true, true); } - + this->webServer->send(404); return; } @@ -374,11 +366,11 @@ protected: doc[i]["hidden"] = !ssid.length(); doc[i]["encryptionType"] = WiFi.encryptionType(i); } - - WiFi.scanDelete(); doc.shrinkToFit(); this->bufferedWebServer->send(200, "application/json", doc); + + WiFi.scanDelete(); }); @@ -522,7 +514,7 @@ protected: void loop() { // web server - if (!this->stateWebServer()) { + if (!this->stateWebServer() && (network->isApEnabled() || network->isStaEnabled())) { this->startWebServer(); Log.straceln(FPSTR(L_PORTAL_WEBSERVER), F("Started")); diff --git a/src_data/static/app.js b/src_data/static/app.js index 1656029..e53c12e 100644 --- a/src_data/static/app.js +++ b/src_data/static/app.js @@ -171,26 +171,33 @@ function setupNetworkScanForm(formSelector, tableSelector) { } }; - let attempts = 5; - let timer = setInterval(async () => { + let attempts = 6; + let attemptFn = async () => { attempts--; try { let response = await fetch(url, { cache: 'no-cache' }); if (response.status == 200) { - clearInterval(timer); await onSuccess(response); } else if (attempts <= 0) { await onFailed(response); + + } else { + setTimeout(attemptFn, 5000); } } catch (err) { - clearInterval(timer); - onFailed(err); + if (attempts <= 0) { + onFailed(err); + + } else { + setTimeout(attemptFn, 10000); + } } - }, 2000); + }; + attemptFn(); }; form.addEventListener('submit', onSubmitFn);