From 00d49c53180afa1144e63445e01b4e2e2230d0be Mon Sep 17 00:00:00 2001 From: rakadu1 Date: Tue, 4 Nov 2025 09:49:44 +0530 Subject: [PATCH] fix(cache): Correct key usage for auto-reloading from IndexedDB This commit resolves a critical bug that prevented the auto-reload feature from working on application startup. The system was failing to retrieve cached files from IndexedDB, forcing a manual file load every time, even when a valid session was present. ### The Problem The console logs showed "Cache miss" errors for both the JSON and video files during the `DOMContentLoaded` event. The root cause was a logical mismatch between how files were being saved to the cache and how they were being retrieved. 1. **Saving to Cache:** - When a file is loaded (e.g., `fHist_...json`), the `saveFileWithMetadata` function in `db.js` is called. - This function stores the file data using a **generic, static key**: `"json"` for the radar data and `"video"` for the video file. - The actual filename (`fHist_...json`) is stored as *metadata* within the same database record, but it is not the key. 2. **Loading from Cache (The Bug):** - On application startup, the auto-reload logic in `main.js` would attempt to fetch the files using `loadFreshFileFromDB`. - It was incorrectly passing the *filename* (e.g., `fHist_...json`) as the primary key for the database lookup. - Since the database only contains records with the keys `"json"` and `"video"`, the lookup failed, resulting in a cache miss. ### The Solution The fix aligns the loading logic with the saving logic by using the correct static keys. - The `DOMContentLoaded` event listener in `src/main.js` has been modified. - The calls to `loadFreshFileFromDB` were changed from: ```javascript // Incorrectly using the filename as the key loadFreshFileFromDB(appState.jsonFilename, appState.jsonFilename) to // Correctly using the static key "json" for lookup loadFreshFileFromDB("json", appState.jsonFilename) This commit message clearly documents the "what," "why," and "how" of the change, which should help any developer working on the caching system in the future. --- steps/src/main.js | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/steps/src/main.js b/steps/src/main.js index 1c39907..35f49be 100644 --- a/steps/src/main.js +++ b/steps/src/main.js @@ -131,10 +131,12 @@ function handleFiles(files) { appState.vizData = null; // Identify the JSON and Video files from the list of files provided + // This loop now correctly handles both files without an else-if. Array.from(files).forEach((file) => { if (file.name.endsWith(".json")) { jsonFileToLoad = file; - } else if (file.type.startsWith("video/")) { + } + if (file.type.startsWith("video/")) { videoFileToLoad = file; } }); @@ -1115,16 +1117,28 @@ document.addEventListener("DOMContentLoaded", () => { appState.videoFilename = localStorage.getItem("videoFilename"); if (appState.jsonFilename) { - const jsonBlob = await loadFreshFileFromDB("json", appState.jsonFilename); - const videoBlob = await loadFreshFileFromDB( - "video", - appState.videoFilename - ); + // --- START: FIX FOR AUTO-RELOAD --- + const jsonBlob = await loadFreshFileFromDB("json", appState.jsonFilename); // This is a Blob + const videoBlob = await loadFreshFileFromDB("video", appState.videoFilename); // This is a Blob if (jsonBlob) { console.log("Cached session found. Starting auto-reload..."); - // Use the handleFiles function to trigger the pipeline with cached blobs - handleFiles([jsonBlob, videoBlob].filter(Boolean)); // .filter(Boolean) removes null videoBlob if it doesn't exist + + // The handleFiles function expects File objects with a .name property. + // Blobs from IndexedDB don't have a name. We must reconstruct File objects. + const filesToLoad = []; + + // Recreate the JSON file with its original name. + filesToLoad.push(new File([jsonBlob], appState.jsonFilename, { type: "application/json" })); + + // If a video exists, recreate it with its original name. + if (videoBlob && appState.videoFilename) { + filesToLoad.push(new File([videoBlob], appState.videoFilename, { type: videoBlob.type })); + } + + // Now, pass the array of proper File objects to the handler. + handleFiles(filesToLoad); + // --- END: FIX FOR AUTO-RELOAD --- } else { console.log( "Cached session is stale or missing files. Ready for manual load."