From 610f1f602c9c9cb045e68147b0c6b488dbd6de8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emrik=20=C3=96stling?= Date: Tue, 15 Sep 2026 22:27:29 +0200 Subject: [PATCH] cache file if it timeouts --- public/results.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/public/results.js b/public/results.js index 468195e..cd35eef 100644 --- a/public/results.js +++ b/public/results.js @@ -21,17 +21,31 @@ const setupShareButtons = () => { if (!navigator.canShare({ files: [dummyFile] })) { return; } + let cachedFile = null; + let isFetching = false; + btn.addEventListener("click", async (e) => { e.preventDefault(); + if (isFetching) return; try { - const response = await fetch(fileUrl); - const blob = await response.blob(); - const file = new File([blob], filename, { type: mimeType }); - await navigator.share({ files: [file] }); + if (!cachedFile) { + isFetching = true; + const response = await fetch(fileUrl); + if (!response.ok) { + throw new Error(`Failed to download file (${response.status})`); + } + const blob = await response.blob(); + cachedFile = new File([blob], filename, { type: mimeType }); + } + await navigator.share({ files: [cachedFile] }); } catch (err) { - if (err.name !== "AbortError") { + if (err.name === "NotAllowedError" && cachedFile) { + alert("File is ready. Please tap the share button again to share."); + } else if (err.name !== "AbortError") { console.error("Error sharing:", err); } + } finally { + isFetching = false; } }); btn.style.display = "";