[fix](trx-frontend-http): drop bidirectional requirement for decode paths

The bidirectional check required both A→B and B→A directed messages to
draw a contact line, which was too strict — the receiver may not hear
both sides of a QSO. Now a decode path is drawn whenever a directed
message is decoded and the target's locator is known from any message
in the 24 h history window.

Also rename "Longest QSOs" → "Longest decode paths" and update
related UI labels to better reflect what is actually shown.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-15 17:09:12 +01:00
parent 8cb713b3b1
commit 22311eb01c
2 changed files with 3 additions and 7 deletions
@@ -6319,11 +6319,7 @@ function rebuildDecodeContactPaths() {
} }
} }
} }
// Index directed messages by "SOURCE::TARGET" for QSO (bidirectional) check
const directedPairs = new Set(directedMessages.map((m) => `${m.source}::${m.target}`));
for (const msg of directedMessages) { for (const msg of directedMessages) {
// A true QSO requires both A→B and B→A directed messages
if (!directedPairs.has(`${msg.target}::${msg.source}`)) continue;
const targetLocator = stationLocators.get(msg.target); const targetLocator = stationLocators.get(msg.target);
if (!targetLocator) continue; if (!targetLocator) continue;
if (msg.sourceGrid === targetLocator.grid) continue; if (msg.sourceGrid === targetLocator.grid) continue;
@@ -752,7 +752,7 @@
<div class="map-locator-phase-row"> <div class="map-locator-phase-row">
<button type="button" id="map-p2p-paths-toggle" class="map-locator-phase-btn">TRX Paths On</button> <button type="button" id="map-p2p-paths-toggle" class="map-locator-phase-btn">TRX Paths On</button>
<button type="button" id="map-contact-paths-toggle" class="map-locator-phase-btn">Contact Paths On</button> <button type="button" id="map-contact-paths-toggle" class="map-locator-phase-btn">Contact Paths On</button>
<span class="map-locator-empty">TRX paths on popup, directed contact paths when both locators are known</span> <span class="map-locator-empty">TRX paths on popup, directed decode paths when target locator is known</span>
</div> </div>
</div> </div>
</div> </div>
@@ -766,8 +766,8 @@
<section class="map-qso-summary" aria-labelledby="map-qso-summary-title"> <section class="map-qso-summary" aria-labelledby="map-qso-summary-title">
<div class="map-qso-summary-head"> <div class="map-qso-summary-head">
<div> <div>
<div id="map-qso-summary-title" class="map-qso-summary-title">Longest QSOs</div> <div id="map-qso-summary-title" class="map-qso-summary-title">Longest decode paths</div>
<div class="map-qso-summary-subtitle">Top 5 directed decode contacts in the current map view</div> <div class="map-qso-summary-subtitle">Top 5 directed decode paths in the current map view</div>
</div> </div>
</div> </div>
<div id="map-qso-summary-list" class="map-qso-summary-list"></div> <div id="map-qso-summary-list" class="map-qso-summary-list"></div>