file started
This commit is contained in:
parent
bf9d740c13
commit
975694f798
43
app.js
Normal file
43
app.js
Normal file
@ -0,0 +1,43 @@
|
||||
import FSHandle from "./store.js";
|
||||
|
||||
const Rooms = {};
|
||||
|
||||
async function getFolderHandle() {
|
||||
try {
|
||||
const dirHandle = await globalThis.showDirectoryPicker();
|
||||
console.log("Folder selected:", dirHandle);
|
||||
|
||||
|
||||
for await (const [name, roomsHandle] of dirHandle.entries())
|
||||
{
|
||||
if(name == "room" && roomsHandle.kind == "directory")
|
||||
{
|
||||
for await (const [name, roomHandle] of roomsHandle.entries())
|
||||
{
|
||||
if(roomHandle.kind == "directory")
|
||||
{
|
||||
Rooms[name] = roomHandle;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log(Rooms);
|
||||
|
||||
} catch (err) {
|
||||
console.error("Folder selection cancelled or failed:", err);
|
||||
}
|
||||
}
|
||||
|
||||
function Init()
|
||||
{
|
||||
const d =(...args)=> document.createElement(...args);
|
||||
|
||||
const button = d("button");
|
||||
button.innerText = "open";
|
||||
button.addEventListener("click", getFolderHandle);
|
||||
|
||||
document.body.appendChild(button)
|
||||
}
|
||||
|
||||
Init();
|
||||
@ -1,5 +1,8 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"checkJs": true
|
||||
"checkJs": true,
|
||||
"lib":[
|
||||
"deno.window", "dom"
|
||||
]
|
||||
}
|
||||
}
|
||||
11
index.html
Normal file
11
index.html
Normal file
@ -0,0 +1,11 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Document</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="app.js" type="module">
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
0
room/room_01/_room_meta.json
Normal file
0
room/room_01/_room_meta.json
Normal file
0
room/room_01/pass_01/_pass_meta.json
Normal file
0
room/room_01/pass_01/_pass_meta.json
Normal file
0
room/room_01/pass_01/u1.json
Normal file
0
room/room_01/pass_01/u1.json
Normal file
0
room/room_01/pass_01/u2.json
Normal file
0
room/room_01/pass_01/u2.json
Normal file
0
room/room_01/pass_01/u3.json
Normal file
0
room/room_01/pass_01/u3.json
Normal file
76
store.js
Normal file
76
store.js
Normal file
@ -0,0 +1,76 @@
|
||||
// 📦 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
|
||||
async function storeDirectoryHandle(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
|
||||
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 = () => reject(getRequest.error);
|
||||
});
|
||||
}
|
||||
|
||||
// 🔐 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;
|
||||
}
|
||||
|
||||
// 🧠 List contents of a directory
|
||||
async function listDirectoryContents(dirHandle) {
|
||||
for await (const [name, handle] of dirHandle.entries()) {
|
||||
console.log(`${handle.kind === 'file' ? '📄' : '📁'} ${name}`);
|
||||
}
|
||||
}
|
||||
|
||||
// 📌 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.');
|
||||
}
|
||||
}
|
||||
|
||||
// 🚀 Main logic
|
||||
export default async function initDirectoryAccess() {
|
||||
await ensurePersistentStorage();
|
||||
|
||||
let handle = await getDirectoryHandle();
|
||||
|
||||
if (!handle || !(await verifyPermission(handle))) {
|
||||
handle = await window.showDirectoryPicker();
|
||||
if (await verifyPermission(handle)) {
|
||||
await storeDirectoryHandle(handle);
|
||||
} else {
|
||||
console.warn('Permission denied for selected directory.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('📂 Directory handle ready. Listing contents:');
|
||||
await listDirectoryContents(handle);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user