Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b66030c89 | ||
|
|
d4f23a52af | ||
|
|
b4b9674d8c |
@@ -2721,6 +2721,15 @@ func (a *App) applySolar(q *qso.QSO) {
|
|||||||
if a.solar == nil {
|
if a.solar == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// Today's space weather belongs on today's QSO. The ADIF monitor and the UDP
|
||||||
|
// path both feed contacts that are normally seconds old, but neither promises
|
||||||
|
// it: a logger re-broadcasting its backlog, or an operator typing in last
|
||||||
|
// month's contact by hand, would otherwise be given this morning's SFI as if
|
||||||
|
// it had been measured at the time. A wrong number is worse than none — it
|
||||||
|
// cannot be told from a real reading afterwards.
|
||||||
|
if !q.QSODate.IsZero() && time.Since(q.QSODate) > 24*time.Hour {
|
||||||
|
return
|
||||||
|
}
|
||||||
d := a.solar.Get()
|
d := a.solar.Get()
|
||||||
if !d.OK {
|
if !d.OK {
|
||||||
return
|
return
|
||||||
@@ -11823,6 +11832,16 @@ func (a *App) LogUDPLoggedADIF(adifText string) (int64, error) {
|
|||||||
a.refineDistrictZones(&q) // W6 → CQ3/ITU6 for zone-split countries
|
a.refineDistrictZones(&q) // W6 → CQ3/ITU6 for zone-split countries
|
||||||
a.applyQSLDefaults(&q)
|
a.applyQSLDefaults(&q)
|
||||||
|
|
||||||
|
// ── Space weather and path length ──
|
||||||
|
// Also "same as the manual path", and they were missed when that comment was
|
||||||
|
// written. A QSO auto-logged from WSJT-X went in with no SFI, no A, no K and
|
||||||
|
// no distance, so an operator running digital — which is most of the traffic
|
||||||
|
// on most stations — had those fields empty across the whole log while a
|
||||||
|
// hand-logged contact carried them. Both are stamped only where the record
|
||||||
|
// left them empty, so an ADIF that supplied its own still wins.
|
||||||
|
a.applySolar(&q)
|
||||||
|
fillDistance(&q)
|
||||||
|
|
||||||
// ── Dedup (serialised) ──
|
// ── Dedup (serialised) ──
|
||||||
// Match by call + band + mode within a ±2-minute window: a QSO logged
|
// Match by call + band + mode within a ±2-minute window: a QSO logged
|
||||||
// manually in OpsLog and re-broadcast by Log4OM over UDP often differs by
|
// manually in OpsLog and re-broadcast by Log4OM over UDP often differs by
|
||||||
|
|||||||
@@ -1,4 +1,14 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "0.24.7",
|
||||||
|
"date": "",
|
||||||
|
"en": [
|
||||||
|
"QSOs logged from WSJT-X now carry the space weather and the distance, like hand-logged ones. The UDP path stamped the station profile, the DXCC and the QSL defaults but not SFI, A, K or distance — so an operator running digital had those fields empty across the whole log. Space weather is only stamped on a contact less than a day old: a logger re-broadcasting its backlog would otherwise be handed this morning readings for last month contacts."
|
||||||
|
],
|
||||||
|
"fr": [
|
||||||
|
"Les QSO enregistrés depuis WSJT-X portent désormais la météo spatiale et la distance, comme ceux saisis à la main. Le chemin UDP posait le profil station, le DXCC et les défauts QSL mais ni SFI, ni A, ni K, ni distance — un opérateur en numérique avait donc ces champs vides sur tout son log. La météo spatiale n est posée que sur un contact de moins d un jour : sinon un logiciel qui rediffuse son historique se verrait attribuer les relevés de ce matin sur des contacts du mois dernier."
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "0.24.6",
|
"version": "0.24.6",
|
||||||
"date": "",
|
"date": "",
|
||||||
|
|||||||
@@ -373,12 +373,16 @@ export function DetailsPanel({ callsign, prefix, operatorGrid, remoteGrid, qth,
|
|||||||
<Input value={details.address} onChange={(e) => onChange({ address: e.target.value })} />
|
<Input value={details.address} onChange={(e) => onChange({ address: e.target.value })} />
|
||||||
</Field>
|
</Field>
|
||||||
</div>
|
</div>
|
||||||
<Field label={t('detp.qslMessage')} span={7}>
|
{/* QSL via gets the room, not the message. Width should follow use, and
|
||||||
<Input value={details.qsl_msg} onChange={(e) => onChange({ qsl_msg: e.target.value })} />
|
these two are nowhere near equal: a manager's callsign is filled in
|
||||||
</Field>
|
constantly and a QSL message almost never. The message had 7 columns
|
||||||
<Field label={t('detp.qslVia')} span={5}>
|
of 12 for text most operators never type. */}
|
||||||
|
<Field label={t('detp.qslVia')} span={7}>
|
||||||
<Input value={details.qsl_via} onChange={(e) => onChange({ qsl_via: e.target.value })} />
|
<Input value={details.qsl_via} onChange={(e) => onChange({ qsl_via: e.target.value })} />
|
||||||
</Field>
|
</Field>
|
||||||
|
<Field label={t('detp.qslMessage')} span={5}>
|
||||||
|
<Input value={details.qsl_msg} onChange={(e) => onChange({ qsl_msg: e.target.value })} />
|
||||||
|
</Field>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user