fs access tweaks

This commit is contained in:
Seth Trowbridge 2025-07-08 17:00:20 -04:00
parent 975694f798
commit 388ec90132
2 changed files with 85 additions and 14 deletions

91
app.js
View File

@ -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()
{

View File

@ -0,0 +1,8 @@
{
"p1":
[
[123, "data"],
[456, "more data"],
[789, "even more data"]
]
}