fix: remove flatname workaround, store Files as real FileNode #379

This commit is contained in:
Linus Rath
2026-06-03 20:53:03 +02:00
parent 44781f002c
commit 568abb0e33
5 changed files with 330 additions and 164 deletions
+30
View File
@@ -5066,6 +5066,36 @@ export class JMAPClient implements IJMAPClient {
return nodes;
}
/**
* Fetch every FileNode in the account in a single query+get round-trip.
* Used to build the folder hierarchy client-side from parentId links,
* so we never depend on server-side `parentId` filtering being available.
*/
async listAllFileNodes(): Promise<FileNode[]> {
const accountId = this.getFilesAccountId();
const response = await this.request(
[
["FileNode/query", { accountId, filter: {} }, "fnq0"],
["FileNode/get", { accountId, "#ids": { resultOf: "fnq0", name: "FileNode/query", path: "/ids" }, properties: JMAPClient.FILE_NODE_PROPERTIES }, "fng0"],
],
this.fileUsing(),
);
const queryResult = response.methodResponses?.find(r => r[0] === "FileNode/query" || (r[0] === "error" && r[2] === "fnq0"));
if (queryResult && queryResult[0] === "error") {
console.error('[Files] FileNode/query error:', queryResult[1]);
throw new Error(queryResult[1]?.description || "FileNode/query failed");
}
const getResult = response.methodResponses?.find(r => r[0] === "FileNode/get" || (r[0] === "error" && r[2] === "fng0"));
if (!getResult || getResult[0] === "error") {
console.error('[Files] FileNode/get error:', getResult?.[1]);
throw new Error(getResult?.[1]?.description || "FileNode list failed");
}
return (getResult[1].list || []) as FileNode[];
}
async createFileDirectory(name: string, parentId: string | null): Promise<FileNode> {
const accountId = this.getFilesAccountId();