[fix](trx-client): remove dead NOAA APT decoder, fix LRPT bookmark activation

Remove the wxsat/NOAA APT checkbox from bookmark decoder form and all
JS references — the APT decoder no longer exists.

Fix LRPT decoder not activating when an FM-mode bookmark is applied:
bmApply() gated decoder toggles on DIG mode only, so LRPT bookmarks
(which use FM) never triggered SetLrptDecodeEnabled.  Gate on DIG or FM.

Wire satellite pass scheduling into the scheduler loop: check configured
satellite entries against live pass predictions, activate the satellite's
bookmark (enabling LRPT decoder) when a pass is active, and expose
active_satellite in SchedulerStatus for the frontend.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-29 23:49:09 +02:00
parent 4c095e64f0
commit f6282d17ca
3 changed files with 186 additions and 7 deletions
@@ -472,7 +472,6 @@
<label class="bm-decoder-check"><input type="checkbox" id="bm-dec-ft2" value="ft2" /> FT2</label>
<label class="bm-decoder-check"><input type="checkbox" id="bm-dec-wspr" value="wspr" /> WSPR</label>
<label class="bm-decoder-check"><input type="checkbox" id="bm-dec-hf-aprs" value="hf-aprs" /> HF APRS</label>
<label class="bm-decoder-check"><input type="checkbox" id="bm-dec-wxsat" value="wxsat" /> NOAA APT</label>
<label class="bm-decoder-check"><input type="checkbox" id="bm-dec-lrpt" value="lrpt" /> Meteor LRPT</label>
</div>
</div>
@@ -236,7 +236,6 @@ function bmReadDecoders() {
if (document.getElementById("bm-dec-ft2").checked) decoders.push("ft2");
if (document.getElementById("bm-dec-wspr").checked) decoders.push("wspr");
if (document.getElementById("bm-dec-hf-aprs").checked) decoders.push("hf-aprs");
if (document.getElementById("bm-dec-wxsat").checked) decoders.push("wxsat");
if (document.getElementById("bm-dec-lrpt").checked) decoders.push("lrpt");
return decoders;
}
@@ -251,7 +250,6 @@ function bmWriteDecoders(decoders) {
document.getElementById("bm-dec-ft2").checked = list.includes("ft2");
document.getElementById("bm-dec-wspr").checked = list.includes("wspr");
document.getElementById("bm-dec-hf-aprs").checked = list.includes("hf-aprs");
document.getElementById("bm-dec-wxsat").checked = list.includes("wxsat");
document.getElementById("bm-dec-lrpt").checked = list.includes("lrpt");
}
@@ -430,8 +428,10 @@ async function bmApply(bm) {
await postPath("/set_freq?hz=" + bm.freq_hz);
}
})();
// Decoder toggles (DIG mode) — also fire-and-forget.
const decoderPromise = (bm.mode === "DIG" && Array.isArray(bm.decoders)) ? (async () => {
// Decoder toggles (DIG / FM modes) — also fire-and-forget.
const hasDecoders = Array.isArray(bm.decoders) && bm.decoders.length > 0;
const decoderMode = bm.mode === "DIG" || bm.mode === "FM";
const decoderPromise = (hasDecoders && decoderMode) ? (async () => {
const statusResp = await fetch("/status");
if (statusResp.ok) {
const st = await statusResp.json();
@@ -441,7 +441,7 @@ async function bmApply(bm) {
toggles.push(postPath("/toggle_" + key.replace(/-/g, "_") + "_decode"));
}
};
check("ft8"); check("ft4"); check("ft2"); check("wspr"); check("hf-aprs"); check("wxsat"); check("lrpt");
check("ft8"); check("ft4"); check("ft2"); check("wspr"); check("hf-aprs"); check("lrpt");
if (toggles.length) await Promise.all(toggles);
}
})() : Promise.resolve();