[ai] Many (memory) improvements, cleanup script, still problems

This commit is contained in:
2025-10-06 23:13:26 +02:00
parent 083dfd6e2a
commit abfe564891
7 changed files with 190 additions and 194 deletions

View File

@@ -111,7 +111,7 @@ void DirectoryNode::buildDirectoryTree(const char *currentPath)
break;
}
if (entry.isDirectory() && entry.name()[0] != '.' && strcmp(entry.name(), sys_dir.c_str()))
if (entry.isDirectory() && entry.name()[0] != '.' && strcmp(entry.name(), sys_dir))
{
dirNames.push_back(String(entry.name()));
}
@@ -533,50 +533,6 @@ DirectoryNode *DirectoryNode::advanceToNextMP3(const String *currentGlobal)
return this;
}
String DirectoryNode::getDirectoryStructureHTML() const {
// Calculate required size first (prevents reallocations)
size_t htmlSize = calculateHTMLSize();
String html;
html.reserve(htmlSize); // Precise allocation - no wasted RAM
// Helper lambda to append without temporary Strings
auto append = [&html](const __FlashStringHelper* fstr) {
html += fstr;
};
auto appendId = [&html](uint32_t id) {
html += id; // Direct numeric append (NO temporary String)
};
if (name == "/") {
append(F("<ul>\n"));
}
if (name != "/") {
append(F("<li data-id=\""));
appendId(id);
append(F("\"><b>"));
html += name; // Still uses String, but unavoidable for dynamic content
append(F("</b></li>\n"));
}
for (size_t i = 0; i < mp3Files.size(); i++) {
append(F("<li data-id=\""));
appendId(ids[i]);
append(F("\">"));
html += mp3Files[i]; // Dynamic file name
append(F("</li>\n"));
}
for (DirectoryNode* child : subdirectories) {
html += child->getDirectoryStructureHTML();
}
if (name == "/") {
append(F("</ul>\n"));
}
return html;
}
void DirectoryNode::streamDirectoryHTML(Print &out) const {
if (name == "/") {
@@ -616,33 +572,6 @@ void DirectoryNode::streamDirectoryHTML(Print &out) const {
}
}
// NEW: Calculate exact required size first
size_t DirectoryNode::calculateHTMLSize() const {
size_t size = 0;
// Opening/closing tags
if (name == "/") size += 6; // <ul>\n
// Current directory entry
if (name != "/") {
size += 22 + name.length() + 10; // <li...><b></b></li>\n + ID digits (est)
}
// MP3 files
for (size_t i = 0; i < mp3Files.size(); i++) {
size += 16 + mp3Files[i].length() + 10; // <li...></li>\n + ID digits
}
// Subdirectories
for (DirectoryNode* child : subdirectories) {
size += child->calculateHTMLSize();
}
// Closing tag
if (name == "/") size += 7; // </ul>\n
return size;
}
void DirectoryNode::appendIndentation(String &html, int level) const
{