[ai] improve web stability

This commit is contained in:
2025-08-18 22:34:23 +02:00
parent b6ac157207
commit 0a08709160
2 changed files with 138 additions and 18 deletions

View File

@@ -330,7 +330,9 @@ void handleMoveFile(AsyncWebServerRequest *request)
if (SD.exists(from))
{
sd_lock_acquire();
SD.rename(from, to);
sd_lock_release();
Serial.println("Moved file: " + from + " to " + to);
// Rebuild directory tree to update file list
rootNode.buildDirectoryTree("/");
@@ -351,7 +353,9 @@ void handleDeleteFile(AsyncWebServerRequest *request)
if (SD.exists(filename))
{
sd_lock_acquire();
SD.remove(filename.c_str());
sd_lock_release();
Serial.println("Deleted file: " + filename);
// Rebuild directory tree to update file list
rootNode.buildDirectoryTree("/");
@@ -800,6 +804,8 @@ void saveMappingToFile(const String filename)
// Function to handle edit requests
void editMapping(AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
if (request->hasParam("rfid", true) && request->hasParam("song", true))
{
String rfid = request->getParam("rfid", true)->value();
@@ -1166,6 +1172,7 @@ server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
if (SD.exists(htmlPath))
{
AsyncWebServerResponse *response = request->beginResponse(SD, htmlPath, "text/html");
response->addHeader("Cache-Control", "no-store");
request->send(response);
}
else
@@ -1186,7 +1193,11 @@ server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
String cssPath = getSysDir("style.css");
if (SD.exists(cssPath))
{
request->send(SD, cssPath, "text/css");
{
AsyncWebServerResponse *resp = request->beginResponse(SD, cssPath, "text/css");
resp->addHeader("Cache-Control", "public, max-age=300");
request->send(resp);
}
}
else
{
@@ -1205,7 +1216,11 @@ server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
String jsPath = getSysDir("script.js");
if (SD.exists(jsPath))
{
request->send(SD, jsPath, "application/javascript");
{
AsyncWebServerResponse *resp = request->beginResponse(SD, jsPath, "application/javascript");
resp->addHeader("Cache-Control", "public, max-age=300");
request->send(resp);
}
}
else
{
@@ -1218,48 +1233,59 @@ server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
// Dynamic endpoints to avoid template processing heap spikes
server.on("/directory", HTTP_GET, [](AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
String html = processor(String("DIRECTORY"));
request->send(200, "text/html; charset=UTF-8", html);
});
server.on("/mapping", HTTP_GET, [](AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
String html = processor(String("MAPPING"));
request->send(200, "text/html; charset=UTF-8", html);
});
server.on("/state", HTTP_GET, [](AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
String state = getState();
request->send(200, "application/json charset=UTF-8", state.c_str()); });
request->send(200, "application/json; charset=UTF-8", state.c_str()); });
server.on("/start", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(200, "text/plain charset=UTF-8", "start");
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
request->send(200, "text/plain; charset=UTF-8", "start");
start(); });
server.on("/toggleplaypause", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(200, "text/plain charset=UTF-8", "toggleplaypause");
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
request->send(200, "text/plain; charset=UTF-8", "toggleplaypause");
togglePlayPause(); });
server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
request->send(200, "text/plain", "stop");
stop(); });
server.on("/next", HTTP_GET, [](AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
request->send(200, "text/plain", "next");
next(); });
server.on("/previous", HTTP_GET, [](AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
request->send(200, "text/plain", "previous");
previous(); });
@@ -1410,6 +1436,8 @@ void setup()
void id_song_action(AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
int params = request->params();
for (int i = 0; i < params; i++)
{
@@ -1425,6 +1453,8 @@ void id_song_action(AsyncWebServerRequest *request)
void progress_action(AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
int params = request->params();
for (int i = 0; i < params; i++)
@@ -1441,6 +1471,8 @@ void progress_action(AsyncWebServerRequest *request)
void volume_action(AsyncWebServerRequest *request)
{
webreq_enter();
request->onDisconnect([](){ webreq_exit(); });
int params = request->params();
for (int i = 0; i < params; i++)