From f0afdcc498604ae85d2c214448a3df64f46c5860 Mon Sep 17 00:00:00 2001 From: rouggy Date: Mon, 20 Jul 2026 19:32:06 +0200 Subject: [PATCH] fix: UDP-logged QSOs adopt the active profile's station callsign (Club Log upload blocked) MSHV/WSJT-X often stamp a personal STATION_CALLSIGN (e.g. F4BPO) that differs from the special-event/contest profile you're running in OpsLog (e.g. TM74TFR). The QSO then failed the extsvc station-callsign guard and was never uploaded to the (matching) Club Log logbook. Live UDP logging now stamps the active profile's callsign when the base call genuinely differs (portable variants left alone). --- app.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app.go b/app.go index c96cb48..556ae75 100644 --- a/app.go +++ b/app.go @@ -9567,6 +9567,22 @@ func (a *App) LogUDPLoggedADIF(adifText string) (int64, error) { // MY_RIG / MY_ANTENNA) from the active profile. Without this a UDP / // WSJT-X auto-logged QSO carried none of the operator's own data. a.applyStationDefaults(&q, true) + // Live UDP logging belongs to the STATION you're operating in OpsLog right now: + // adopt the active profile's callsign even when the sender (MSHV/WSJT-X, often + // configured with a personal call) stamped a different STATION_CALLSIGN. Without + // this, a special-event/contest QSO (profile TM74TFR) kept MSHV's F4BPO and was + // then BLOCKED from uploading to the TM74TFR Club Log logbook by the mismatch + // guard. Portable variants of the same call are already fine, so only override + // when the base call genuinely differs. + if a.profiles != nil { + if p, err := a.profiles.Active(a.ctx); err == nil { + pc := strings.ToUpper(strings.TrimSpace(p.Callsign)) + if pc != "" && !extsvc.SameBaseCall(q.StationCallsign, pc) { + applog.Printf("udp log: station callsign %q → active profile %q", q.StationCallsign, pc) + q.StationCallsign = pc + } + } + } // ── DXCC# + QSL defaults ── // applyDXCCNumber stamps the contacted-station DXCC# from the