From: PhiTux Date: Fri, 31 Jan 2025 23:01:48 +0000 (+0100) Subject: image/file download is working X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=e610e1736774108d7a5881b7daca57056aabff9a;p=DailyTxT.git image/file download is working --- diff --git a/frontend/src/routes/write/+page.svelte b/frontend/src/routes/write/+page.svelte index b662567..f082f12 100644 --- a/frontend/src/routes/write/+page.svelte +++ b/frontend/src/routes/write/+page.svelte @@ -72,6 +72,7 @@ let lastSelectedDate = $state($selectedDate); let images = $state([]); + let filesOfDay = $state([]); let loading = false; $effect(() => { @@ -126,8 +127,6 @@ let currentLog = $state(''); let savedLog = $state(''); - let filesOfDay = $state([]); - let logDateWritten = $state(''); let timeout; @@ -178,7 +177,8 @@ } } - const imageExtensions = ['jpeg', 'jpg', 'gif', 'png']; + const imageExtensions = ['jpeg', 'jpg', 'gif', 'png', 'webp']; + //TODO: support svg? -> minsize is necessary... function base64ToArrayBuffer(base64) { var binaryString = atob(base64); @@ -205,12 +205,16 @@ images = images.map((image) => { if (image.uuid_filename === file.uuid_filename) { image.src = response.data.file; + file.src = response.data.file; } return image; }); }) .catch((error) => { console.error(error); + // toast + const toast = new bootstrap.Toast(document.getElementById('toastErrorLoadingFile')); + toast.show(); }); } }); @@ -368,8 +372,47 @@ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(0))} ${sizes[i]}`; } - function downloadFile(uuid) { - console.log(uuid); + async function downloadFile(uuid) { + // check if present in filesOfDay + let file = filesOfDay.find((file) => file.uuid_filename === uuid); + if (!file.src) { + // download from server + + try { + const response = await axios.get(API_URL + '/logs/downloadFile', { + params: { uuid: uuid } + }); + + filesOfDay = filesOfDay.map((f) => { + if (f.uuid_filename === uuid) { + f.src = response.data.file; + } + return f; + }); + } catch (error) { + console.error(error); + // toast + const toast = new bootstrap.Toast(document.getElementById('toastErrorLoadingFile')); + toast.show(); + } + } + + for (let i = 0; i < filesOfDay.length; i++) { + if (filesOfDay[i].uuid_filename === uuid) { + file = filesOfDay[i]; + break; + } + } + + const blob = new Blob([base64ToArrayBuffer(file.src)], { + type: 'application/octet-stream' + }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = file.filename; + document.body.appendChild(a); + a.click(); } let confirmDelete = $state({ uuid: '', filename: '' }); @@ -401,6 +444,14 @@ toast.show(); }); } + + let activeImage = $state(''); + function viewImage(uuid) { + activeImage = uuid; + + const modal = new bootstrap.Modal(document.getElementById('modalImages')); + modal.show(); + } @@ -453,7 +504,14 @@ {#if images.length > 0}
{#each images as image (image.uuid_filename)} -
+
{/if} -
+ {/each} {/if} @@ -480,7 +538,7 @@
Fehler beim Löschen einer Datei!
+ + + +