service-worker-update.service.ts 2.40 KiB
import { Injectable } from "@angular/core";
import { SwUpdate, VersionEvent } from '@angular/service-worker';
import { I18nService } from "./internationalisation.service";
import { NotificationsService } from "./notifications.service";
@Injectable()
export class ServiceWorkerUpdateService {
    constructor(
        private swUpdate: SwUpdate,
        private notificationService: NotificationsService,
        private i18nService: I18nService
    ) {
        swUpdate.versionUpdates.subscribe(evt => {
            switch (evt.type) {
                case 'VERSION_DETECTED':
                    let ver = (evt as any).version?.appData?.version ?? "<NA>";
                    console.log("SwUpdate VERSION_DETECTED", ver);
                    notificationService.notify(i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_DETECTED", { "ver": ver }), 10000);
                    break;
                case 'VERSION_READY':
                    const currVer = (evt as any).currentVersion?.appData?.version ?? "<NA>";
                    const newVer = (evt as any).latestVersion?.appData?.version ?? "<NA>";
                    console.log("SwUpdate VERSION_READY", currVer, newVer);
                    notificationService.notify(i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer }), 10000);
                    // PLANTE si on stocke le message dans une variable !!!!
                    // const msg = i18nService.localizeText("INFO_SERVICE_WORKER_VERSION_READY", { "ver": newVer });
                    // notificationService.notify(msg, 10000);
                    // -> ReferenceError: can't access lexical declaration 'xxx' before initialization
                    // avec xxx qui varie d'une fois à l'autre !!!
                    break;
                case 'VERSION_INSTALLATION_FAILED':
                    ver = (evt as any).version?.appData?.version ?? "NA";
                    console.log("SwUpdate VERSION_INSTALLATION_FAILED", ver);
                    notificationService.notify(i18nService.localizeText("ERROR_SERVICE_WORKER_INSTALL_FAILED", { "ver": ver }), 10000);
                    break;
        });
        swUpdate.unrecoverable.subscribe(event => {
            console.log("SwUpdate.unrecoverable", event.reason, event.type);
            notificationService.notify("SwUpdate: unrecoverable state. Reason=" + event.reason + ", type=" + event.type, 10000);
        });