Skip to content

v1.2.0 — Listen-only, attendance grid, fuzzy callsigns

Choose a tag to compare

@Xpiatio Xpiatio released this 17 May 23:55
· 145 commits to main since this release
49c5c10

Feature release on top of v1.1.0. Source-only — air-gapped users on v1.1.0 already have the bundled Voices/ and Models/ directories; pull the updated source over the top, or clone fresh and copy those two directories from your existing v1.1.0 install.

New features

  • Listen-only / RX-only safety toggle (#44) — checkable Listen only button (Alt+O) beside the Listen toggle on the strip above the chat. When checked, every TX path is short-circuited: Transmit, This is, Enter-to-send on the message box, the quick-message preset buttons, and the Ctrl+Return / Ctrl+I / Alt+1…Alt+9 global shortcuts all refuse to fire (the buttons grey out so the gate is visible). Microphone capture, transcription, callsign detection, attendance, and chat keep working normally. Defense-in-depth: each TX entry point re-checks the flag because the global shortcuts fire regardless of button state. Persists to config.json["listen_only"] so an operator who finishes a session in RX-only mode comes back up the same way.

  • Attendance dock (#43) — opt-in roll-call grid that logs every callsign detected during the current Listen session. Columns Callsign | Name | Location | GMRS | HAM — all resizable by dragging the header dividers, autofitting to content on each new detection. Unknown callsigns appear with only the Callsign column filled; the moment that callsign is added to (or already in) Contacts, the remaining columns auto-populate from the contact row. Insertion-order deduplicated — re-hearing a callsign within the same session doesn't add a second row. Resets on every Listen on→off transition so each session starts fresh, plus a manual Clear attendance button. Off by default — enable from View → Show attendance (Ctrl+Shift+A) or Settings → Configuration → Attendance grid (Alt+A). Persisted at config.json["attendance"]["enabled"]. GMRS only — disabled in FRS mode alongside every other callsign-dependent surface.

  • Opt-in fuzzy callsign matching (#42) — when Whisper mishears a single character of a callsign (WSLZ235 for WSLZ233, or WSIZ233 with an L/I swap), the chat can rewrite the near-miss to the canonical contact callsign so a single operator doesn't fragment into half a dozen near-duplicates. Match rules: same length, exactly one character differs, the differing characters are the same class (letter-for-letter or digit-for-digit), and unambiguous (two saved contacts equally close ⇒ leave alone). Affects chat display, callsign pill highlighting, and pending-pill suppression. Toggle mid-session retroactively rewrites near-misses on existing chat lines. Off by default — enable from Settings → Configuration → Fuzzy callsigns (Alt+U). Persisted at config.json["fuzzy_callsign"].

Bug fixes

  • Callsigns not recorded to attendance when utterance was abandoned — callsigns visible in the chat from partial transcripts were silently dropped from the attendance grid whenever the final segment never arrived. This happened when the operator pressed PTT mid-reception, toggled Listen off while a transmission was still in progress, or a new utterance started before the previous one completed. The accumulated text is now flushed through callsign detection in all three cases so attendance always matches what the chat shows.

  • Chat display background not following dark mode (#46) — once any setStyleSheet call is made on a QTextEdit, Qt ignores the QPalette.Base role for the background. The padding-only stylesheet set at init was enough to break palette inheritance, leaving the conversation log stuck on a white background when dark mode was active. The stylesheet now includes an explicit background-color that is re-applied on every theme toggle.

Improvements

  • Attendance grid columns resizable and autofit (#47) — all five columns are now Interactive (draggable dividers). Columns autofit to their content each time a new callsign is recorded. Manual width adjustments are preserved until the next detection refits.

  • HAM/GMRS cross-reference dedup for pending pills (#43) — pending-station detection now considers all three callsign fields on every contact (callsign, gmrs_callsign, ham_callsign), so a HAM call detected over the air won't trigger an "Add station" pill if the operator's GMRS call is already saved (and vice versa). Eliminates the double-add prompt for operators licensed for both services.

Docs

  • docs/USER_MANUAL.pdf updated throughout this release — new §5.8 Attendance panel walkthrough (including column resize behavior), new §15.4 Fuzzy callsign matching section, RX-pipeline subsections for the squelch-open pre-trigger and streaming transcription (updated to reflect abandoned-utterance callsign scanning), Listen-only toggle coverage, shortcut tables (Ctrl+Shift+A, Alt+O, Alt+U, Alt+A), config.json reference keys, §5.1 theme toggle updated to name all repainted surfaces including the conversation log.

Upgrade notes

  • From v1.1.0 — drop in the new source over your existing tree (or git pull). Existing config.json is forward-compatible; new keys (listen_only, fuzzy_callsign, attendance) are populated lazily with defaults on first launch and saved on close. No model re-download required — the bundled Models/ and Voices/ directories from v1.0.0 / v1.1.0 are still valid.
  • First-launch defaults — Listen-only is off, fuzzy callsign matching is off, and the Attendance dock is hidden. Each is independently toggleable from either the Configuration dialog or, where applicable, the View menu.
  • Versioning — minor release (v1.1.0 → v1.2.0): three new user-visible features, two bug fixes, two improvements. No breaking changes. The v1.2.0-rc1 prerelease is superseded by this tag.