From 48bc66b89aaab5beb80db36786057002a759088c Mon Sep 17 00:00:00 2001 From: Jonas Kappa Date: Tue, 23 Dec 2025 17:42:33 +0100 Subject: [PATCH] Added deletion and renaming of files and deletion of directories --- src/lib/Modal.svelte | 4 +- src/lib/RessourceManager.svelte | 171 ++++++++++++++++++++++++++++++-- 2 files changed, 162 insertions(+), 13 deletions(-) diff --git a/src/lib/Modal.svelte b/src/lib/Modal.svelte index fd64c97..e9028ca 100644 --- a/src/lib/Modal.svelte +++ b/src/lib/Modal.svelte @@ -51,10 +51,10 @@ >
{@render header?.()} -
+
{@render children?.()}
-
+
{@render actionButtons?.()} diff --git a/src/lib/RessourceManager.svelte b/src/lib/RessourceManager.svelte index 344fadb..6619dbc 100644 --- a/src/lib/RessourceManager.svelte +++ b/src/lib/RessourceManager.svelte @@ -24,6 +24,12 @@ let showNewDir = $state(false); let newDirName = $state(""); + let showDeleteDir = $state(false); + let dirToDelete: Directory | undefined = $state(); + + let showRenameFile = $state(false); + let fileToRename: Ressource | undefined = $state(); + let newFileName = $state(""); function handleFileChange(event: Event) { const target = event.target as HTMLInputElement | null; @@ -67,6 +73,54 @@ }); } + function deleteRessource(res: Ressource | Directory) { + if (isRessource(res)) { + axios + .delete(url("/cdn/" + res.user + "/" + res.filename), { + withCredentials: true + }) + .then((response) => { + if (response.status === 200) { + fetchDirectory(); + } else { + alert("Something went wrong: " + response.status); + } + }); + } else if (isDir(res)) { + showDeleteDir = true; + dirToDelete = res; + } + } + + async function deleteDir() { + return axios + .delete(url("/directory"), { + headers: { + "Content-Type": "application/json" + }, + data: { path: path + (path === "/" ? "" : "/") + dirToDelete?.name }, + withCredentials: true + }) + .then((response) => { + if (response.status === 200) { + fetchDirectory(); + dirToDelete = undefined; + return true; + } else { + alert("Failed to delete directory: " + response.status); + } + return false; + }) + .catch((err) => { + console.error(err); + return false; + }); + } + + function deleteDirCancel() { + dirToDelete = undefined; + } + async function fetchDirectory() { fetchingRessources = true; return axios @@ -148,6 +202,44 @@ } } + function renameRessource(res: Ressource) { + fileToRename = res; + newFileName = res.name; + showRenameFile = true; + } + + async function renameFile() { + if (fileToRename === undefined) return false; + return axios + .put( + url("/cdn/" + fileToRename.user + "/" + fileToRename.filename), + { + name: newFileName + }, + { withCredentials: true } + ) + .then((response) => { + if (response.status === 200) { + fetchDirectory(); + fileToRename = undefined; + newFileName = ""; + return true; + } else { + alert("Failed to rename File: " + response.status); + } + return false; + }) + .catch((err) => { + console.error(err); + return false; + }); + } + + function renameFileCancel() { + fileToRename = undefined; + newFileName = ""; + } + function cancel() { selectedRessource = undefined; } @@ -173,10 +265,10 @@ {#snippet header()}

Ressourcenmanager - {path}

{/snippet} -
+
{#if fetchingRessources} Loading... - {:else} + {:else if ressources.length > 0}
{#each ressources as ressource} @@ -202,18 +294,40 @@ {ressource.name} {/if}
- - + {#if !(isDir(ressource) && ressource.name === "..")} +
+ {#if isRessource(ressource)} + + + {/if} + + +
+ {/if}
{/each}
+ {:else} +
+
+
+ Noch keine Ressourcen vorhanden +
+
{/if}
{#snippet actionButtons()} @@ -251,6 +365,41 @@
+ + {#snippet header()} +

Ordner löschen

+ {/snippet} + +
+ Soll der Ordner {dirToDelete?.name} wirklich gelöscht werden? Alle darin enthaltenen Daten gehen + verloren. +
+ {#if error.length > 0} +
{error}
+ {/if} +
+ + + {#snippet header()} +

Datei umbenennen

+ {/snippet} +
+ +
+ +
+ {#if error.length > 0} +
{error}
+ {/if} +
+
+