Iceshrimp.NET/Iceshrimp.Frontend/wwwroot/Core/Services/UpdateService.cs.js

40 lines
1.3 KiB
JavaScript

const broadcast = new BroadcastChannel('update-channel');
export async function RegisterSWUpdateCallback(dotNetHelper){
broadcast.onmessage = (event) => {
if (event.data && event.data.type === 'INSTALLING_WORKER') {
dotNetHelper.invokeMethod('NewServiceWorker');
}
};
}
export async function ServiceWorkerCheckRegistration(){
if (navigator.serviceWorker == null) return null;
const registration = await navigator.serviceWorker.getRegistration();
if (registration.installing) return "installing";
if (registration.waiting) return "waiting";
if (registration.active) return "active";
else return null
}
export async function ServiceWorkerUpdate(){
if (navigator.serviceWorker == null) return null;
const registration = await navigator.serviceWorker.getRegistration();
var res = await registration.update();
if (res.installing) return "installing";
if (res.waiting) return "waiting";
if (res.active) return "active";
else return null;
}
export async function ServiceWorkerSkipWaiting(){
if (navigator.serviceWorker == null) return null;
const registration = await navigator.serviceWorker.getRegistration();
if (registration.waiting){
registration.waiting.postMessage({ type: 'SKIP_WAITING' })
return true;
}
else {
return false;
}
}