diff options
Diffstat (limited to 'client-web/source/sw')
-rw-r--r-- | client-web/source/sw/download_stream.ts | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/client-web/source/sw/download_stream.ts b/client-web/source/sw/download_stream.ts index 2a8049d..1a2fec8 100644 --- a/client-web/source/sw/download_stream.ts +++ b/client-web/source/sw/download_stream.ts @@ -1,30 +1,33 @@ +import { log } from "../logger.ts" import { SW } from "./init.ts" -// export function StreamDownload(size: number, filename?: string, progress?: (position: number) => void) { -// let position = 0 -// const buffer = new Uint8Array(size) -// return { -// close() { -// const a = document.createElement("a") -// a.href = URL.createObjectURL(new Blob([buffer], { type: "text/plain" })) -// a.download = filename ?? "file" -// a.click() -// }, -// write(chunk: Blob) { -// const reader = new FileReader(); -// reader.onload = function (event) { -// const arr = new Uint8Array(event.target!.result as ArrayBuffer); -// for (let i = 0; i < arr.length; i++, position++) { -// buffer[position] = arr[i] -// } -// if (progress) progress(position) -// }; -// reader.readAsArrayBuffer(chunk); -// } -// } -// } +function FallbackStreamDownload(size: number, filename?: string, progress?: (position: number) => void) { + log({ scope: "*", warn: true }, "downloading to memory because serviceworker is not available") + let position = 0 + const buffer = new Uint8Array(size) + return { + close() { + const a = document.createElement("a") + a.href = URL.createObjectURL(new Blob([buffer], { type: "text/plain" })) + a.download = filename ?? "file" + a.click() + }, + write(chunk: Blob) { + const reader = new FileReader(); + reader.onload = function (event) { + const arr = new Uint8Array(event.target!.result as ArrayBuffer); + for (let i = 0; i < arr.length; i++, position++) { + buffer[position] = arr[i] + } + if (progress) progress(position) + }; + reader.readAsArrayBuffer(chunk); + } + } +} export function StreamDownload(size: number, filename?: string, progress?: (position: number) => void) { + if (!SW) FallbackStreamDownload(size, filename, progress) let position = 0 const path = `/download/${encodeURIComponent(filename ?? "file")}` |