You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.6 KiB
55 lines
1.6 KiB
|
|
|
|
// --- 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);
|
|
};
|
|
}
|