This commit is contained in:
Daniel Chelling 2026-01-21 17:08:09 +01:00 committed by GitHub
commit 66cedd5112
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -133,17 +133,12 @@ bool BookMetadataCache::buildBookBin(const std::string& epubPath, const BookMeta
tocFile.close(); tocFile.close();
return false; return false;
} }
// TODO: For large ZIPs loading the all localHeaderOffsets will crash. // NOTE: We intentionally skip calling loadAllFileStatSlims() here.
// However not having them loaded is extremely slow. Need a better solution here. // For large EPUBs (2000+ chapters), pre-loading all ZIP central directory entries
// Perhaps only a cache of spine items or a better way to speedup lookups? // into memory causes OOM crashes on ESP32-C3's limited ~380KB RAM.
if (!zip.loadAllFileStatSlims()) { // Instead, we let loadFileStatSlim() do individual lookups per spine item.
Serial.printf("[%lu] [BMC] Could not load zip local header offsets for size calculations\n", millis()); // This is O(n*m) instead of O(n) for lookups, but avoids memory exhaustion.
bookFile.close(); // See: https://github.com/crosspoint-reader/crosspoint-reader/issues/134
spineFile.close();
tocFile.close();
zip.close();
return false;
}
uint32_t cumSize = 0; uint32_t cumSize = 0;
spineFile.seek(0); spineFile.seek(0);
int lastSpineTocIndex = -1; int lastSpineTocIndex = -1;