diff --git a/app.js b/app.js index d233686..ab5b3d0 100644 --- a/app.js +++ b/app.js @@ -3,31 +3,94 @@ import FSHandle from "./store.js"; const Rooms = {}; async function getFolderHandle() { - try { - const dirHandle = await globalThis.showDirectoryPicker(); - console.log("Folder selected:", dirHandle); - + try { + const dirHandle = await globalThis.showDirectoryPicker(); + console.log("Folder selected:", dirHandle); + - for await (const [name, roomsHandle] of dirHandle.entries()) + const roomsFolder = await dirHandle.getDirectoryHandle("room"); + if(roomsFolder) + { + for await (const [_, roomFolder] of roomsFolder.entries()) { - if(name == "room" && roomsHandle.kind == "directory") + if(roomFolder.kind == "directory") { - for await (const [name, roomHandle] of roomsHandle.entries()) + const roomMetaFile = await roomFolder.getFileHandle("_room_meta.json"); + if(roomMetaFile) { - if(roomHandle.kind == "directory") + let metaData = {}; + try { - Rooms[name] = roomHandle; + 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); - - } catch (err) { - console.error("Folder selection cancelled or failed:", err); } + + console.log("Rooms:", Rooms); + + } catch (err) { + console.error("Folder selection cancelled or failed:", err); } +} function Init() { diff --git a/room/room_01/pass_01/u1.json b/room/room_01/pass_01/u1.json index e69de29..d58e0a7 100644 --- a/room/room_01/pass_01/u1.json +++ b/room/room_01/pass_01/u1.json @@ -0,0 +1,8 @@ +{ + "p1": + [ + [123, "data"], + [456, "more data"], + [789, "even more data"] + ] +} \ No newline at end of file