Fix: Offline-Indicator Cache-Namen + Step-5-Check, SW by-v1078
- CACHE_API hieß bei mir 'by-api', tatsächlich aber 'ban-yaro-api-v1' → korrigiert, sonst hätte step 3+5 nie grün werden können - Step 5 prüfte auf gecachte Diary-Foto-Previews — die werden vom SW aber gar nicht gecacht (nur API-Routen sind in _CACHEABLE_GET). Stattdessen jetzt 'Training & Wissen' (training/exercises + wiki/rassen) — ist im SW-Cache abgedeckt und passt zur WELT-Welt - _fetchMissing für Step 5 entsprechend angepasst
This commit is contained in:
parent
8097d21605
commit
776641fa65
5 changed files with 20 additions and 28 deletions
|
|
@ -410,7 +410,7 @@ async def serve_media(path: str, request: _Request):
|
||||||
raise _HE(404, "Nicht gefunden.")
|
raise _HE(404, "Nicht gefunden.")
|
||||||
return _media_response(filepath)
|
return _media_response(filepath)
|
||||||
|
|
||||||
APP_VER = "1077" # muss mit APP_VER in app.js übereinstimmen
|
APP_VER = "1078" # muss mit APP_VER in app.js übereinstimmen
|
||||||
|
|
||||||
@app.get("/.well-known/assetlinks.json")
|
@app.get("/.well-known/assetlinks.json")
|
||||||
async def assetlinks():
|
async def assetlinks():
|
||||||
|
|
|
||||||
|
|
@ -101,9 +101,9 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
|
<!-- CSS: Reihenfolge ist wichtig — ?v= zwingt Browser zur Neuladung -->
|
||||||
<link rel="stylesheet" href="/css/design-system.css?v=1077">
|
<link rel="stylesheet" href="/css/design-system.css?v=1078">
|
||||||
<link rel="stylesheet" href="/css/layout.css?v=1077">
|
<link rel="stylesheet" href="/css/layout.css?v=1078">
|
||||||
<link rel="stylesheet" href="/css/components.css?v=1077">
|
<link rel="stylesheet" href="/css/components.css?v=1078">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
|
@ -635,11 +635,11 @@
|
||||||
<div id="modal-container"></div>
|
<div id="modal-container"></div>
|
||||||
|
|
||||||
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
|
<!-- JS: Reihenfolge ist wichtig — erst Basis, dann Features -->
|
||||||
<script src="/js/api.js?v=1077"></script>
|
<script src="/js/api.js?v=1078"></script>
|
||||||
<script src="/js/ui.js?v=1077"></script>
|
<script src="/js/ui.js?v=1078"></script>
|
||||||
<script src="/js/app.js?v=1077"></script>
|
<script src="/js/app.js?v=1078"></script>
|
||||||
<script src="/js/worlds.js?v=1077"></script>
|
<script src="/js/worlds.js?v=1078"></script>
|
||||||
<script src="/js/offline-indicator.js?v=1077"></script>
|
<script src="/js/offline-indicator.js?v=1078"></script>
|
||||||
|
|
||||||
<!-- Feature-Seiten werden lazy geladen -->
|
<!-- Feature-Seiten werden lazy geladen -->
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
Router, State-Management, Navigation, Initialisierung.
|
Router, State-Management, Navigation, Initialisierung.
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
const APP_VER = '1077'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
const APP_VER = '1078'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
|
||||||
const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt
|
const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt
|
||||||
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
const IS_STAGING = location.hostname === 'staging.banyaro.app';
|
||||||
// Cache-Bust-Parameter nach Update-Reload sofort entfernen.
|
// Cache-Bust-Parameter nach Update-Reload sofort entfernen.
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ window.OfflineIndicator = (() => {
|
||||||
// Cache-Namen — müssen mit sw.js übereinstimmen
|
// Cache-Namen — müssen mit sw.js übereinstimmen
|
||||||
const CACHE_STATIC = `by-v${(window.APP_VER || '0')}-static`;
|
const CACHE_STATIC = `by-v${(window.APP_VER || '0')}-static`;
|
||||||
const CACHE_TILES = 'ban-yaro-tiles-v1';
|
const CACHE_TILES = 'ban-yaro-tiles-v1';
|
||||||
const CACHE_API = 'by-api';
|
const CACHE_API = 'ban-yaro-api-v1';
|
||||||
const TILE_MIN = 50; // Mindest-Tiles für Stufe 4
|
const TILE_MIN = 50; // Mindest-Tiles für Stufe 4
|
||||||
|
|
||||||
// 5 Offline-Bereitschafts-Checks, in Reihenfolge der Pfoten-Stufen
|
// 5 Offline-Bereitschafts-Checks, in Reihenfolge der Pfoten-Stufen
|
||||||
|
|
@ -51,13 +51,14 @@ window.OfflineIndicator = (() => {
|
||||||
return keys.length >= TILE_MIN;
|
return keys.length >= TILE_MIN;
|
||||||
} },
|
} },
|
||||||
|
|
||||||
{ step: 5, title: 'Tagebuch-Fotos',
|
{ step: 5, title: 'Training & Wissen',
|
||||||
detail: 'Vorschau-Bilder der letzten Einträge',
|
detail: 'Übungen, Wiki-Rassen, Wetter — Welt-Inhalte',
|
||||||
probe: async () => {
|
probe: async () => {
|
||||||
const c = await caches.open(CACHE_API).catch(() => null);
|
const c = await caches.open(CACHE_API).catch(() => null);
|
||||||
if (!c) return false;
|
if (!c) return false;
|
||||||
const keys = await c.keys();
|
const urls = (await c.keys()).map(r => r.url);
|
||||||
return keys.some(r => r.url.includes('/data/diary/') && r.url.includes('_preview'));
|
return urls.some(u => u.includes('/api/training/exercises'))
|
||||||
|
&& urls.some(u => u.includes('/api/wiki/rassen'));
|
||||||
} },
|
} },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -180,18 +181,9 @@ window.OfflineIndicator = (() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (m.step === 5) {
|
} else if (m.step === 5) {
|
||||||
const dogId = window._appState?.activeDog?.id;
|
tasks.push(fetch('/api/training/exercises').catch(() => {}));
|
||||||
if (dogId) {
|
tasks.push(fetch('/api/wiki/rassen?limit=50').catch(() => {}));
|
||||||
try {
|
tasks.push(fetch('/api/weather').catch(() => {}));
|
||||||
const entries = await fetch(`/api/dogs/${dogId}/diary?limit=10`).then(r => r.json());
|
|
||||||
(entries || []).slice(0, 10).forEach(e => {
|
|
||||||
if (e.cover_url) tasks.push(fetch(e.cover_url).catch(() => {}));
|
|
||||||
(e.media_items || []).slice(0, 3).forEach(m => {
|
|
||||||
if (m.url) tasks.push(fetch(m.url).catch(() => {}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} catch {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await Promise.all(tasks);
|
await Promise.all(tasks);
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
|
||||||
// ← EINZIGE Stelle für die Version — STATIC_ASSETS und CACHE_VERSION leiten sich ab
|
// ← EINZIGE Stelle für die Version — STATIC_ASSETS und CACHE_VERSION leiten sich ab
|
||||||
const VER = '1077';
|
const VER = '1078';
|
||||||
const CACHE_VERSION = `by-v${VER}`;
|
const CACHE_VERSION = `by-v${VER}`;
|
||||||
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
const CACHE_STATIC = `${CACHE_VERSION}-static`;
|
||||||
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue