diff --git a/Frontend/web/index.html b/Frontend/web/index.html index 27d81740..3dfe24f1 100644 --- a/Frontend/web/index.html +++ b/Frontend/web/index.html @@ -365,7 +365,7 @@     var serviceWorkerVersion = '{{flutter_service_worker_version}}';     var scriptLoaded = false; -    function loadMainDartJs() { +    function loadMainDartJs(isUpdate) {       console.log('Loading app...');       if (scriptLoaded) {         return; @@ -380,6 +380,17 @@         onEntrypointLoaded: function (engineInitializer) {           engineInitializer.initializeEngine().then(function (appRunner) {             appRunner.runApp(); +            + // --- NEW PROMPT LOCATION --- + if (isUpdate) { + // Only show prompt AFTER the old app (the one currently running) has loaded + console.log('New app version installed. Prompting for reload.'); + if (confirm('A new version of the app is available. Refresh now to update?')) { + window.location.reload(); + } + } + // --------------------------- +           });         }       }); @@ -389,7 +400,7 @@     function getCleanVersion(version) {       return version.replace(/"/g, '');     } - +         if ('serviceWorker' in navigator) {       var startLoad = new Date();       // Service workers are supported. Use them. @@ -399,22 +410,16 @@         navigator.serviceWorker.register(serviceWorkerUrl)           .then((reg) => { + + // Flag to track if this registration resulted in an update + let isUpdateInstallation = false; +             function waitForActivation(serviceWorker) {               serviceWorker.addEventListener('statechange', () => {                 if (serviceWorker.state == 'activated') {                   console.log('Installed new service worker.'); -                  loadMainDartJs(); -                  // Optional: Prompt user to reload for the new version to take effect -                  // The user is currently running the OLD cached version of the app. -                  // This prompt is generally preferred over the previous logic. -                  if (navigator.serviceWorker.controller) { -                    // Only prompt if this isn't the first time loading. -                    console.log('New app version activated. Prompting for reload.'); -                    // You can replace this confirm with a better UI notification. -                    if (confirm('A new version of the app is available. Refresh now to update?')) { -                      window.location.reload(); -                    } -                  } +                  // Pass the update flag to loadMainDartJs +                  loadMainDartJs(isUpdateInstallation);                 }               });             } @@ -425,26 +430,27 @@             console.log('Active Service Worker Version: ' + (currentSWVersion || 'None'));             const isMatch = currentSWVersion === cleanServiceWorkerVersion;             console.log('Latest Service Worker Installed: ' + isMatch); - +                         if (!reg.active && (reg.installing || reg.waiting)) {               // First time load: wait for activation.               console.log('No Service Worker Available - Installing New Service Worker.');               waitForActivation(reg.installing || reg.waiting);             } else if (!isMatch) {               // New version available: force update. + isUpdateInstallation = true; // Set flag when update is initiated               console.log('New service worker available. Updating and waiting for activation.');               reg.update();               waitForActivation(reg.installing);             } else {               // Existing service worker is still good.               console.log('Service Worker up-to-date, Loading app.'); -              loadMainDartJs(); +              loadMainDartJs(false); // No update, pass false             }           }) - .catch((error) => { - console.error('Service Worker registration failed:', error); - loadMainDartJs(); // Fallback if registration fails completely - }); +          .catch((error) => { +              console.error('Service Worker registration failed:', error); +              loadMainDartJs(false); // Fallback if registration fails completely +          });         // If service worker doesn't succeed in a reasonable amount of time, @@ -454,7 +460,7 @@             console.warn(               'Failed to load app from a service worker. Falling back to plain -