import * as FSHandle from "./store-directory-handle.js"; const Rooms = {}; async function getFolderHandle(dirHandle) { try { const roomsFolder = await dirHandle.getDirectoryHandle("room"); if(roomsFolder) { for await (const [_, roomFolder] of roomsFolder.entries()) { if(roomFolder.kind == "directory") { const roomMetaFile = await roomFolder.getFileHandle("room.js"); if(roomMetaFile) { let metaData = {}; //try //{ // metaData = await roomMetaFile.getFile().then(d=>d.text()).then(t=>JSON.parse(t)); //} //catch (e) //{ // console.warn(`Couldn't parse room meta: ${roomFolder.name} / ${roomMetaFile.name}`, e); //} const roomObj = { meta: metaData, pass: {}, live: false, async load() { if(this.live) return; for await (const [_, passFolder] of roomFolder.entries()) { if(passFolder.kind == "directory") { const passMeta = await passFolder.getFileHandle("_pass_meta.json"); if(passMeta) { let metaData = {}; try { metaData = await passMeta.getFile().then(d=>d.text()).then(t=>JSON.parse(t)); } catch (e) { console.warn(`Couldn't parse pass meta: ${roomFolder.name} / ${passFolder.name} / ${passMeta.name}`, e); } const passObj = [ metaData, {} ] roomObj.pass[passFolder.name] = passObj; for await (const [_, userFile] of passFolder.entries()) { if(userFile.name.endsWith(".json") && userFile.name != "_pass_meta.json") { const userID = userFile.name.substring(0, userFile.name.length-5) try { passObj[1][userID] = await userFile.getFile().then(d=>d.text()).then(t=>JSON.parse(t)); } catch (e) { console.warn(`Couldn't parse user data: ${roomFolder.name} / ${passFolder.name} / ${userFile.name}`, e); } } } } } } this.live = true; globalThis.Pass = this.pass; if (navigator.serviceWorker.controller) { navigator.serviceWorker.controller.postMessage(this.pass); } //await import(`./room/${roomFolder.name}/room.js`); }, async dump() { this.live = false; this.pass = {}; } }; Rooms[roomFolder.name] = roomObj; } } } } console.log("Rooms:", Rooms); } catch (err) { console.error("Folder selection cancelled or failed:", err); } } const d =(...args)=> document.createElement(...args); let handle = false; handle = await FSHandle.getDirectoryHandle(); if(handle) { await getFolderHandle(handle); } const button = d("button"); button.innerText = handle ? "change directory" : "select directory"; button.addEventListener("click", async()=>{ const directory = await globalThis.showDirectoryPicker(); await FSHandle.setDirectoryHandle(directory); await getFolderHandle(directory); console.log("about to spoof user filesystem as remote..."); const module = await import("./room/room_01/room.js"); console.log("module loaded", module); button.innerText = "change directory" }); document.body.appendChild(button);