feat(flex): send SmartSDR's spot priority; fix(chase): the same station on the same slot has nothing left to give
The panadapter has finite room: spots close in frequency are stacked behind a '+' and only one is drawn, chosen by PRIORITY — a parameter 'spot add' accepts and OpsLog never sent. So a new entity sat invisible behind three stations already in the log. DXHunter has sent it for years; the tiers here are the same idea in the operator's own words: the entity never worked (with my own callsign, for a multi-op), then band/mode/slot, then the reference hunts, then everything else. And a callsign already worked on this exact band and mode stops advertising a need. Working it again cannot turn a missing QSL into a confirmation — the QSO is already there — so shouting NEW DXCC over a station worked an hour ago only teaches an operator to distrust the colour. The need is real and stays on every OTHER station of the entity, which is where it can be answered. Applied on both paths out of the verdict, including the early one that leaves the loop first.
This commit is contained in:
@@ -9153,6 +9153,7 @@ func (a *App) clusterEventWorker() {
|
||||
FreqHz: s.FreqHz,
|
||||
Callsign: s.DXCall,
|
||||
Mode: mode,
|
||||
Priority: spotPriority(status),
|
||||
Comment: spotComment(s.Comment, s.Spotter, s.Country, status),
|
||||
Color: col.Text,
|
||||
BackgroundColor: col.Bg,
|
||||
@@ -14398,6 +14399,7 @@ func (a *App) consumeUDPEvents() {
|
||||
BackgroundColor: bgCol,
|
||||
Comment: spotComment(fmt.Sprintf("%s %+ddB", ev.Mode, ev.DecodeSNR), "", a.countryFor(ev.DecodeCall), status),
|
||||
LifetimeSec: secs,
|
||||
Priority: spotPriority(status),
|
||||
}:
|
||||
default:
|
||||
// Radio not keeping up: skip the spot rather than stall the
|
||||
@@ -21043,6 +21045,12 @@ func (a *App) ClusterSpotStatuses(spots []SpotQuery) []SpotStatus {
|
||||
if !worked {
|
||||
out[i].Status = "new"
|
||||
if _, ever := entities[dxccNum]; ever {
|
||||
// Worked, never confirmed — and if it was THIS station on THIS
|
||||
// slot, the need is not its to answer (see the rule below).
|
||||
if out[i].WorkedSlot {
|
||||
out[i].Status = "worked"
|
||||
continue
|
||||
}
|
||||
out[i].UnconfStatus = true
|
||||
}
|
||||
continue
|
||||
@@ -21079,6 +21087,21 @@ func (a *App) ClusterSpotStatuses(spots []SpotQuery) []SpotStatus {
|
||||
}
|
||||
}
|
||||
}
|
||||
// THIS station, already in the log on THIS slot, has nothing left to
|
||||
// give. Working it a second time on the same band and mode cannot make
|
||||
// the entity count: the QSO is already there and only the QSL is
|
||||
// missing, and a duplicate does not produce one. So the need is real —
|
||||
// it is simply not this station's to answer, and shouting NEW DXCC over
|
||||
// a callsign worked an hour ago is how an operator learns to distrust
|
||||
// the colour. Another station in the entity still carries the badge.
|
||||
//
|
||||
// Only for a need that IS a missing confirmation: a genuinely new
|
||||
// entity cannot co-exist with a worked callsign, so nothing real is
|
||||
// suppressed here.
|
||||
if out[i].UnconfStatus && out[i].WorkedSlot {
|
||||
out[i].Status = "worked"
|
||||
out[i].UnconfStatus = false
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user