1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
/*
This file is part of keks-meet (https://codeberg.org/metamuffin/keks-meet)
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
/// <reference lib="dom" />
// deno-lint-ignore-file no-unused-vars prefer-const
import { log } from "../logger.ts"
import { SWMessage } from "./protocol.ts"
export let SW_ENABLED = false
export async function init_serviceworker() {
// TODO this breaks shift-reload for some reason
// let reg = await globalThis.navigator.serviceWorker.getRegistration()
// if (reg) {
// log("sw", "service worker already installed")
// SW_ENABLED = true
// } else {
// log("sw", "registering service worker")
// await globalThis.navigator.serviceWorker.register("/sw.js", { scope: "/", type: "module" })
// log("sw", "worker installed")
// reg = await globalThis.navigator.serviceWorker.getRegistration();
// if (!reg) throw new Error("we just registered the sw!?");
// SW_ENABLED = !!reg
// }
// start_handler()
// log("sw", "checking for updates")
// send_sw_message({ check_version: true })
}
export async function send_sw_message(message: SWMessage, transfer?: Transferable[]) {
const reg = await globalThis.navigator.serviceWorker.getRegistration();
if (!reg) throw new Error("no sw");
if (!reg.active) throw new Error("no sw");
if (transfer) reg.active.postMessage(message, transfer)
else reg.active.postMessage(message, transfer)
}
export async function update_serviceworker() {
const regs = await globalThis.navigator.serviceWorker.getRegistrations()
for (const r of regs) await r.unregister()
log("sw", "cleared all workers")
setTimeout(() => window.location.reload(), 500)
}
function start_handler() {
globalThis.navigator.serviceWorker.addEventListener("message", event => {
const message: SWMessage = event.data;
if (message.version_info)
log("sw", `installed: ${message.version_info.installed_version}`)
if (message.updated)
log("*", "updated")
})
}
|