From b2e75153276c634d9979b5f4b02450a9ca586e96 Mon Sep 17 00:00:00 2001 From: jbergner Date: Sun, 21 Sep 2025 21:28:10 +0200 Subject: [PATCH] bugfix-9 --- web/static/js/index.js | 11 +++++++++-- web/static/js/stream.js | 43 +++++++++++++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/web/static/js/index.js b/web/static/js/index.js index c08b1ed..dcdbb4d 100644 --- a/web/static/js/index.js +++ b/web/static/js/index.js @@ -46,12 +46,19 @@ const apiLive = !!it.live; const pillClass = apiLive ? 'live' : 'off'; const pillText = apiLive ? 'LIVE' : 'Offline'; - + const viewers = (()=>{ + const cands = [it.viewers, it.viewerCount, it.viewCount, it.watchers, it.clients, it.hls_viewers, it.stats && it.stats.viewers]; + for (const v of cands){ + const n = typeof v === 'string' ? parseInt(v,10) : v; + if (Number.isFinite(n) && n >= 0) return n; + } + return 0; + })(); a.innerHTML = `
${it.name}
-
Zuschauer: ${it.viewers ?? 0}
+
Zuschauer: ${viewers}
${pillText}
`; diff --git a/web/static/js/stream.js b/web/static/js/stream.js index 1106d2d..fa6c14a 100644 --- a/web/static/js/stream.js +++ b/web/static/js/stream.js @@ -65,6 +65,24 @@ v.addEventListener('playing', () => { playerLive = true; setLive(true); }); v.addEventListener('error', () => { playerLive = false; setLive(false); }); + function pickViewers(it){ + // Häufige Feldnamen aus diversen Backends + const candidates = [ + it.viewers, + it.viewerCount, + it.viewCount, + it.watchers, + it.clients, + it.hls_viewers, + it.stats && it.stats.viewers, + ]; + for (const v of candidates) { + const n = typeof v === 'string' ? parseInt(v, 10) : v; + if (Number.isFinite(n) && n >= 0) return n; + } + return 0; +} + async function refreshMeta(){ // API nur als Zusatz – überschreibt NIE ein „echtes“ playerLive=true try { @@ -78,12 +96,15 @@ const combinedLive = playerLive || apiLive; setLive(combinedLive); - let viewers = it.viewers ?? 0; - if (combinedLive && viewers === 0) { - // Wir sehen selbst Video → mindestens 1 Betrachter - viewers = '≥1'; + let viewers = pickViewers(it); + + // Nur wenn API wirklich 0/fehlend meldet, aber der Player sicher läuft, + // zeigen wir "≥1" als sinnvollen Fallback: + if (playerLive && viewers === 0) { + viewersEl.textContent = 'Zuschauer: ≥1'; + } else { + viewersEl.textContent = 'Zuschauer: ' + viewers; } - viewersEl.textContent = 'Zuschauer: ' + viewers; } catch (_) { // Bei API-Fehler nichts überschreiben } @@ -110,9 +131,15 @@ const combinedLive = playerLive || apiLive; setLive(combinedLive); - let viewers = it.viewers ?? 0; - if (combinedLive && viewers === 0) viewers = '≥1'; - viewersEl.textContent = 'Zuschauer: ' + viewers; + let viewers = pickViewers(it); + + // Nur wenn API wirklich 0/fehlend meldet, aber der Player sicher läuft, + // zeigen wir "≥1" als sinnvollen Fallback: + if (playerLive && viewers === 0) { + viewersEl.textContent = 'Zuschauer: ≥1'; + } else { + viewersEl.textContent = 'Zuschauer: ' + viewers; + } } catch(e){ /* ignore */ } }); })();