Browse Source

FileBrowser: Improve stability of folder recursive deletion by movin algorithm from js to esp32.

FileList: Increase Json object size to 16384 Bytes in order to show folder with huge content better. JS cleanup (Sleep function had no effect)
master
grch101 4 years ago
committed by Torsten Stauder
parent
commit
c2eb65594a
  1. 17
      html/management.html
  2. 17
      src/HTMLmanagement.h
  3. 29
      src/main.cpp

17
html/management.html

@ -593,8 +593,6 @@
} }
Sleep(1000);
} }
}, false); }, false);
@ -620,23 +618,10 @@
function handleDeleteData(nodeId) { function handleDeleteData(nodeId) {
var ref = $('#explorerTree').jstree(true); var ref = $('#explorerTree').jstree(true);
var node = ref.get_node(nodeId); var node = ref.get_node(nodeId);
var children = $("#explorerTree").jstree("get_children_dom",nodeId);
console.log(children.length);
if(node.data.directory) {
if(children.length > 0) {
for(var i=0;i<children.length;i++)
{
console.log("call delete function for: " + children[i].text);
handleDeleteData(children[i].id);
}
}
}
console.log("call delete request: " + node.data.path); console.log("call delete request: " + node.data.path);
deleteData("/explorer?path=" + node.data.path); deleteData("/explorer?path=" + node.data.path);
} }
function Sleep(milliseconds) {
return new Promise(resolve => setTimeout(resolve, milliseconds));
}
function fileNameSort( a, b ) { function fileNameSort( a, b ) {
if ( a.dir && !b.dir ) { if ( a.dir && !b.dir ) {
return -1 return -1

17
src/HTMLmanagement.h

@ -592,8 +592,6 @@ static const char management_HTML[] PROGMEM = "<!DOCTYPE html>\
if (percentComplete === 100) {\ if (percentComplete === 100) {\
\ \
}\ }\
\
Sleep(1000);\
\ \
}\ }\
}, false);\ }, false);\
@ -620,23 +618,10 @@ static const char management_HTML[] PROGMEM = "<!DOCTYPE html>\
function handleDeleteData(nodeId) {\ function handleDeleteData(nodeId) {\
var ref = $('#explorerTree').jstree(true);\ var ref = $('#explorerTree').jstree(true);\
var node = ref.get_node(nodeId);\ var node = ref.get_node(nodeId);\
var children = $(\"#explorerTree\").jstree(\"get_children_dom\",nodeId);\
console.log(children.length);\
if(node.data.directory) {\
if(children.length > 0) {\
for(var i=0;i<children.length;i++)\
{\
console.log(\"call delete function for: \" + children[i].text);\
handleDeleteData(children[i].id);\
}\
}\
}\
console.log(\"call delete request: \" + node.data.path);\ console.log(\"call delete request: \" + node.data.path);\
deleteData(\"/explorer?path=\" + node.data.path);\ deleteData(\"/explorer?path=\" + node.data.path);\
}\ }\
function Sleep(milliseconds) {\
return new Promise(resolve => setTimeout(resolve, milliseconds));\
}\
\
function fileNameSort( a, b ) {\ function fileNameSort( a, b ) {\
if ( a.dir && !b.dir ) {\ if ( a.dir && !b.dir ) {\
return -1\ return -1\

29
src/main.cpp

@ -3904,7 +3904,7 @@ void explorerHandleFileStorageTask(void *parameter) {
// Sends a list of the content of a directory as JSON file // Sends a list of the content of a directory as JSON file
// requires a GET parameter path for the directory // requires a GET parameter path for the directory
void explorerHandleListRequest(AsyncWebServerRequest *request) { void explorerHandleListRequest(AsyncWebServerRequest *request) {
DynamicJsonDocument jsonBuffer(8192);
DynamicJsonDocument jsonBuffer(16384);
//StaticJsonDocument<4096> jsonBuffer; //StaticJsonDocument<4096> jsonBuffer;
String serializedJsonString; String serializedJsonString;
AsyncWebParameter *param; AsyncWebParameter *param;
@ -3951,11 +3951,30 @@ void explorerHandleListRequest(AsyncWebServerRequest *request) {
request->send(200, "application/json; charset=iso-8859-1", serializedJsonString); request->send(200, "application/json; charset=iso-8859-1", serializedJsonString);
} }
bool explorerDeleteDirectory(File dir) {
File file = dir.openNextFile();
while(file) {
if(file.isDirectory()) {
explorerDeleteDirectory(file);
} else {
FSystem.remove(file.name());
}
file = dir.openNextFile();
esp_task_wdt_reset();
}
return FSystem.rmdir(dir.name());
}
// Handles delete request of a file or directory // Handles delete request of a file or directory
// requires a GET parameter path to the file or directory // requires a GET parameter path to the file or directory
void explorerHandleDeleteRequest(AsyncWebServerRequest *request) { void explorerHandleDeleteRequest(AsyncWebServerRequest *request) {
File file; File file;
bool isDir;
AsyncWebParameter *param; AsyncWebParameter *param;
char asciiFilePath[256]; char asciiFilePath[256];
if(request->hasParam("path")){ if(request->hasParam("path")){
@ -3963,10 +3982,8 @@ void explorerHandleDeleteRequest(AsyncWebServerRequest *request) {
convertUtf8ToAscii(param->value(), asciiFilePath); convertUtf8ToAscii(param->value(), asciiFilePath);
if(FSystem.exists(asciiFilePath)) { if(FSystem.exists(asciiFilePath)) {
file = FSystem.open(asciiFilePath); file = FSystem.open(asciiFilePath);
isDir = file.isDirectory();
file.close();
if(isDir) {
if(FSystem.rmdir(asciiFilePath)) {
if(file.isDirectory()) {
if(explorerDeleteDirectory(file)) {
snprintf(logBuf, serialLoglength, "DELETE: %s deleted", asciiFilePath); snprintf(logBuf, serialLoglength, "DELETE: %s deleted", asciiFilePath);
loggerNl(serialDebug, logBuf, LOGLEVEL_INFO); loggerNl(serialDebug, logBuf, LOGLEVEL_INFO);
} else { } else {

Loading…
Cancel
Save