Release 1.7.1

This commit is contained in:
2026-01-28 13:33:18 +01:00
parent 5221f9f670
commit 613f53ba9e

View File

@@ -365,22 +365,19 @@
} }
async function refreshTickerOnce() { async function refreshTickerOnce() {
// Disabled or missing URL: hide and clear immediately.
if (!tickerConfig || !tickerConfig.enabled) { if (!tickerConfig || !tickerConfig.enabled) {
if (tickerEl) tickerEl.style.display = 'none'; setTickerHeadlines([]);
document.body.classList.remove('has-ticker');
return; return;
} }
// No URL: keep hidden.
if (!tickerConfig.rss_url || !String(tickerConfig.rss_url).trim()) { if (!tickerConfig.rss_url || !String(tickerConfig.rss_url).trim()) {
if (tickerEl) tickerEl.style.display = 'none'; setTickerHeadlines([]);
document.body.classList.remove('has-ticker');
return; return;
} }
try { try {
const data = await fetchTickerHeadlines(); const data = await fetchTickerHeadlines();
if (!data || !data.enabled) { if (!data || !data.enabled) {
if (tickerEl) tickerEl.style.display = 'none'; setTickerHeadlines([]);
document.body.classList.remove('has-ticker');
return; return;
} }
setTickerHeadlines(data.headlines || []); setTickerHeadlines(data.headlines || []);
@@ -402,6 +399,13 @@
tickerInterval = setInterval(refreshTickerOnce, getTickerPollSeconds() * 1000); tickerInterval = setInterval(refreshTickerOnce, getTickerPollSeconds() * 1000);
} }
function stopTickerPolling() {
if (tickerInterval) {
clearInterval(tickerInterval);
tickerInterval = null;
}
}
function clearStage() { function clearStage() {
if (timer) { clearTimeout(timer); timer = null; } if (timer) { clearTimeout(timer); timer = null; }
stage.innerHTML = ''; stage.innerHTML = '';
@@ -551,7 +555,11 @@
tickerConfig = (playlist && playlist.ticker) ? playlist.ticker : null; tickerConfig = (playlist && playlist.ticker) ? playlist.ticker : null;
applyTickerStyle(tickerConfig); applyTickerStyle(tickerConfig);
await refreshTickerOnce(); await refreshTickerOnce();
startTickerPolling(); if (tickerConfig && tickerConfig.enabled) {
startTickerPolling();
} else {
stopTickerPolling();
}
next(); next();
} catch (e) { } catch (e) {
clearStage(); clearStage();
@@ -586,16 +594,31 @@
const newTickerCfg = (playlist && playlist.ticker) ? playlist.ticker : null; const newTickerCfg = (playlist && playlist.ticker) ? playlist.ticker : null;
const oldTickerStr = JSON.stringify(tickerConfig); const oldTickerStr = JSON.stringify(tickerConfig);
const newTickerStr = JSON.stringify(newTickerCfg); 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 oldRssUrl = (tickerConfig && tickerConfig.rss_url) ? String(tickerConfig.rss_url) : '';
const newRssUrl = (newTickerCfg && newTickerCfg.rss_url) ? String(newTickerCfg.rss_url) : ''; const newRssUrl = (newTickerCfg && newTickerCfg.rss_url) ? String(newTickerCfg.rss_url) : '';
tickerConfig = newTickerCfg; tickerConfig = newTickerCfg;
applyTickerStyle(tickerConfig); applyTickerStyle(tickerConfig);
if (oldTickerStr !== newTickerStr) { if (oldTickerStr !== newTickerStr) {
// If RSS URL changed, refetch. Otherwise just rerender to apply speed/style immediately. // Ensure enable/disable toggles are applied immediately (no reload required).
if (oldRssUrl !== newRssUrl) { 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(); await refreshTickerOnce();
} else { } else {
rerenderTickerFromCache(); // Style/speed change only: rerender from cache to apply instantly.
if (newEnabled) rerenderTickerFromCache();
} }
} }
if (oldStr !== newStr) { if (oldStr !== newStr) {