fix(hamqth): the whole-log upload reports itself
It ran into a panel nobody was showing: the button never set showLog, so the tab sat on 'Pick a service' while a 25000-QSO upload came and went. Now it opens the console like every other action here, and the console has something to say: the callsign it is scoped to and how many of the logbook's QSOs that leaves (a two-callsign database sends one of them, which is the whole explanation for a count that looks short), the exported record count and file size, and HamQTH's own reply. Plus the two facts that make the site's own number readable: HamQTH accepts the file and imports it in the BACKGROUND, and it reports what it made of each record by e-mail — never in the reply we get. An operator comparing counts a minute later is not looking at a failure.
This commit is contained in:
@@ -11531,6 +11531,9 @@ func (a *App) runFullLogHamQTH(cfg extsvc.ServiceConfig) {
|
|||||||
_ = tmp.Close()
|
_ = tmp.Close()
|
||||||
defer os.Remove(path)
|
defer os.Remove(path)
|
||||||
|
|
||||||
|
if owner != "" {
|
||||||
|
emit("Station callsign: " + owner + " — QSOs logged under another of your callsigns are NOT included.")
|
||||||
|
}
|
||||||
emit("Exporting the log…")
|
emit("Exporting the log…")
|
||||||
var res adif.ExportResult
|
var res adif.ExportResult
|
||||||
if owner != "" {
|
if owner != "" {
|
||||||
@@ -11555,7 +11558,12 @@ func (a *App) runFullLogHamQTH(cfg extsvc.ServiceConfig) {
|
|||||||
done(0)
|
done(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
emit(fmt.Sprintf("Uploading %d QSO(s) to HamQTH — this REPLACES the log there…", res.Count))
|
total, _ := a.qso.Count(ctx)
|
||||||
|
if total > 0 && int64(res.Count) != total {
|
||||||
|
emit(fmt.Sprintf("%d of %d QSOs in this logbook match %s and will be sent.", res.Count, total, owner))
|
||||||
|
}
|
||||||
|
emit(fmt.Sprintf("Exported %d QSO(s), %d KB of ADIF.", res.Count, res.SizeKB))
|
||||||
|
emit(fmt.Sprintf("Uploading to HamQTH — this REPLACES the log there…"))
|
||||||
|
|
||||||
up, uerr := extsvc.UploadHamQTHFullLog(ctx, nil, cfg, string(data))
|
up, uerr := extsvc.UploadHamQTHFullLog(ctx, nil, cfg, string(data))
|
||||||
if uerr != nil || !up.OK {
|
if uerr != nil || !up.OK {
|
||||||
@@ -11568,8 +11576,15 @@ func (a *App) runFullLogHamQTH(cfg extsvc.ServiceConfig) {
|
|||||||
done(0)
|
done(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
emit("HamQTH accepted the log: " + up.Message)
|
emit("HamQTH replied: " + up.Message)
|
||||||
emit("HamQTH imports it in the background — errors in the ADIF are e-mailed to you, not reported here.")
|
// Said plainly, because the numbers will not agree for a while and an
|
||||||
|
// operator comparing them straight away has every reason to think the
|
||||||
|
// upload failed: HamQTH ACCEPTS the file here and imports it later, at its
|
||||||
|
// own pace. What it makes of each record is reported by E-MAIL, never in
|
||||||
|
// this reply — so a count that stops short means the site rejected records,
|
||||||
|
// and the mail says which.
|
||||||
|
emit("Accepted — HamQTH imports the file in the BACKGROUND, so its QSO count will lag for a while.")
|
||||||
|
emit("If the count stops short, HamQTH e-mails the ADIF errors to your account address — this reply cannot carry them.")
|
||||||
|
|
||||||
// Everything is on HamQTH now, so nothing is still waiting to be sent. Only
|
// Everything is on HamQTH now, so nothing is still waiting to be sent. Only
|
||||||
// the rows that are not already stamped need writing.
|
// the rows that are not already stamped need writing.
|
||||||
|
|||||||
+4
-2
@@ -6,13 +6,15 @@
|
|||||||
"DX Cluster: a disconnected server keeps its pill, so it can be reconnected — disconnecting one used to make it vanish along with the only way back.",
|
"DX Cluster: a disconnected server keeps its pill, so it can be reconnected — disconnecting one used to make it vanish along with the only way back.",
|
||||||
"HamQTH: an “Upload the whole log” button in the QSL Manager — one file instead of one request per QSO, so a first sync takes seconds rather than the better part of an hour. It REPLACES the log held on HamQTH (the site has no partial upload), so it asks first, is scoped to the callsign this profile uploads as, and compresses a large log to stay under the 20 MB limit.",
|
"HamQTH: an “Upload the whole log” button in the QSL Manager — one file instead of one request per QSO, so a first sync takes seconds rather than the better part of an hour. It REPLACES the log held on HamQTH (the site has no partial upload), so it asks first, is scoped to the callsign this profile uploads as, and compresses a large log to stay under the 20 MB limit.",
|
||||||
"Outbound ADIF (forwarding a logged QSO to another logger such as Log4OM): the receive side is filled in when the contact was not split, so BAND_RX and FREQ_RX are present. The importer already did this; the logging paths did not, so what a QSO carried depended on which door it came in through.",
|
"Outbound ADIF (forwarding a logged QSO to another logger such as Log4OM): the receive side is filled in when the contact was not split, so BAND_RX and FREQ_RX are present. The importer already did this; the logging paths did not, so what a QSO carried depended on which door it came in through.",
|
||||||
"HamQTH joins the places the other services already were: two Recent-QSOs columns (sent status and date), the QSO filter, and bulk edit — the last one so a log uploaded to HamQTH by hand can be marked as sent instead of being offered for upload all over again."
|
"HamQTH joins the places the other services already were: two Recent-QSOs columns (sent status and date), the QSO filter, and bulk edit — the last one so a log uploaded to HamQTH by hand can be marked as sent instead of being offered for upload all over again.",
|
||||||
|
"HamQTH whole-log upload: it reports itself in the console like every other action — the callsign it is scoped to, how many of the logbook’s QSOs that leaves, the file size, and HamQTH’s own reply — and says plainly that HamQTH imports the file in the background and e-mails any ADIF errors, so a site count that lags or stops short is explained rather than mysterious."
|
||||||
],
|
],
|
||||||
"fr": [
|
"fr": [
|
||||||
"DX Cluster : un serveur déconnecté garde sa pastille et peut donc être reconnecté — le déconnecter le faisait disparaître avec le seul moyen d’y revenir.",
|
"DX Cluster : un serveur déconnecté garde sa pastille et peut donc être reconnecté — le déconnecter le faisait disparaître avec le seul moyen d’y revenir.",
|
||||||
"HamQTH : un bouton « Envoyer tout le log » dans le QSL Manager — un seul fichier au lieu d’une requête par QSO, une première synchro passe de près d’une heure à quelques secondes. Il REMPLACE le log stocké sur HamQTH (le site n’a pas d’envoi partiel) : il demande donc confirmation, se limite à l’indicatif du profil et compresse un gros log pour rester sous la limite de 20 Mo.",
|
"HamQTH : un bouton « Envoyer tout le log » dans le QSL Manager — un seul fichier au lieu d’une requête par QSO, une première synchro passe de près d’une heure à quelques secondes. Il REMPLACE le log stocké sur HamQTH (le site n’a pas d’envoi partiel) : il demande donc confirmation, se limite à l’indicatif du profil et compresse un gros log pour rester sous la limite de 20 Mo.",
|
||||||
"ADIF sortant (transfert d’un QSO vers un autre log, Log4OM par exemple) : le côté réception est renseigné quand le contact n’était pas en split, donc BAND_RX et FREQ_RX sont présents. L’import le faisait déjà, pas les chemins de log — ce qu’un QSO transportait dépendait donc de la porte par laquelle il était entré.",
|
"ADIF sortant (transfert d’un QSO vers un autre log, Log4OM par exemple) : le côté réception est renseigné quand le contact n’était pas en split, donc BAND_RX et FREQ_RX sont présents. L’import le faisait déjà, pas les chemins de log — ce qu’un QSO transportait dépendait donc de la porte par laquelle il était entré.",
|
||||||
"HamQTH rejoint les endroits où les autres services étaient déjà : deux colonnes dans les QSO récents (statut et date d’envoi), le filtre de QSO et l’édition groupée — cette dernière pour qu’un log envoyé à la main sur HamQTH puisse être marqué comme envoyé au lieu d’être reproposé à l’envoi."
|
"HamQTH rejoint les endroits où les autres services étaient déjà : deux colonnes dans les QSO récents (statut et date d’envoi), le filtre de QSO et l’édition groupée — cette dernière pour qu’un log envoyé à la main sur HamQTH puisse être marqué comme envoyé au lieu d’être reproposé à l’envoi.",
|
||||||
|
"Envoi du log complet HamQTH : il rend compte dans la console comme toutes les autres actions — l’indicatif retenu, combien de QSO du journal cela représente, la taille du fichier et la réponse de HamQTH — et indique clairement que HamQTH importe le fichier en arrière-plan et envoie les erreurs ADIF par e-mail : un compteur en retard ou incomplet sur le site est ainsi expliqué au lieu d’être mystérieux."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -732,8 +732,10 @@ export function QSLManagerPanel({ onEditQSO, actions, paperRequest }: {
|
|||||||
title={t('qslm.hqFullTitle')}
|
title={t('qslm.hqFullTitle')}
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
if (!window.confirm(t('qslm.hqFullConfirm'))) return;
|
if (!window.confirm(t('qslm.hqFullConfirm'))) return;
|
||||||
setBusy(true);
|
// Same three lines every other action here runs: without
|
||||||
setLogLines([]);
|
// setShowLog the whole upload reported itself into a panel
|
||||||
|
// nobody was showing, and the tab sat on "Pick a service".
|
||||||
|
setLogLines([]); setBusy(true); setLogAction('upload'); setShowLog(true);
|
||||||
try { await UploadFullLogHamQTH(); }
|
try { await UploadFullLogHamQTH(); }
|
||||||
catch (e: any) { setBusy(false); setLogLines((l) => [...l, String(e?.message ?? e)]); }
|
catch (e: any) { setBusy(false); setLogLines((l) => [...l, String(e?.message ?? e)]); }
|
||||||
}}>
|
}}>
|
||||||
|
|||||||
Reference in New Issue
Block a user