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) {