From 2a545377c1c0f09044e40760647fadb56653adff Mon Sep 17 00:00:00 2001 From: rene Date: Sat, 9 May 2026 20:18:45 +0200 Subject: [PATCH] Fix: Update-Loop entfernt (navigate kein Reload mehr), API-Header triggert Banner statt Redirect (SW by-v800) --- backend/main.py | 2 +- backend/static/js/api.js | 4 +++- backend/static/js/app.js | 11 +++-------- backend/static/sw.js | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/backend/main.py b/backend/main.py index be46d5c..9513865 100644 --- a/backend/main.py +++ b/backend/main.py @@ -341,7 +341,7 @@ MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") os.makedirs(MEDIA_DIR, exist_ok=True) app.mount("/media", StaticFiles(directory=MEDIA_DIR), name="media") -APP_VER = "799" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "800" # muss mit APP_VER in app.js übereinstimmen @app.get("/.well-known/assetlinks.json") async def assetlinks(): diff --git a/backend/static/js/api.js b/backend/static/js/api.js index 1b5fe4c..c6203e7 100644 --- a/backend/static/js/api.js +++ b/backend/static/js/api.js @@ -45,10 +45,12 @@ const API = (() => { throw new APIError(msg, 0, 'network'); } - // Versions-Check: Server meldet neue Version → beim nächsten Seitenwechsel neu laden + // Versions-Check: Server meldet neue Version → Banner anzeigen (einmalig) const serverVer = response.headers.get('x-app-version'); if (serverVer && serverVer !== APP_VER && !window._byUpdatePending) { window._byUpdatePending = true; + // App._showUpdateBanner wird aufgerufen sobald App initialisiert ist + setTimeout(() => window.App?._triggerUpdateBanner?.(serverVer), 0); } if (response.status === 204) return null; diff --git a/backend/static/js/app.js b/backend/static/js/app.js index eb717c7..9a68395 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '799'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '800'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.5.0'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; // Cache-Bust-Parameter nach Update-Reload sofort entfernen @@ -119,12 +119,6 @@ const App = (() => { // ---------------------------------------------------------- function navigate(pageId, pushHistory = true, params = {}) { if (!pages[pageId]) return; - // Neue Version vom Server erkannt → jetzt sicher neu laden (kein aktiver Speichervorgang) - if (window._byUpdatePending) { - window._byUpdatePending = false; - location.replace('/?_t=' + Date.now()); - return; - } if (window.Worlds?._visible) window.Worlds.hide(); // Aktive Seite ausblenden @@ -1102,7 +1096,8 @@ const App = (() => { showOnboarding: _showOnboardingModal, updateNotifBadge: _updateNotifBadge, checkNearbyAlerts: _checkNearbyAlerts, - loadScript: _loadScript }; + loadScript: _loadScript, + _triggerUpdateBanner: _showUpdateBanner }; })(); diff --git a/backend/static/sw.js b/backend/static/sw.js index 5e872f8..3a285b8 100644 --- a/backend/static/sw.js +++ b/backend/static/sw.js @@ -3,7 +3,7 @@ Offline-Cache + Push Notifications + Tile-Cache ============================================================ */ -const CACHE_VERSION = 'by-v799'; +const CACHE_VERSION = 'by-v800'; const CACHE_STATIC = `${CACHE_VERSION}-static`; const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache