7ace2cc602
Backend (Go 1.25 / Wails v2): - QSO storage on SQLite (modernc) with embedded migrations (0001..0005) - Streaming ADIF import (batch insert) + WorkedBefore per callsign and DXCC - Callsign lookup with QRZ.com + HamQTH providers (primary/failsafe routing) and SQLite-backed TTL cache - DXCC resolver from cty.dat (auto-download, longest-prefix-match) - Multi-profile operator identities (home/portable/SOTA/contest) — every QSO stamps MY_* from the active profile - CAT control via OmniRig COM on a single OS-locked goroutine, with bidirectional sync (freq/mode/band/split/VFOs) and Rig1/Rig2 hot-swap - Settings store (key/value), CAT debug log at %APPDATA%/HamLog/cat.log Frontend (React 18 + TypeScript + Tailwind v4 + shadcn-style): - Single-row entry strip with CAT-aware band/mode/freq, RST, Start/End UTC, per-field locks (band/mode/freq/start/end) for backdated QSOs - Topbar: live freq (MHz.kHz.Hz dotted), live UTC, band/mode/SPLIT badges, CAT pill with rig selector and clickable Azimuth pill (rotor TODO) - Settings tree: Profiles (Log4OM-style manager), Station Information (edits the active profile), unified Callsign Lookup with Test buttons, Bands/Modes lists, CAT - Worked-before matrix (band × mode × class) with new-DXCC highlighting - ADIF import from menu + Maintenance > Refresh cty.dat Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
82 lines
4.1 KiB
SQL
82 lines
4.1 KiB
SQL
-- Expand the QSO table to cover the rest of the common ADIF fields.
|
|
-- SQLite ALTER TABLE ADD COLUMN is metadata-only, so this is fast even on
|
|
-- large logbooks. Anything not promoted to a column lives in extras_json.
|
|
|
|
-- --- Times / frequencies / mode ---
|
|
ALTER TABLE qso ADD COLUMN qso_date_off TEXT; -- ISO UTC end datetime
|
|
ALTER TABLE qso ADD COLUMN freq_rx_hz INTEGER; -- RX frequency for split operation
|
|
ALTER TABLE qso ADD COLUMN band_rx TEXT;
|
|
ALTER TABLE qso ADD COLUMN submode TEXT; -- USB, LSB, USB-DATA, ...
|
|
|
|
-- --- Contacted station extras ---
|
|
ALTER TABLE qso ADD COLUMN state TEXT; -- US state, JA prefecture, etc.
|
|
ALTER TABLE qso ADD COLUMN cnty TEXT;
|
|
ALTER TABLE qso ADD COLUMN address TEXT;
|
|
ALTER TABLE qso ADD COLUMN email TEXT;
|
|
ALTER TABLE qso ADD COLUMN web TEXT;
|
|
ALTER TABLE qso ADD COLUMN age INTEGER;
|
|
ALTER TABLE qso ADD COLUMN lat REAL;
|
|
ALTER TABLE qso ADD COLUMN lon REAL;
|
|
ALTER TABLE qso ADD COLUMN gridsquare_ext TEXT; -- 8/10-char extension
|
|
ALTER TABLE qso ADD COLUMN vucc_grids TEXT;
|
|
ALTER TABLE qso ADD COLUMN rig TEXT; -- contacted station's rig
|
|
ALTER TABLE qso ADD COLUMN ant TEXT; -- contacted station's antenna
|
|
|
|
-- --- QSL bureau / direct / LoTW / eQSL / Clublog / HRDLog ---
|
|
ALTER TABLE qso ADD COLUMN qsl_via TEXT;
|
|
ALTER TABLE qso ADD COLUMN qsl_msg TEXT;
|
|
ALTER TABLE qso ADD COLUMN qslmsg_rcvd TEXT;
|
|
ALTER TABLE qso ADD COLUMN qsl_sent_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN qsl_rcvd_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN lotw_sent_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN lotw_rcvd_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN eqsl_sent_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN eqsl_rcvd_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN clublog_qso_upload_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN clublog_qso_upload_status TEXT;
|
|
ALTER TABLE qso ADD COLUMN hrdlog_qso_upload_date TEXT;
|
|
ALTER TABLE qso ADD COLUMN hrdlog_qso_upload_status TEXT;
|
|
|
|
-- --- Contest ---
|
|
ALTER TABLE qso ADD COLUMN contest_id TEXT;
|
|
ALTER TABLE qso ADD COLUMN srx INTEGER;
|
|
ALTER TABLE qso ADD COLUMN stx INTEGER;
|
|
ALTER TABLE qso ADD COLUMN srx_string TEXT;
|
|
ALTER TABLE qso ADD COLUMN stx_string TEXT;
|
|
ALTER TABLE qso ADD COLUMN check_field TEXT; -- ADIF CHECK (reserved word in SQL)
|
|
ALTER TABLE qso ADD COLUMN precedence TEXT;
|
|
ALTER TABLE qso ADD COLUMN arrl_sect TEXT;
|
|
|
|
-- --- Satellite / propagation ---
|
|
ALTER TABLE qso ADD COLUMN prop_mode TEXT;
|
|
ALTER TABLE qso ADD COLUMN sat_name TEXT;
|
|
ALTER TABLE qso ADD COLUMN sat_mode TEXT;
|
|
ALTER TABLE qso ADD COLUMN ant_az REAL;
|
|
ALTER TABLE qso ADD COLUMN ant_el REAL;
|
|
ALTER TABLE qso ADD COLUMN ant_path TEXT;
|
|
|
|
-- --- My station extras (per-QSO overrides of the active profile) ---
|
|
ALTER TABLE qso ADD COLUMN my_state TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_cnty TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_iota TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_dxcc INTEGER;
|
|
ALTER TABLE qso ADD COLUMN my_cq_zone INTEGER;
|
|
ALTER TABLE qso ADD COLUMN my_itu_zone INTEGER;
|
|
ALTER TABLE qso ADD COLUMN my_lat REAL;
|
|
ALTER TABLE qso ADD COLUMN my_lon REAL;
|
|
ALTER TABLE qso ADD COLUMN my_street TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_city TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_postal_code TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_rig TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_antenna TEXT;
|
|
ALTER TABLE qso ADD COLUMN my_gridsquare_ext TEXT;
|
|
|
|
-- --- Catch-all for ADIF fields we don't promote to columns ---
|
|
-- JSON object: { "FIELD_NAME": "value", ... } (keys uppercase as in ADIF).
|
|
ALTER TABLE qso ADD COLUMN extras_json TEXT;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_qso_state ON qso(state);
|
|
CREATE INDEX IF NOT EXISTS idx_qso_contest_id ON qso(contest_id);
|
|
CREATE INDEX IF NOT EXISTS idx_qso_sat_name ON qso(sat_name);
|
|
CREATE INDEX IF NOT EXISTS idx_qso_prop_mode ON qso(prop_mode);
|