From cb6e58421bb31a1d6ed37f46e5fac910de0ad9ca Mon Sep 17 00:00:00 2001 From: rakadu1 Date: Fri, 22 Aug 2025 14:05:47 +0530 Subject: [PATCH] IndexedDB caching logic. Files stay in memory even after page is closed and can reload automatically when the page reloads a next time. --- steps/index.html | 11 +++++----- steps/src/db.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 steps/src/db.js diff --git a/steps/index.html b/steps/index.html index b38b6e4..f9c3597 100644 --- a/steps/index.html +++ b/steps/index.html @@ -314,12 +314,13 @@ initializeTheme } from './src/theme.js'; + // import caching logic from './src/db.js'; + import { + initDB, saveFileToDB, loadFileFromDB + } from './src/db.js'; - // --- IndexedDB for Caching --- - let db; function initDB(callback) { const request = indexedDB.open('visualizerDB', 1); request.onupgradeneeded = function (event) { const db = event.target.result; if (!db.objectStoreNames.contains('files')) { db.createObjectStore('files'); } }; request.onsuccess = function (event) { db = event.target.result; console.log("Database initialized"); if (callback) callback(); }; request.onerror = function (event) { console.error("IndexedDB error:", event.target.errorCode); }; } - function saveFileToDB(key, value) { if (!db) return; const transaction = db.transaction(['files'], 'readwrite'); const store = transaction.objectStore('files'); const request = store.put(value, key); request.onsuccess = () => console.log(`File '${key}' saved to DB.`); request.onerror = (event) => console.error(`Error saving file '${key}':`, event.target.error); } - function loadFileFromDB(key, callback) { if (!db) return; const transaction = db.transaction(['files'], 'readonly'); const store = transaction.objectStore('files'); const request = store.get(key); request.onsuccess = function () { if (request.result) { callback(request.result); } else { console.log(`File '${key}' not found in DB.`); callback(null); } }; request.onerror = (event) => { console.error(`Error loading file '${key}':`, event.target.error); callback(null); }; } - + // import file parsers from './src/fileParsers.js';' + // --- p5.js Sketch Definitions --- let sketch = function (p) { diff --git a/steps/src/db.js b/steps/src/db.js new file mode 100644 index 0000000..ad575fa --- /dev/null +++ b/steps/src/db.js @@ -0,0 +1,55 @@ + + +// --- IndexedDB for Caching --- // +let db; + +//---Initialize DB---// + +export function initDB(callback) { + const request = indexedDB.open('visualizerDB', 1); + request.onupgradeneeded = function (event) { + const db = event.target.result; + if (!db.objectStoreNames.contains('files')) { + db.createObjectStore('files'); + } + }; + request.onsuccess = function (event) { + db = event.target.result; + console.log("Database initialized"); + if (callback) callback(); + }; request.onerror = function (event) { + console.error("IndexedDB error:", event.target.errorCode); + }; +} + +//---save file---// + +export function saveFileToDB(key, value) { + if (!db) return; + const transaction = db.transaction(['files'], 'readwrite'); + const store = transaction.objectStore('files'); + const request = store.put(value, key); + request.onsuccess = () => console.log(`File '${key}' saved to DB.`); + request.onerror = (event) => console.error(`Error saving file '${key}':`, event.target.error); +} + +//---load file---// + +export function loadFileFromDB(key, callback) { + if (!db) return; + const transaction = db.transaction(['files'], 'readonly'); + const store = transaction.objectStore('files'); const request = store.get(key); + request.onsuccess = function () { + if (request.result) { + callback(request.result); + } + else { + console.log(`File '${key}' not found in DB.`); + callback(null); + } + }; + request.onerror = (event) => { + console.error(`Error loading file '${key}':`, event.target.error); + callback(null); + }; +}