import FSHandle from "./store.js"; const Rooms = {}; async function getFolderHandle() { try { const dirHandle = await globalThis.showDirectoryPicker(); 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_meta.json"); 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); globalThis.Rooms = 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();