diff options
author | metamuffin <metamuffin@disroot.org> | 2023-04-10 14:15:33 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-04-10 14:15:33 +0200 |
commit | 4b026c618ed6b40a22c0bf601b45e1da96d5bc5e (patch) | |
tree | 34ea874d40407f8f318d66d8935cbdbbf3fbb42d /client-web/source/sw/download.ts | |
parent | fe36a0640f2e36baad1f08033f09b49bdd0f1062 (diff) | |
download | keks-meet-4b026c618ed6b40a22c0bf601b45e1da96d5bc5e.tar keks-meet-4b026c618ed6b40a22c0bf601b45e1da96d5bc5e.tar.bz2 keks-meet-4b026c618ed6b40a22c0bf601b45e1da96d5bc5e.tar.zst |
new (useless) sw
Diffstat (limited to 'client-web/source/sw/download.ts')
-rw-r--r-- | client-web/source/sw/download.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/client-web/source/sw/download.ts b/client-web/source/sw/download.ts new file mode 100644 index 0000000..02c5e1a --- /dev/null +++ b/client-web/source/sw/download.ts @@ -0,0 +1,36 @@ +export const streams = new Map<string, { readable: ReadableStream, size: number }>() + +export function handle_download_request(path: string, event: FetchEvent) { + const stream = streams.get(path) + if (stream) { + streams.delete(path) + console.log(`-> stream response`); + event.respondWith( + new Response( + stream.readable, + { + headers: new Headers({ + "content-type": "application/octet-stream; charset=utf-8", // TODO transmit and set accordingly + "content-security-policy": "default-src 'none'", + "content-length": `${stream.size}`, + }) + } + ) + ) + } + event.respondWith(new Response("download failed", { status: 400, headers: new Headers({ "content-type": "text/plain" }) })) +} + +export function port_to_readable(port: MessagePort): ReadableStream { + return new ReadableStream({ + start(controller) { + console.log("ReadableStream started"); + port.onmessage = event => { + if (event.data === "end") controller.close() + else if (event.data === "abort") controller.error("aborted") + else controller.enqueue(event.data) + } + }, + cancel() { console.log("ReadableStream cancelled"); port.postMessage({ abort: true }) }, + }) +} |