From 3dd95cd9cc9b790fb1aa967967cf6ee89edca19c Mon Sep 17 00:00:00 2001 From: Jan Svabenik Date: Sun, 22 Mar 2026 23:24:04 +0100 Subject: [PATCH] Prioritize runtime signal metadata across spectrum UI --- web/app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/web/app.js b/web/app.js index 5d64731..efdcbf0 100644 --- a/web/app.js +++ b/web/app.js @@ -319,6 +319,7 @@ function getSignalPrimaryMode(signal) { function getSignalRuntimeSummary(signal) { const bits = []; if (signal?.stereo_state) bits.push(signal.stereo_state); + if (signal?.demod && signal.demod !== getSignalPrimaryMode(signal)) bits.push(signal.demod); if (!bits.length && isListeningSignal(signal)) { if (liveListenInfo?.status && !['Idle', '-'].includes(liveListenInfo.status)) bits.push(liveListenInfo.status); if (liveListenInfo?.stereo_state && liveListenInfo.stereo_state !== '-') bits.push(liveListenInfo.stereo_state); @@ -1202,7 +1203,6 @@ function renderSpectrum() { const x1 = ((left - startHz) / (endHz - startHz)) * w; const x2 = ((right - startHz) / (endHz - startHz)) * w; const boxW = Math.max(2, x2 - x1); - const mod = s.class?.mod_type || ''; const primaryMode = getSignalPrimaryMode(s); const mc = modColor(primaryMode); const rdsName = s.class?.pll?.rds_station || ''; @@ -1240,7 +1240,7 @@ function renderSpectrum() { ctx.font = '11px Inter, sans-serif'; ctx.fillText(freqStr, labelX, baseY + 11); - // Line 2: runtime status or primary mode + // Line 2: runtime info first, then primary mode if (runtimeInfo || primaryMode) { ctx.fillStyle = mc.label; ctx.font = 'bold 10px Inter, sans-serif'; @@ -1514,6 +1514,7 @@ function _createSignalItem(s) { btn.dataset.class = s.class?.mod_type || ''; btn.dataset.id = s.id || 0; const primaryMode = getSignalPrimaryMode(s); + const runtimeInfo = getSignalRuntimeSummary(s); const mc = modColor(primaryMode); const rds = s.class?.pll?.rds_station || ''; const dec = decisionIndex.get(String(s.id || 0)); @@ -1522,6 +1523,7 @@ function _createSignalItem(s) { const metaBits = []; if (decFlags) metaBits.push(decFlags); if (decText) metaBits.push(decText); + if (runtimeInfo) metaBits.push(runtimeInfo); btn.title = metaBits.join(' · '); btn.innerHTML = `
${fmtMHz(s.center_hz, 6)}${(s.snr_db || 0).toFixed(1)} dB
${primaryMode}${rds ? `${rds}` : ''}
`; btn.style.borderLeftColor = mc.label; @@ -1537,6 +1539,7 @@ function _patchSignalItem(el, s) { const modeEl = el.querySelector('[data-field="mode"]'); const mod = s.class?.mod_type || ''; const primaryMode = getSignalPrimaryMode(s); + const runtimeInfo = getSignalRuntimeSummary(s); const mc = modColor(primaryMode); const rds = s.class?.pll?.rds_station || ''; const rdsEl = el.querySelector('[data-field="rds"]'); @@ -1546,6 +1549,7 @@ function _patchSignalItem(el, s) { const metaBits = []; if (decFlags) metaBits.push(decFlags); if (decText) metaBits.push(decText); + if (runtimeInfo) metaBits.push(runtimeInfo); el.title = metaBits.join(' · '); if (freqEl) freqEl.textContent = fmtMHz(s.center_hz, 6); if (snrEl) { snrEl.textContent = `${(s.snr_db || 0).toFixed(1)} dB`; snrEl.style.color = snrColor(s.snr_db || 0); }