Repository navigation
v1.3.0 — Master Logbook Engine & Targeted Enrichment
Pre-release
Pre-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
autoSaveActiveWorkspacefor background persistence of cell edits, row deletions, and enrichment flags directly to the active file workspace. - Import Strategy Modal: Added a native
NSAlertprompt 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
stopEnrichmentusing Swift Concurrency'sTask.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) withMODIFIEDSINCEtimestamping. - Flexible Matching Engine: Enhanced
cleanDateandcleanBandnormalizers to reliably match mismatched ADIF fields between local records and server reports. - Full Cloud Importer: Rebuilt
fetchAndManageCloudLogbookusingqso_qsosince=1900-01-01to pull 100% of historical QSOs from LoTW, complete with confirmation dialogs.
📧 4. Sandbox Networking & SMTP
- Sandbox Environment Injection: Injected
ProcessInfo.processInfo.environmentinto the child/usr/bin/curlprocess 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_URLcolumn featuring a Safari icon, underline styling, and native browser launch viaNSWorkspace.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 QSLsbutton failing to update QRZ confirmations and displaying inaccurate confirmed counts. - 🔴 FIXED:
Cloud Logbookbutton restricting downloads to only recent 30 QSLs rather than fetching full history.