From 613f53ba9e717548a06eb0bbaef5700aab4a58a1 Mon Sep 17 00:00:00 2001 From: bramval Date: Wed, 28 Jan 2026 13:33:18 +0100 Subject: [PATCH] Release 1.7.1 --- app/templates/display/player.html | 45 +++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/app/templates/display/player.html b/app/templates/display/player.html index e1371ab..630d031 100644 --- a/app/templates/display/player.html +++ b/app/templates/display/player.html @@ -365,22 +365,19 @@ } async function refreshTickerOnce() { + // Disabled or missing URL: hide and clear immediately. if (!tickerConfig || !tickerConfig.enabled) { - if (tickerEl) tickerEl.style.display = 'none'; - document.body.classList.remove('has-ticker'); + setTickerHeadlines([]); return; } - // No URL: keep hidden. if (!tickerConfig.rss_url || !String(tickerConfig.rss_url).trim()) { - if (tickerEl) tickerEl.style.display = 'none'; - document.body.classList.remove('has-ticker'); + setTickerHeadlines([]); return; } try { const data = await fetchTickerHeadlines(); if (!data || !data.enabled) { - if (tickerEl) tickerEl.style.display = 'none'; - document.body.classList.remove('has-ticker'); + setTickerHeadlines([]); return; } setTickerHeadlines(data.headlines || []); @@ -402,6 +399,13 @@ tickerInterval = setInterval(refreshTickerOnce, getTickerPollSeconds() * 1000); } + function stopTickerPolling() { + if (tickerInterval) { + clearInterval(tickerInterval); + tickerInterval = null; + } + } + function clearStage() { if (timer) { clearTimeout(timer); timer = null; } stage.innerHTML = ''; @@ -551,7 +555,11 @@ tickerConfig = (playlist && playlist.ticker) ? playlist.ticker : null; applyTickerStyle(tickerConfig); await refreshTickerOnce(); - startTickerPolling(); + if (tickerConfig && tickerConfig.enabled) { + startTickerPolling(); + } else { + stopTickerPolling(); + } next(); } catch (e) { clearStage(); @@ -586,16 +594,31 @@ const newTickerCfg = (playlist && playlist.ticker) ? playlist.ticker : null; const oldTickerStr = JSON.stringify(tickerConfig); const newTickerStr = JSON.stringify(newTickerCfg); + const oldEnabled = !!(tickerConfig && tickerConfig.enabled); + const newEnabled = !!(newTickerCfg && newTickerCfg.enabled); const oldRssUrl = (tickerConfig && tickerConfig.rss_url) ? String(tickerConfig.rss_url) : ''; const newRssUrl = (newTickerCfg && newTickerCfg.rss_url) ? String(newTickerCfg.rss_url) : ''; tickerConfig = newTickerCfg; applyTickerStyle(tickerConfig); if (oldTickerStr !== newTickerStr) { - // If RSS URL changed, refetch. Otherwise just rerender to apply speed/style immediately. - if (oldRssUrl !== newRssUrl) { + // Ensure enable/disable toggles are applied immediately (no reload required). + if (oldEnabled !== newEnabled) { + if (!newEnabled) { + // Hide and stop polling. + tickerLastHeadlines = []; + stopTickerPolling(); + setTickerHeadlines([]); + } else { + // Re-enable: fetch now and restart headline polling. + await refreshTickerOnce(); + startTickerPolling(); + } + } else if (oldRssUrl !== newRssUrl) { + // RSS URL changed: refetch now. await refreshTickerOnce(); } else { - rerenderTickerFromCache(); + // Style/speed change only: rerender from cache to apply instantly. + if (newEnabled) rerenderTickerFromCache(); } } if (oldStr !== newStr) {