Skip to content

v1.3.0 — Master Logbook Engine & Targeted Enrichment

Pre-release
Pre-release

Choose a tag to compare

@fact0real fact0real released this 09 Aug 19:39
· 143 commits to main since this release

YAAM (Yet Another ADIF Manager) has evolved from a lightweight ADIF viewer into a centralized Master Logbook Database Engine. This release introduces targeted multi-row enrichment, dual-cloud QSL synchronization with LoTW & QRZ, full historical log downloads, and crucial network sandbox fixes on macOS.


🌟 Key Highlights

  • Master Logbook Workspace Architecture: Automatically loads your callsign-specific master database on launch, isolating your primary logbook from temporary "Guest" logs.
  • Smart Merge & Deduplication: Prevents duplicate QSO records using a 5-part composite unique key (CALL + QSO_DATE + TIME + BAND + MODE).
  • Targeted Enrichment (Max 19 Rows): Select specific rows via checkboxes (capped at 19 rows per batch), enrich individual callsigns from the context menu, or cancel in-flight tasks instantly.
  • Dual Cloud QSL Sync: Simultaneously fetches incremental QSL confirmations from both ARRL LoTW and QRZ Logbook API.
  • Full Cloud History Importer: Downloads 100% of your historical QSOs from LoTW and seamlessly merges them into your Master Logbook.
  • macOS Sandbox SMTP Fix: Resolves curl Error 6 (Could not resolve host) inside the macOS Sandbox, sanitizes Google App Passwords, and provides a live debug terminal.
  • Direct QRZ Profile Link (QRZ_URL): Dynamically generates clickable profile links (https://www.qrz.com/db/CALLSIGN) that open directly in your default browser.

🛠️ Technical Changelog

🏗️ 1. Core Architecture & Persistence

  • Multi-Profile Support: Isolated database storage located at Application Support/YAAM/MasterLogs/MasterLogbook_\(callsign).adi.
  • Context-Aware Auto-Save: Implemented autoSaveActiveWorkspace for background persistence of cell edits, row deletions, and enrichment flags directly to the active file workspace.
  • Import Strategy Modal: Added a native NSAlert prompt upon opening new files offering "Merge into Master Log" or "Open as Guest Log".

🪄 2. Targeted Enrichment Engine

  • Delta Enrichment (APP_YAAM_ENRICHED): Flags processed records to skip re-fetching previously enriched callsigns, accelerating batch processing.
  • Multi-Row Selection Limit: Enforces a strict selection limit of 19 rows per batch with a native alert warning if exceeded.
  • Task Cancellation: Integrated stopEnrichment using Swift Concurrency's Task.cancel() for instant user-initiated cancellation.
  • Auto-Deselect: Automatically clears row checkmarks once enrichment completes to optimize UX.
  • Right-Click Context Menu: Added 🪄 Enrich Callsign 'CALL' to enrich single callsigns directly from the table grid.

🔄 3. Cloud Synchronization & APIs

  • QRZ Logbook API Integration: Fully implemented HTTP FETCH against QRZ's official Logbook API (https://logbook.qrz.com/api) with MODIFIEDSINCE timestamping.
  • Flexible Matching Engine: Enhanced cleanDate and cleanBand normalizers to reliably match mismatched ADIF fields between local records and server reports.
  • Full Cloud Importer: Rebuilt fetchAndManageCloudLogbook using qso_qsosince=1900-01-01 to pull 100% of historical QSOs from LoTW, complete with confirmation dialogs.

📧 4. Sandbox Networking & SMTP

  • Sandbox Environment Injection: Injected ProcessInfo.processInfo.environment into the child /usr/bin/curl process to grant DNS resolution access within the macOS Sandbox.
  • App Password Sanitizer: Automatically strips white space characters from 16-character Google App Passwords.
  • Sender Callsign Sanitization: Corrected the callsign resolver algorithm to prevent email addresses from populating template callsign placeholders.
  • Inline Debug Terminal: Added a live terminal log view to inspect connection handshakes and server response codes in case of SMTP failures.

🎨 5. UI/UX Enhancements

  • Deep Link Renderer: Dedicated rendering for the QRZ_URL column featuring a Safari icon, underline styling, and native browser launch via NSWorkspace.shared.open.
  • Dynamic Row Highlighting: Selected rows are highlighted with a distinct accent background color.
  • Status Bar Selection Counter: Real-time feedback in the bottom status bar displaying Selected: X / 19 Max.

🐛 Bug Fixes

  • 🔴 FIXED: Log data loss occurring after quitting and reopening the application.
  • 🔴 FIXED: curl Error 6 (Could not resolve host) during SMTP email dispatch inside the macOS Sandbox.
  • 🔴 FIXED: Station email address overriding callsign placeholders in email templates.
  • 🔴 FIXED: Sync QSLs button failing to update QRZ confirmations and displaying inaccurate confirmed counts.
  • 🔴 FIXED: Cloud Logbook button restricting downloads to only recent 30 QSLs rather than fetching full history.