From cd557acf81f600f549989d998f691e7ff5d8fc4d Mon Sep 17 00:00:00 2001 From: rouggy Date: Sun, 23 Aug 2026 12:46:29 +0200 Subject: [PATCH] feat(hamlog): send to HAMLOG.online from the right-click menu The upload targets in the QSO context menu gain HAMLOG.online, so a selection goes there the same way it goes to QRZ or LoTW. The confirmation toast now names the service from a map rather than a chain of ternaries that stopped after three: hrdlog, eqsl and hamlog were echoed as their internal ids, which is not what the operator clicked on. --- changelog.json | 6 ++++-- frontend/src/App.tsx | 8 +++++++- frontend/src/components/QSOContextMenu.tsx | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/changelog.json b/changelog.json index 5cfb740..6d64f2c 100644 --- a/changelog.json +++ b/changelog.json @@ -8,7 +8,8 @@ "HAMLOG.online is also a confirmation source for awards, alongside LoTW, QSL, eQSL and QRZ.com — tick it under Confirmed, under Validated, or both.", "A rig whose serial port is refused now says who is likely holding it — OmniRig stays resident and keeps the port of the rig configured in it, which is what a native backend then never gets. \"Serial port busy\" alone named nobody.", "The row colours in Appearance can be scoped to HAMLOG.online as well, alongside paper, LoTW, eQSL and QRZ.com.", - "HAMLOG.online appears in the QSL Manager too: pick it to see every QSO never sent there and upload the backlog in one go. A contact already sent carries the date it went, so a second sweep does not send it twice." + "HAMLOG.online appears in the QSL Manager too: pick it to see every QSO never sent there and upload the backlog in one go. A contact already sent carries the date it went, so a second sweep does not send it twice.", + "Right-clicking QSOs offers HAMLOG.online among the upload targets, and the toast names each service properly instead of echoing its internal id." ], "fr": [ "Yaesu : une ligne ANT dans le panneau du poste sélectionne la prise d'antenne, et le choix est mémorisé pour la bande sur laquelle il a été fait — on change de bande, l'antenne suit. Aucune page à configurer : choisir l'antenne une fois sur une bande le dit très bien. Les postes à une seule prise n'affichent jamais la ligne.", @@ -16,7 +17,8 @@ "HAMLOG.online est aussi une source de confirmation pour les diplômes, aux côtés de LoTW, QSL, eQSL et QRZ.com — à cocher dans Confirmé, dans Validé, ou les deux.", "Un poste dont le port série est refusé indique maintenant qui le détient vraisemblablement — OmniRig reste résident et garde le port de la radio configurée chez lui, que le backend natif n'obtient alors jamais. « Serial port busy » ne désignait personne.", "Les couleurs de lignes dans Apparence peuvent aussi être limitées à HAMLOG.online, aux côtés du papier, de LoTW, d'eQSL et de QRZ.com.", - "HAMLOG.online figure aussi dans le gestionnaire QSL : on le choisit pour voir tous les QSO jamais envoyés là-bas et expédier l'arriéré d'un coup. Un contact déjà envoyé porte la date de son départ, donc un second passage ne le renvoie pas." + "HAMLOG.online figure aussi dans le gestionnaire QSL : on le choisit pour voir tous les QSO jamais envoyés là-bas et expédier l'arriéré d'un coup. Un contact déjà envoyé porte la date de son départ, donc un second passage ne le renvoie pas.", + "Le clic droit sur des QSO propose HAMLOG.online parmi les destinations d'envoi, et la notification nomme correctement chaque service au lieu d'afficher son identifiant interne." ] }, { diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 037fabd..21a8683 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -4203,7 +4203,13 @@ export default function App() { // background; qslmgr:done refreshes the grid when finished. async function bulkSendTo(service: string, ids: number[]) { if (ids.length === 0) return; - const label = service === 'qrz' ? 'QRZ.com' : service === 'clublog' ? 'Club Log' : service === 'lotw' ? 'LoTW' : service; + // Named rather than echoed: an operator who picked a menu entry should see + // the same words back, not the internal id. + const LABELS: Record = { + qrz: 'QRZ.com', clublog: 'Club Log', lotw: 'LoTW', + hrdlog: 'HRDLog.net', eqsl: 'eQSL.cc', hamlog: 'HAMLOG.online', + }; + const label = LABELS[service] ?? service; showToast(`Uploading ${ids.length} QSO${ids.length > 1 ? 's' : ''} to ${label}…`); try { await UploadQSOsManual(service, ids as any); } catch (e: any) { setError(String(e?.message ?? e)); } diff --git a/frontend/src/components/QSOContextMenu.tsx b/frontend/src/components/QSOContextMenu.tsx index 993b6bc..b63979c 100644 --- a/frontend/src/components/QSOContextMenu.tsx +++ b/frontend/src/components/QSOContextMenu.tsx @@ -31,6 +31,7 @@ const UPLOAD_TARGETS: { service: string; name: string }[] = [ { service: 'hrdlog', name: 'HRDLog.net' }, { service: 'eqsl', name: 'eQSL.cc' }, { service: 'lotw', name: 'LoTW' }, + { service: 'hamlog', name: 'HAMLOG.online' }, ]; // Lightweight right-click menu for the QSO grids. AG Grid's native context