fix(minimap): improve error handling and performance in tile parsing

- Add warning logging in renderChunkToPixels catch block before fallback
- Switch maxTick filtering from skip/continue to early break (append-only optimization)
- Use existsSync for directory existence check in loadExistingTagContent
This commit is contained in:
Danielv123 committed 2026-02-21 17:02:50 +01:00
1 parent 9375c462af
commit 550ea22724
2 files changed
+8 -13

No files matched your search

+2 -1
View File
@@ -819,7 +819,8 @@ export class ControllerPlugin extends BaseControllerPlugin {
async loadExistingTagContent() {
try {
if (!await fs.pathExists(this.chartTagsPath)) {
// Use existsSync for synchronous directory existence check
if (!fs.existsSync(this.chartTagsPath)) {
return;
}
+6 -12
View File
@@ -63,6 +63,8 @@ export async function renderChunkToPixels(chunkData: BinaryData): Promise<Uint16
return pixels;
} catch (decompressError) {
// Log warning before falling back to black pixels
console.warn(`Failed to decompress chunk data: ${decompressError}`);
// Return black pixels on error
return new Uint16Array(32 * 32);
}
@@ -153,17 +155,9 @@ async function processChunkData(
const tick = readUInt32BE(tileData, offset) * 60; // Convert back to actual tick
offset += 4;
// Skip this chunk if it's beyond our target tick
// Break early if this record is beyond our target tick (append-only optimization)
if (maxTick !== undefined && tick > maxTick) {
const chunkCoordsByte = readUInt8(tileData, offset);
offset += 1;
const length = readUInt16BE(tileData, offset);
offset += 2;
if (offset + length > tileData.length) {
return { success: false, newOffset: offset };
}
offset += length; // Skip chunk data
return { success: true, newOffset: offset };
return { success: false, newOffset: offset - 4 };
}
const chunkCoordsByte = readUInt8(tileData, offset);
@@ -223,9 +217,9 @@ function processPixelData(
return { success: false, newOffset: offset };
}
// Skip if beyond target tick
// Break early if this record is beyond our target tick (append-only optimization)
if (maxTick !== undefined && tick > maxTick) {
return { success: true, newOffset: offset + expectedDataLength };
return { success: false, newOffset: offset - 4 };
}
for (let i = 0; i < pixelCount; i++) {