diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 3a566de..64f8d7e 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,7 +1,7 @@ import { Component, inject, ApplicationRef } from '@angular/core'; import { SwUpdate, VersionReadyEvent } from '@angular/service-worker'; import { filter, first } from 'rxjs/operators'; -import { concat, interval } from 'rxjs'; +import { concat, interval, fromEvent } from 'rxjs'; @Component({ selector: 'app-root', @@ -19,14 +19,44 @@ export class AppComponent { private setupUpdates() { if (this.swUpdate.isEnabled) { - // Controlla aggiornamenti ogni 5 minuti invece di 30 - const everyFiveMinutes$ = interval(5 * 60 * 1000); - - everyFiveMinutes$.subscribe(() => { - console.log('Checking for PWA updates...'); - this.swUpdate.checkForUpdate(); + // 1. Check for updates immediately as soon as the application stabilizes + const appIsStable$ = this.appRef.isStable.pipe( + first(isStable => isStable === true) + ); + + appIsStable$.subscribe(async () => { + console.log('[PWA-Update] App is stable, checking for PWA updates immediately...'); + try { + await this.swUpdate.checkForUpdate(); + } catch (err) { + console.warn('[PWA-Update] Failed startup update check:', err); + } }); + // 2. Check for updates when the app is resumed/focused + fromEvent(document, 'visibilitychange') + .pipe(filter(() => document.visibilityState === 'visible')) + .subscribe(async () => { + console.log('[PWA-Update] App resumed, checking for PWA updates...'); + try { + await this.swUpdate.checkForUpdate(); + } catch (err) { + console.warn('[PWA-Update] Failed visible resume update check:', err); + } + }); + + // 3. Periodic check in background every 5 minutes + const everyFiveMinutes$ = interval(5 * 60 * 1000); + everyFiveMinutes$.subscribe(async () => { + console.log('[PWA-Update] Periodic check for updates...'); + try { + await this.swUpdate.checkForUpdate(); + } catch (err) { + console.warn('[PWA-Update] Failed periodic update check:', err); + } + }); + + // 4. Activate update and reload when a new version is ready this.swUpdate.versionUpdates .pipe(filter((evt): evt is VersionReadyEvent => evt.type === 'VERSION_READY')) .subscribe(() => {