From e9feeffdc3e8216b185c6087c1a79f603d2bdc8b Mon Sep 17 00:00:00 2001 From: Gregory Salaun Date: Fri, 7 Aug 2026 10:56:49 +0200 Subject: [PATCH] fix(udp): forward WSJT/JTDX/MSHV-logged QSOs to the outbound ADIF integrations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit autoLogFromUDP (the inbound WSJT-X/JTDX/MSHV log path) inserted the QSO but, unlike the manual LogQSO path, never called a.udp.EmitLoggedADIF — so a QSO received from MSHV was not re-emitted to the outbound ADIF listeners (Log4OM, N1MM, GridTracker…). Emit it in the same async goroutine. A pathological self-loop is broken by the existing ±2-min dedup, which returns before the emit. --- app.go | 6 ++++++ changelog.json | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app.go b/app.go index e6a7d5c..7f1c308 100644 --- a/app.go +++ b/app.go @@ -11583,6 +11583,12 @@ func (a *App) LogUDPLoggedADIF(adifText string) (int64, error) { a.extsvc.OnQSOLogged(id) } a.maybeAutoSendEQSL(qc) + // Forward to the outbound UDP integrations, exactly like the manual log + // path — otherwise a QSO logged FROM WSJT-X/JTDX/MSHV was never re-emitted + // to the outbound ADIF listeners (Log4OM, N1MM, gridtracker…). + if a.udp != nil { + a.udp.EmitLoggedADIF(adif.SingleRecordADIF(qc)) + } if a.ctx != nil { wruntime.EventsEmit(a.ctx, "qso:logged", id) // refresh again so award_refs show } diff --git a/changelog.json b/changelog.json index 481a64f..bbb6e78 100644 --- a/changelog.json +++ b/changelog.json @@ -6,13 +6,15 @@ "Backup: new \"Back up on every exit\" option (Settings → Backup). With it on, OpsLog backs up the database each time you quit instead of only the first time of the day — so a second session's QSOs are always captured.", "Cluster details (My station): removed the example placeholders in My rig / My antenna (and the satellite name/mode) — they looked like real values, so an empty field read as already filled.", "QSL: new \"OpsLog QSL received\" marker on the QSO edit window (next to QSL Message), with a live PSE QSL / TNX indicator. When a QSL was received the card prints TNX (thanks), otherwise PSE QSL (please send one) — automatic. The stamp uses the {qso.pse_tnx} token (in the default card footer; placeable anywhere in the designer). A \"QSL received\" column was added to Recent QSOs.", - "QSL: a default QSL message (Settings → E-mail, under the QSL card e-mail) now prints on the card when a QSO has no QSL Message of its own — a QSO's own QSL Message always takes precedence." + "QSL: a default QSL message (Settings → E-mail, under the QSL card e-mail) now prints on the card when a QSO has no QSL Message of its own — a QSO's own QSL Message always takes precedence.", + "UDP outbound: a QSO logged from WSJT-X / JTDX / MSHV (via the inbound UDP listener) is now forwarded to the outbound ADIF integrations too — previously only QSOs typed directly into OpsLog were re-emitted." ], "fr": [ "Sauvegarde : nouvelle option \"Sauvegarder à chaque fermeture\" (Réglages → Sauvegarde). Activée, OpsLog sauvegarde la base à chaque fois que tu quittes au lieu d'une seule fois par jour — les QSO d'une seconde session sont ainsi toujours pris.", "Détails cluster (Ma station) : suppression des exemples en filigrane dans Mon rig / Mon antenne (et nom/mode satellite) — ils ressemblaient à de vraies valeurs, faisant croire qu'un champ vide était déjà rempli.", "QSL : nouveau marqueur \"QSL OpsLog reçue\" dans la fenêtre d'édition du QSO (à côté du Message QSL), avec un indicateur PSE QSL / TNX en direct. Si une QSL a été reçue, la carte imprime TNX (merci), sinon PSE QSL (envoie-moi une carte) — automatique. Le tampon utilise le token {qso.pse_tnx} (dans le pied de carte par défaut ; plaçable où tu veux dans le designer). Une colonne \"QSL reçue\" a été ajoutée aux QSO récents.", - "QSL : un message QSL par défaut (Réglages → E-mail, sous l'e-mail de carte QSL) s'imprime désormais sur la carte quand un QSO n'a pas son propre Message QSL — le Message QSL du QSO l'emporte toujours." + "QSL : un message QSL par défaut (Réglages → E-mail, sous l'e-mail de carte QSL) s'imprime désormais sur la carte quand un QSO n'a pas son propre Message QSL — le Message QSL du QSO l'emporte toujours.", + "UDP sortant : un QSO enregistré depuis WSJT-X / JTDX / MSHV (via l'écouteur UDP entrant) est désormais aussi transmis aux intégrations ADIF sortantes — avant, seuls les QSO saisis directement dans OpsLog étaient réémis." ] }, {