work-graph-simple/store-directory-handle.js

52 lines
1.7 KiB
JavaScript

// 📦 IndexedDB Helper
function openDB() {
return new Promise((resolve, reject) => {
const request = indexedDB.open('directory-handle-db', 1);
request.onupgradeneeded = () => {
request.result.createObjectStore('handles');
};
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
// 💾 Store a directory handle
export async function setDirectoryHandle(handle) {
const db = await openDB();
const tx = db.transaction('handles', 'readwrite');
tx.objectStore('handles').put(handle, 'my-folder');
await tx.done;
}
// 📂 Retrieve a directory handle
export async function getDirectoryHandle() {
const db = await openDB();
const tx = db.transaction('handles', 'readonly');
return new Promise((resolve, reject) => {
const getRequest = tx.objectStore('handles').get('my-folder');
getRequest.onsuccess = () => resolve(getRequest.result);
getRequest.onerror = () => {
console.error('Error retrieving directory handle:', getRequest.error);
return resolve(false);
}
});
}
// 🔐 Check or request permission
async function verifyPermission(handle, mode = 'readwrite') {
const opts = { mode };
if ((await handle.queryPermission(opts)) === 'granted') return true;
if ((await handle.requestPermission(opts)) === 'granted') return true;
return false;
}
// 📌 Request persistent storage
async function ensurePersistentStorage() {
if (navigator.storage && navigator.storage.persist) {
const granted = await navigator.storage.persist();
console.log(granted
? '✅ Persistent storage granted.'
: '⚠️ Storage may be cleared under pressure.');
}
}