import FSHandle from "./store.js"; const Rooms = {}; async function getFolderHandle() { try { const dirHandle = await globalThis.showDirectoryPicker(); console.log("Folder selected:", dirHandle); 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: {} }; Rooms[roomFolder.name] = roomObj; 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 = { meta: metaData, user: {} } 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.user[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); } } } } } } } } } } console.log("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();