From c8d22f534ae35a426ddb0f3fd1811ea6c0389ab9 Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Thu, 27 Mar 2025 12:52:45 +0100 Subject: [PATCH] Use generated download link element instead of iframe for downloading --- svelte/src/file_viewer/Downloader.svelte | 31 ++++---- svelte/src/file_viewer/FileStats.svelte | 2 +- svelte/src/file_viewer/TransferLimit.svelte | 26 ++++--- .../file_viewer/viewers/BandwidthUsage.svelte | 2 +- .../file_viewer/viewers/FilePreview.svelte | 2 +- .../src/file_viewer/viewers/RateLimit.svelte | 2 +- svelte/src/filesystem/Filesystem.svelte | 21 +++--- .../src/filesystem/viewers/FilePreview.svelte | 2 +- svelte/src/layout/SlowDown.svelte | 2 +- .../lib/{StatsSocket.js => StatsSocket.mts} | 74 +++++++++++-------- 10 files changed, 92 insertions(+), 72 deletions(-) rename svelte/src/lib/{StatsSocket.js => StatsSocket.mts} (62%) diff --git a/svelte/src/file_viewer/Downloader.svelte b/svelte/src/file_viewer/Downloader.svelte index 566d02d..051b327 100644 --- a/svelte/src/file_viewer/Downloader.svelte +++ b/svelte/src/file_viewer/Downloader.svelte @@ -4,15 +4,16 @@ import Modal from "../util/Modal.svelte" export let file = { id: "", + name: "", availability: "", download_href: "", } export let list = { id: "", + title: "", download_href: "", } -let download_frame let load_captcha_script = false let download_captcha_window let captcha_type = "" // rate_limit or malware @@ -24,13 +25,13 @@ let error_code = "" let error_message = "" export const download_file = () => { if (!window.viewer_data.captcha_key) { - console.debug("Server doesn't support captcha, starting download") - download_frame.src = file.download_href + console.debug("Server doesn't support captcha, starting download", file.download_href) + download(file.download_href, file.name) return } if (file.availability === "") { - console.debug("File is available, starting download") - download_frame.src = file.download_href + console.debug("File is available, starting download", file.download_href) + download(file.download_href, file.name) return } if (!file.availability.endsWith("_captcha_required")) { @@ -47,7 +48,8 @@ export const download_file = () => { // we trigger the download using the captcha token Google provided us with let captcha_complete_callback = token => { // Download the file using the recaptcha token - download_frame.src = file.download_href + "&recaptcha_response=" + token + console.debug("Captcha validation successful, starting download", file.download_href) + download(file.download_href + "&recaptcha_response=" + token, file.name) download_captcha_window.hide() } @@ -91,9 +93,17 @@ export const download_file = () => { } export const download_list = () => { if (list.id !== "") { - download_frame.src = list.download_href + download(list.download_href, list.title+".zip") } } + +const download = (href, file_name) => { + let a = document.createElement("a") + a.href = href + a.download = file_name + a.click() + a.remove() +} @@ -102,7 +112,6 @@ export const download_list = () => { {/if} - {#if captcha_type === "rate_limit"}

@@ -143,12 +152,6 @@ export const download_list = () => {