feat(dxped): the announced DX, judged against your own log
A DXpeditions tab holding the two feeds the DX world announces itself on: NG3K's ADXO (structured — dates, entity, calls, bands, modes, QSL route) and DX-World's headlines. What a logger can say that a news reader cannot is whether the operation is worth chasing, so every announcement is put through the SAME verdict the cluster paints on a spot — one badge, strongest wins, dimmed when the need is only a missing QSL — with an 'only what I need' filter. One click watches every callsign of an operation; the news headlines are mined for callsigns so they can be watched the same way. Parsers ported from DXHunter's and pinned with table tests against real feed text: the 'as PJ2/W2APF' mining, the DXCC-prefix-first normalisation without which no spot ever matches, both ADXO date forms, and the '160-6m' span whose unit is written once (DXHunter read that as 6m alone and lost the low end). Watchlist membership now announces itself app-wide, on the same card as a new version: the bindings emit watchlist:changed, so a call added from the cluster or this tab is confirmed where the operator is actually looking — the panel's own inline message never was.
This commit is contained in:
@@ -50,7 +50,7 @@ const en: Dict = {
|
||||
'wl.totalSpots': '{n} spots', 'wl.toggleContest': 'Contest entry: judged per UTC day',
|
||||
'wl.notifyOn': 'Alert me when this station is spotted', 'wl.notifyOff': 'Stop alerting for this station',
|
||||
'wl.remove': 'Remove', 'wl.removed': '{call} removed from the watchlist.', 'wl.noSpots': 'No live spots',
|
||||
'wl.newDxcc': 'NEW DXCC', 'wl.worked': 'Worked', 'wl.needed': 'Needed!', 'wl.todayOk': 'Today ✓', 'wl.workToday': 'Work today!',
|
||||
'wl.newDxcc': 'NEW DXCC', 'dxp.tab': 'DXpeditions', 'dxp.announced': 'Announced operations', 'dxp.news': 'DX news', 'dxp.source': 'from {name}', 'dxp.neededOnly': 'Only what I need', 'dxp.refresh': 'Refresh', 'dxp.none': 'No announced operation — or the feed could not be read.', 'dxp.noNews': 'No news.', 'dxp.onAir': 'ON AIR', 'dxp.watch': 'Watch', 'dxp.watched': 'Watched', 'dxp.watchTip': 'Add to the watchlist', 'dxp.open': 'Open', 'wlnote.added': '{call} added to the watchlist', 'wlnote.removed': '{call} removed from the watchlist', 'wlnote.hint': 'Its spots are highlighted in the cluster.', 'wl.worked': 'Worked', 'wl.needed': 'Needed!', 'wl.todayOk': 'Today ✓', 'wl.workToday': 'Work today!',
|
||||
'wl.spotTip': 'Click: fill the callsign · double-click: tune and work',
|
||||
'tools.net': 'NET Control', 'tools.alerts': 'Alert management…', 'tools.contest': 'Contest mode',
|
||||
'alert.tuneHint': 'Click to tune the rig to this spot (freq + mode) and fill the call', 'alert.dismiss': 'Dismiss', 'alert.pending': '{n} recent spot alert(s) — click to view', 'alert.noneShort': 'No recent alerts', 'alert.recent': 'Recent alerts', 'alert.clear': 'Clear',
|
||||
@@ -574,7 +574,7 @@ const fr: Dict = {
|
||||
'wl.totalSpots': '{n} spots', 'wl.toggleContest': 'Entrée contest : jugée par jour UTC',
|
||||
'wl.notifyOn': "M'alerter quand cette station est spottée", 'wl.notifyOff': "Ne plus alerter pour cette station",
|
||||
'wl.remove': 'Supprimer', 'wl.removed': '{call} retiré de la watchlist.', 'wl.noSpots': 'Aucun spot en cours',
|
||||
'wl.newDxcc': 'NOUV DXCC', 'wl.worked': 'Contacté', 'wl.needed': 'Manquant !', 'wl.todayOk': "Auj. ✓", 'wl.workToday': "À faire auj. !",
|
||||
'wl.newDxcc': 'NOUV DXCC', 'dxp.tab': 'DXpéditions', 'dxp.announced': 'Opérations annoncées', 'dxp.news': 'Actualités DX', 'dxp.source': 'depuis {name}', 'dxp.neededOnly': 'Seulement ce qu’il me manque', 'dxp.refresh': 'Actualiser', 'dxp.none': 'Aucune opération annoncée — ou le flux n’a pas pu être lu.', 'dxp.noNews': 'Aucune actualité.', 'dxp.onAir': 'EN COURS', 'dxp.watch': 'Surveiller', 'dxp.watched': 'Surveillé', 'dxp.watchTip': 'Ajouter à la watchlist', 'dxp.open': 'Ouvrir', 'wlnote.added': '{call} ajouté à la watchlist', 'wlnote.removed': '{call} retiré de la watchlist', 'wlnote.hint': 'Ses spots sont mis en évidence dans le cluster.', 'wl.worked': 'Contacté', 'wl.needed': 'Manquant !', 'wl.todayOk': "Auj. ✓", 'wl.workToday': "À faire auj. !",
|
||||
'wl.spotTip': "Clic : remplir l'indicatif · double-clic : régler la radio et travailler",
|
||||
'tools.net': 'Contrôle de NET', 'tools.alerts': 'Gestion des alertes…', 'tools.contest': 'Mode contest',
|
||||
'alert.tuneHint': 'Cliquer pour accorder la radio sur ce spot (fréq + mode) et remplir l\'indicatif', 'alert.dismiss': 'Fermer', 'alert.pending': '{n} alerte(s) de spot récente(s) — cliquer pour voir', 'alert.noneShort': 'Aucune alerte récente', 'alert.recent': 'Alertes récentes', 'alert.clear': 'Effacer',
|
||||
|
||||
Reference in New Issue
Block a user