feat(hamqth): QSO upload to the HamQTH logbook — the 8th external service

qso_realtime.php with the account's callbook credentials (which the
external-services config falls back to when its own are blank), one ADIF
record per QSO, prg=OpsLog. HTTP status IS the answer: 200 saved, 400
rejected (a duplicate counts as delivered, like HRDLog's insert 0), 403
credentials. Sent-state lives in APP_OPSLOG_HAMQTH_SENT extras like
HAMLOG.online — ADIF names no HamQTH field. Auto-upload on log, on-close
batch, right-click Send to, QSL Manager backlog, and a Test button that
authenticates against the callbook login, which cannot touch the log.

Fixes a real mis-route on the way: manual 'Send to HAMLOG.online' had no
branch in runManualUpload and fell through to QRZ.com — the selection was
uploaded to the wrong service with the QRZ key. Both extras-stamped
services now have their own branch.
This commit is contained in:
2026-08-31 14:34:49 +02:00
parent 68f0d68980
commit 91569e12f4
13 changed files with 328 additions and 12 deletions
+2
View File
@@ -1522,6 +1522,7 @@ export namespace extsvc {
eqsl: ServiceConfig;
cloudlog: ServiceConfig;
hamlog: ServiceConfig;
hamqth: ServiceConfig;
delete_remote: boolean;
static createFrom(source: any = {}) {
@@ -1537,6 +1538,7 @@ export namespace extsvc {
this.eqsl = this.convertValues(source["eqsl"], ServiceConfig);
this.cloudlog = this.convertValues(source["cloudlog"], ServiceConfig);
this.hamlog = this.convertValues(source["hamlog"], ServiceConfig);
this.hamqth = this.convertValues(source["hamqth"], ServiceConfig);
this.delete_remote = source["delete_remote"];
}