diff options
| author | metamuffin <metamuffin@disroot.org> | 2023-05-27 13:47:56 +0200 | 
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2023-05-27 13:47:56 +0200 | 
| commit | ab1c3b39a1077b3f4bad75c6a0722c850d06d409 (patch) | |
| tree | bddfff3e47c8f5559c60d0346492f1917c9b9f25 /client-web | |
| parent | adb6d2425997841b51d9989e0a5a268810742e71 (diff) | |
| download | keks-meet-ab1c3b39a1077b3f4bad75c6a0722c850d06d409.tar keks-meet-ab1c3b39a1077b3f4bad75c6a0722c850d06d409.tar.bz2 keks-meet-ab1c3b39a1077b3f4bad75c6a0722c850d06d409.tar.zst | |
handle dc on_message ArrayBuffer as well to work in chromium
Diffstat (limited to 'client-web')
| -rw-r--r-- | client-web/source/download_stream.ts | 14 | ||||
| -rw-r--r-- | client-web/source/resource/file.ts | 15 | 
2 files changed, 16 insertions, 13 deletions
| 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() | 
