fix: remove duplicate handler implementations from parallel merge

This commit is contained in:
2026-05-11 17:11:16 +02:00
parent f87c82d36e
commit 40ced0f336
-136
View File
@@ -1445,139 +1445,3 @@ async function handleRestoreFileVersion(
return makeToolResponse({ success: true });
}
// --- Step 7: Trashbin ---
async function handleTrashList(
_args: Record<string, never>,
client: NextcloudClient
): Promise<ToolResponse> {
const trashPath = `/trashbin/${client.username}/trash`;
const xml = await client.propfind(trashPath, buildTrashbinPropfindBody(), "1");
const items = parseTrashbinResponse(xml);
return makeToolResponse(items);
}
async function handleTrashRestore(
args: { trashPath: string },
client: NextcloudClient
): Promise<ToolResponse> {
if (!args.trashPath) return makeErrorResponse("trashPath is required");
// trashPath is the item path in the trashbin, e.g. "/Documents/old-file.txt.d12345678"
// It comes from trash_list results — the path field of a TrashedFile.
const itemPath = `/trashbin/${client.username}/trash${normalizePath(args.trashPath)}`;
const restoreUrl = `${client.baseUrl}/trashbin/${client.username}/restore`;
try {
await client.move(itemPath, restoreUrl);
} catch (err: any) {
const status = err?.response?.status;
if (status === 404) {
return makeErrorResponse(`Trashbin item not found: ${args.trashPath}. It may have already been permanently deleted.`);
}
throw err;
}
return makeToolResponse({ success: true, restoredPath: args.trashPath });
}
async function handleTrashDelete(
args: { trashPath: string },
client: NextcloudClient
): Promise<ToolResponse> {
if (!args.trashPath) return makeErrorResponse("trashPath is required");
const itemPath = `/trashbin/${client.username}/trash${normalizePath(args.trashPath)}`;
try {
await client.delete(itemPath);
} catch (err: any) {
const status = err?.response?.status;
if (status === 404) {
return makeErrorResponse(`Trashbin item not found: ${args.trashPath}`);
}
throw err;
}
return makeToolResponse({ success: true });
}
async function handleTrashEmpty(
_args: Record<string, never>,
client: NextcloudClient
): Promise<ToolResponse> {
const trashPath = `/trashbin/${client.username}/trash`;
try {
await client.delete(trashPath);
} catch (err: any) {
const status = err?.response?.status;
if (status === 404) {
return makeErrorResponse("Trashbin is already empty");
}
throw err;
}
return makeToolResponse({ success: true });
}
// --- Step 8: Favorites & Versions ---
async function handleSetFavorite(
args: { path: string; favorite: boolean },
client: NextcloudClient
): Promise<ToolResponse> {
if (!args.path) return makeErrorResponse("path is required");
if (args.favorite === undefined || args.favorite === null) return makeErrorResponse("favorite is required");
const path = normalizePath(args.path);
const davPath = buildDavPath(client.username, path);
// PROPPATCH to set oc:favorite
const value = args.favorite ? "1" : "0";
await client.proppatch(davPath, buildProppatchBody("oc", "favorite", value));
// PROPFIND Depth:0 to return updated metadata
const xml = await client.propfind(davPath, buildPropfindBody(), "0");
const meta = parsePropfindSingleFileResponse(xml, davPath);
return makeToolResponse(meta ?? { path, favorite: args.favorite });
}
async function handleGetFileVersions(
args: { fileId: number },
client: NextcloudClient
): Promise<ToolResponse> {
if (args.fileId === undefined || args.fileId === null) return makeErrorResponse("fileId is required");
const versionsPath = `/versions/${client.username}/versions/${args.fileId}`;
const xml = await client.propfind(versionsPath, buildVersionsPropfindBody(), "1");
const versions = parseVersionsResponse(xml);
return makeToolResponse(versions);
}
async function handleRestoreFileVersion(
args: { fileId: number; versionName: string },
client: NextcloudClient
): Promise<ToolResponse> {
if (args.fileId === undefined || args.fileId === null) return makeErrorResponse("fileId is required");
if (!args.versionName) return makeErrorResponse("versionName is required");
const sourcePath = `/versions/${client.username}/versions/${args.fileId}/${args.versionName}`;
const destination = `${client.baseUrl}/versions/${client.username}/restore`;
try {
await client.move(sourcePath, destination);
} catch (err: any) {
const status = err?.response?.status;
if (status === 404) {
return makeErrorResponse(`Version not found: fileId=${args.fileId}, version=${args.versionName}`);
}
throw err;
}
return makeToolResponse({ success: true, fileId: args.fileId, versionName: args.versionName });
}