From a5873148d47f953e08697ba89a8e070a20a4a43a Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Thu, 13 Jun 2024 20:08:10 +0200 Subject: [PATCH] Add cancel button to filesystem upload queue --- .../filesystem/upload_widget/UploadFunc.js | 4 +- .../upload_widget/UploadProgress.svelte | 56 ++++++++++++++----- .../upload_widget/UploadWidget.svelte | 24 ++++---- 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/svelte/src/filesystem/upload_widget/UploadFunc.js b/svelte/src/filesystem/upload_widget/UploadFunc.js index f779414..25c1d90 100644 --- a/svelte/src/filesystem/upload_widget/UploadFunc.js +++ b/svelte/src/filesystem/upload_widget/UploadFunc.js @@ -12,7 +12,7 @@ import { fs_path_url } from "../FilesystemUtil" // code and an error message -export const upload_file = async (file, path, on_progress, on_success, on_error) => { +export const upload_file = (file, path, on_progress, on_success, on_error) => { // Check the file size limit. For free accounts it's 20 GB if (window.user.subscription.file_size_limit === 0) { window.user.subscription.file_size_limit = 20e9 @@ -70,4 +70,6 @@ export const upload_file = async (file, path, on_progress, on_success, on_error) }; xhr.send(file); + + return xhr } diff --git a/svelte/src/filesystem/upload_widget/UploadProgress.svelte b/svelte/src/filesystem/upload_widget/UploadProgress.svelte index 593d19d..56ba3d1 100644 --- a/svelte/src/filesystem/upload_widget/UploadProgress.svelte +++ b/svelte/src/filesystem/upload_widget/UploadProgress.svelte @@ -3,21 +3,22 @@ import { createEventDispatcher } from "svelte"; import { fade } from "svelte/transition"; import { upload_file } from "./UploadFunc"; import ProgressBar from "../../util/ProgressBar.svelte"; +import Button from "../../layout/Button.svelte" let dispatch = createEventDispatcher() export let job = { file: null, name: "", - id: "", status: "", } export let total = 0 export let loaded = 0 let error_code = "" let error_message = "" +let xhr = null export const start = () => { - upload_file( + xhr = upload_file( job.file, job.path, (prog_loaded, prog_total) => { @@ -29,37 +30,66 @@ export const start = () => { dispatch("finished") }, (code, message) => { + if (job.status === "finished") { + return + } + console.log("Upload error", code, message) error_code = code error_message = message job.status = "error" - // Wait with reporting so the user can read the error message - setTimeout(() => dispatch("finished"), 60000) + // We don't send the finished signal so the user can read the error + // messsage and manually dismiss it through the cancel button }, ) job.status = "uploading" } +const cancel = () => { + job.status = "finished" + + if (xhr && xhr.abort) { + xhr.abort() + } + + xhr = null + dispatch("finished") +} -
- {job.file.name}
- {#if error_code !== ""} - {error_message}
- {error_code}
- {/if} - +
+
+ {job.file.name}
+ {#if error_code !== ""} + {error_message}
+ {error_code}
+ {/if} + +
+
+