From ab1c3b39a1077b3f4bad75c6a0722c850d06d409 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 27 May 2023 13:47:56 +0200 Subject: handle dc on_message ArrayBuffer as well to work in chromium --- client-web/source/download_stream.ts | 14 +++++--------- client-web/source/resource/file.ts | 15 +++++++++++---- 2 files changed, 16 insertions(+), 13 deletions(-) (limited to 'client-web/source') diff --git a/client-web/source/download_stream.ts b/client-web/source/download_stream.ts index 5aafde1..3de8e70 100644 --- a/client-web/source/download_stream.ts +++ b/client-web/source/download_stream.ts @@ -71,15 +71,11 @@ export function StreamDownload({ size, filename, cancel, progress }: { abort() { port1.postMessage("abort") }, - write(chunk: Blob) { - const reader = new FileReader(); - reader.onload = function (event) { - const arr = new Uint8Array(event.target!.result as ArrayBuffer); - port1.postMessage(arr) - position += arr.length - if (progress) progress(position) - }; - reader.readAsArrayBuffer(chunk); + write(chunk: ArrayBuffer) { + const arr = new Uint8Array(chunk); + port1.postMessage(arr) + position += arr.length + if (progress) progress(position) } } } diff --git a/client-web/source/resource/file.ts b/client-web/source/resource/file.ts index f577580..738473a 100644 --- a/client-web/source/resource/file.ts +++ b/client-web/source/resource/file.ts @@ -77,13 +77,21 @@ export const resource_file: ResourceHandlerDecl = { reset() } channel.onmessage = ev => { - const data: Blob | string = ev.data + const data: Blob | ArrayBuffer | string = ev.data + console.log(data); if (typeof data == "string") { if (data == "end") { finished = true + channel.close() } - } else { - download.write(data as Blob) + } else if (data instanceof Blob) { + const reader = new FileReader(); + reader.onload = function (event) { + download.write(event.target!.result as ArrayBuffer) + }; + reader.readAsArrayBuffer(data); + } else if (data instanceof ArrayBuffer) { + download.write(data) } } } @@ -135,7 +143,6 @@ function file_res_inner(file: File): LocalResource { await sleep(10) } display.status = "Waiting for the channel to close…" - channel.close() } const feed = async () => { const { value: chunk, done }: { value?: Uint8Array, done: boolean } = await reader.read() -- cgit v1.2.3-70-g09d2