feat(watchlist): header counters, mode filter — and the alert checks worked FIRST
DXHunter's header row, ported: Watchlist / Active / Needed counts up front and the All-Modes select beside the other filters (DIGI matches the digital class, SSB folds USB/LSB). Counters, card lists and the Active/Needed-only filters all read the same mode-filtered view, so the numbers add up to what is on screen. And the notify alert now asks the SAME worked-slot question the tab asks — before making a sound. It used to fire on the raw spot while the tab's verdict arrived on a debounce, so the bell rang for a slot that showed Worked a moment later. Judged in the backend at emit time: exact slot for named modes, digital class for generic DATA, today-only for contest entries.
This commit is contained in:
@@ -234,3 +234,15 @@ func lastSeenLabel(t time.Time) string {
|
||||
return fmt.Sprintf("%dd ago", int(d.Hours()/24))
|
||||
}
|
||||
}
|
||||
|
||||
// Get returns one entry by its exact name — the alert path needs its contest
|
||||
// flag after MarkSeen named it.
|
||||
func (s *Store) Get(callsign string) (Entry, bool) {
|
||||
s.mu.RLock()
|
||||
defer s.mu.RUnlock()
|
||||
e, ok := s.entries[strings.ToUpper(strings.TrimSpace(callsign))]
|
||||
if !ok {
|
||||
return Entry{}, false
|
||||
}
|
||||
return *e, true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user