From df612aae006814b4c2c1aeb3a3e6083b82bc809c Mon Sep 17 00:00:00 2001 From: Stan Grams Date: Sun, 1 Mar 2026 14:46:40 +0100 Subject: [PATCH] [fix](trx-frontend-http): APRS bar shows full history, no truncation Drop APRS_BAR_MAX cap and the separate aprsBarFrames ring buffer; drive the bar directly from aprsPacketHistory (CRC-ok frames only). Remove the 60-char info truncation. CSS opacity fading still kicks in after frame 5; older frames are reachable by scrolling. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Stan Grams --- .../assets/web/plugins/aprs.js | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/aprs.js b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/aprs.js index 9363cfe..bed7e5b 100644 --- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/aprs.js +++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/aprs.js @@ -4,13 +4,10 @@ const aprsPacketsEl = document.getElementById("aprs-packets"); const aprsFilterInput = document.getElementById("aprs-filter"); const aprsBarOverlay = document.getElementById("aprs-bar-overlay"); const APRS_MAX_PACKETS = 100; -const APRS_BAR_MAX = 5; let aprsFilterText = ""; // Persistent packet history let aprsPacketHistory = loadSetting("aprsPackets", []); -// Ring buffer of last N packets for the overview bar -let aprsBarFrames = []; function renderAprsInfo(pkt) { const bytes = Array.isArray(pkt.info_bytes) ? pkt.info_bytes : null; @@ -110,16 +107,17 @@ function applyAprsFilterToAll() { function updateAprsBar() { if (!aprsBarOverlay) return; const isPkt = (document.getElementById("mode")?.value || "").toUpperCase() === "PKT"; - if (!isPkt || aprsBarFrames.length === 0) { + const okFrames = aprsPacketHistory.filter((p) => p.crcOk); + if (!isPkt || okFrames.length === 0) { aprsBarOverlay.style.display = "none"; return; } let html = '
APRS
'; - for (const pkt of aprsBarFrames) { + for (const pkt of okFrames) { const ts = pkt._ts ? `${pkt._ts}` : ""; const call = `${escapeMapHtml(pkt.srcCall)}`; const dest = escapeMapHtml(pkt.destCall || ""); - const info = escapeMapHtml((pkt.info || "").slice(0, 60)); + const info = escapeMapHtml(pkt.info || ""); html += `
${ts}${call}>${dest}: ${info}
`; } aprsBarOverlay.innerHTML = html; @@ -140,11 +138,7 @@ function addAprsPacket(pkt) { saveSetting("aprsPackets", aprsPacketHistory); // Update overview bar (CRC-failed frames excluded) - if (pkt.crcOk) { - aprsBarFrames.unshift(pkt); - if (aprsBarFrames.length > APRS_BAR_MAX) aprsBarFrames.length = APRS_BAR_MAX; - updateAprsBar(); - } + if (pkt.crcOk) updateAprsBar(); const row = renderAprsRow(pkt); if (pkt.lat != null && pkt.lon != null && window.aprsMapAddStation) { @@ -160,7 +154,6 @@ document.getElementById("aprs-clear-btn").addEventListener("click", async () => aprsPacketsEl.innerHTML = ""; aprsPacketHistory = []; saveSetting("aprsPackets", []); - aprsBarFrames = []; updateAprsBar(); try { await postPath("/clear_aprs_decode"); } catch (e) { console.error("APRS clear failed", e); } }); @@ -173,8 +166,6 @@ for (let i = aprsPacketHistory.length - 1; i >= 0; i--) { window.aprsMapAddStation(pkt.srcCall, pkt.lat, pkt.lon, pkt.info, pkt.symbolTable, pkt.symbolCode); } } -// Pre-populate bar from history (most recent first, CRC-ok only) -aprsBarFrames = aprsPacketHistory.filter((p) => p.crcOk).slice(0, APRS_BAR_MAX); updateAprsBar(); if (aprsFilterInput) {