diff --git a/html/js/office-render.js b/html/js/office-render.js
index 7b672aa..19ac2e5 100644
--- a/html/js/office-render.js
+++ b/html/js/office-render.js
@@ -2626,9 +2626,34 @@ async function boot() {
}
async function refresh() {
+ // Issue #94, zweiter Anlauf: der erste Fix (siehe Kommentar unten bei renderOfficeScene())
+ // sorgte zwar dafuer, dass der Banner ueberhaupt erscheint, hat aber "API nicht erreichbar"
+ // faelschlich auch dann gezeigt, wenn loadLiveData() laengst erfolgreich war und erst das
+ // anschliessende Verarbeiten/Zeichnen der Live-Daten scheiterte - Produktion meldete dann
+ // trotz per curl nachweislich erreichbarer API weiterhin Unerreichbarkeit. Deshalb jetzt
+ // zwei getrennte try-Bloecke: nur ein Fehlschlag von loadLiveData() selbst ist ein
+ // Erreichbarkeitsproblem und darf den Demo-Fallback samt Banner ausloesen.
+ let data;
+ try {
+ data = await loadLiveData();
+ } catch (err) {
+ console.warn("[office] Live-API nicht erreichbar, zeige Demo-Daten.", err);
+ // setApiBanner() steht in einem eigenen finally: renderOfficeScene() zeichnet bei jedem
+ // Refresh die komplette Szene neu und kann durch einen Fehler in noch unbekannten
+ // Datenkombinationen scheitern (siehe Issue #94 - Produktion zeigte trotz nicht
+ // erreichbarer API keinen Banner). Ohne das finally wuerde ein solcher Fehler die
+ // wichtigere Meldung "API nicht erreichbar" mit sich reissen, statt sie anzuzeigen.
+ try {
+ renderOfficeScene(container);
+ } finally {
+ setApiBanner(true);
+ }
+ return;
+ }
+
+ setApiBanner(false);
+ lastLiveData = data;
try {
- const data = await loadLiveData();
- lastLiveData = data;
if (previousTickets) {
const previousById = new Map(previousTickets.map((ticket) => [ticket.id, ticket]));
@@ -2684,19 +2709,12 @@ async function boot() {
resolvePendingAgentTicketMoves(data.agents);
previousTickets = data.tickets;
renderLiveScene(data);
- setApiBanner(false);
} catch (err) {
- console.warn("[office] Live-API nicht erreichbar, zeige Demo-Daten.", err);
- // setApiBanner() steht in einem eigenen finally: renderOfficeScene() zeichnet bei jedem
- // Refresh die komplette Szene neu und kann durch einen Fehler in noch unbekannten
- // Datenkombinationen scheitern (siehe Issue #94 - Produktion zeigte trotz nicht
- // erreichbarer API keinen Banner). Ohne das finally wuerde ein solcher Fehler die
- // wichtigere Meldung "API nicht erreichbar" mit sich reissen, statt sie anzuzeigen.
- try {
- renderOfficeScene(container);
- } finally {
- setApiBanner(true);
- }
+ // Die API war erreichbar (loadLiveData() oben ist bereits durchgelaufen) - ein Fehler
+ // hier ist ein Render-/Verarbeitungsbug, kein Erreichbarkeitsproblem. Der Banner bleibt
+ // deshalb aus (siehe setApiBanner(false) oben); der naechste Poll-Zyklus versucht es
+ // erneut, sobald startRealtimeUpdates() ihn ausloest.
+ console.error("[office] Fehler beim Verarbeiten/Zeichnen der Live-Daten.", err);
}
}