Skip to content

QRZCallEU: Add QRZCALL.EU callbook and QSO upload#1042

Open
Ron6519 wants to merge 1 commit into
foldynl:masterfrom
Ron6519:feature/qrzcalleu
Open

QRZCallEU: Add QRZCALL.EU callbook and QSO upload#1042
Ron6519 wants to merge 1 commit into
foldynl:masterfrom
Ron6519:feature/qrzcalleu

Conversation

@Ron6519
Copy link
Copy Markdown

@Ron6519 Ron6519 commented May 20, 2026

What this adds

QRZCALL.EU as a new integration in QLog —
(a) a callbook lookup provider, and (b) a QSO upload target —
mirroring the existing QRZ.com provider (service/qrzcom/QRZ.*).

QRZCALL.EU exposes QRZ-compatible endpoints, so this is a close mirror of
QRZ.com both structurally and on the wire:

Function Endpoint
Callbook GET https://api.qrzcall.eu/v1/pub/callsign_xml.php?callsign=… with Authorization: Bearer pat_…
QSO upload POST https://api.qrzcall.eu/v1/pub/logbook_api.phpKEY=pat_…&ACTION=INSERT&OPTION=REPLACE&ADIF=…

A single QRZCALL.EU Personal Access Token (pat_…) authenticates both —
no separate callbook vs logbook credentials. Generated by the user on
qrzcall.eu (My Profile → Account → API Tokens). Requires a Data or Extra
subscription.

Files

  • New: service/qrzcalleu/QRZCallEU.{h,cpp}QRZCallEUBase
    (single-PAT credential), QRZCallEUCallbook, QRZCallEUUploader.
  • New: res/sql/migration_039.sqlqrzcalleu_qso_upload_status /
    qrzcalleu_qso_upload_date columns on contacts.
  • Edited: QLog.pro, res/res.qrc, core/CallbookManager.cpp,
    core/Migration.{h,cpp} (bumps latestVersion to 39; extends the
    update_contacts_upload_status trigger), core/LogParam.{h,cpp}
    (the Immediately Upload flag), ui/MainWindow.{h,cpp} (a qrzcalleuRT
    instance wired to contactAdded / contactUpdated),
    ui/SettingsDialog.{ui,cpp} (callbook combo + new Sync & QSL →
    QRZCALL.EU
    sub-tab with API Token + Immediately Upload checkbox),
    ui/UploadQSODialog.{ui,h,cpp} (new QRZCALLEUID service in the
    manual Upload dialog).

Settings UX

The PAT lives on a new Sync & QSL → QRZCALL.EU sub-tab, alongside
ClubLog / eQSL / HRDLog / LoTW / QRZ.com / Wavelog. The Callbook tab shows
a note pointing there (single credential, single source of truth).

Upload modes

  • Manual — via the Service → Upload dialog, just like QRZ.com.
  • Immediately Upload (optional toggle) — mirrors ClubLog's real-time
    uploader: a logged QSO is sent instantly, an edit re-sends it with
    OPTION=REPLACE. Delete is not wired (the QRZCALL.EU endpoint has no
    DELETE action — only INSERT / REPLACE / STATUS).

A duplicate INSERT (server returns RESULT=FAIL&REASON=…duplicate…) is
treated as upload success so re-uploads don't block the queue.

Testing

  • qmake6 && make clean on Ubuntu 24.04 + Qt 6 (build verified in a
    container) and on macOS + Qt 6.11.
  • QLog test suite (tests/tests.pro): 2 420 / 2 420 passing, including
    MigrationTest which now exercises migration_001 … migration_039
    our new migration applies cleanly through QLog's own test framework.
  • End-to-end manual verification (in the container):
    • DB migrates to schema version 39; both new columns + trigger created.
    • Settings → Callbook → QRZCALL.EU selectable; Sync & QSL → QRZCALL.EU
      holds the PAT + Immediately Upload toggle.
    • Callbook lookup auto-fills name / QTH / grid / DXCC / zones (XML parsed
      via QXmlStreamReader, reusing the QRZ field-mapping block verbatim).
    • Manual upload returns RESULT=OK&COUNT=1&LOGID=…; QSO marked 'Y'.
    • Edit + re-upload → status flips Y → M via the trigger, re-uploads
      with OPTION=REPLACE.
    • Immediately Upload toggle → logging a QSO pushes it to QRZCALL.EU
      instantly with the DB status written by the real-time path.
  • Duplicate handling and bad-PAT (RESULT=AUTH) paths both verified.

Conventions

  • Squashed to one commit on top of master.
  • Commit message: Module_Name: Brief summary with body lines ≤ 72 chars.
  • Code style mirrors service/qrzcom/QRZ.* (braces on their own lines,
    MODULE_IDENTIFICATION + FCT_IDENTIFICATION).
  • No server-side QRZCALL.EU change needed — endpoints are already live.

Happy to adjust to taste — thanks for considering!

Add QRZCALL.EU as a callbook lookup provider and a QSO upload
target, mirroring the QRZ.com provider in service/qrzcom. A single
QRZCALL.EU Personal Access Token (pat_...) authenticates both;
it is entered on a new Sync & QSL -> QRZCALL.EU sub-tab.

Adds DB migration 039 with the qrzcalleu_qso_upload_status and
qrzcalleu_qso_upload_date columns on contacts, and extends the
update_contacts_upload_status trigger so an edited uploaded QSO
flips back to 'M' for the next manual re-upload.

Upload supports both the manual UploadQSODialog and an optional
"Immediately Upload" toggle (mirrors ClubLog's real-time path,
insert + update; QRZCALL.EU has no DELETE action so delete is
not wired). Duplicate INSERTs are treated as success.

QLog test suite passes 2420/2420, including migration_001..039.
@Ron6519
Copy link
Copy Markdown
Author

Ron6519 commented May 20, 2026

1-settings-callbook-note 3-settings-syncqsl-qrzcalleu 4-callbook-lookup-PA4R 5-upload-dialog-qrzcalleu 6-upload-success

@foldynl
Copy link
Copy Markdown
Owner

foldynl commented May 21, 2026

Hello,
thank you for your PR, unfortunately, I can see several obstacles that prevent me from implementing this in QLog

I can fix the implementation-related issues; that is not a problem. However, I also see other obstacles, for example:

  • Upload - ADIF does not officially support qrzcall.eu. This means it is not possible to transfer QSOs between applications without losing information about the state of upload
  • Upload - it is not clear how the API behaves in the case of duplicate QSOs.
  • Online upload - no public API documentation has been published, so I may be wrong, but it seems that delete operations are probably not supported.

This leads me to use only the callbook part of your PR. Unfortunately, when I tested the callbook data and verified the relevance of the returned data, the data was returned, but it did not match reality. For me, this is a signal that I cannot include even the callbook part in QLog.

Please keep this open. Once the service stabilizes, I will be happy to use it after the necessary changes in the source code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants