The shared view
On a shared dial there is one zoom and one centring mode — what one listener sees, all of them see. Jr restored its own remembered span on connect and sent it, so the last person to join re-scaled the waterfall for everybody already watching. On an RTL with the zoom-following IF filter that moves the tuner's real selectivity under them too.
This is what vfo already prevents for the frequency; the argument was never extended to the view. The server now sends shared in config, travelling with the decision it governs — dialMode arrives in a separate message and still reads "exclusive" at the moment a client picks its view.
Jr also stopped fighting a live user: an unsolicited span change was treated as a session reset and forced back, twice, when on a shared dial it is simply somebody else zooming.
The VTS
- Band announcements scroll now. The band branch never called the scroll routine, so the longest lines the bar carries were the one kind that could not move.
- A keyed notice queue on the same slot rather than new overlays. The gain-at-minimum warning moved into it.
- The zoom-following IF filter is now explained on connect. Nothing else moves a tuner's selectivity with the zoom, so there is no prior experience to fall back on and it reads as a fault — signals seem to vanish when you zoom in, and the radio seems to overload for no reason when you zoom out. RTL only, and only when the automation is actually on.
HackRF and Airspy
- The HackRF's bias-T was wired to nothing. The generic setter is librtlsdr top to bottom and bailed on anything that is not a dongle; it now routes to the HackRF's own.
- The dongle's gain/AGC/IF-filter panel was drawn for every radio — an Airspy HF+ and a HackRF both got an R820T gain table, a VibeAGC switch for an AGC they do not have, and an IF-filter toggle marked "RTL only" in its own comment. Each now gets a sentence saying what it does instead.
Also: an idle-park fix carried forward, per-socket byte counters, and Data/Drops columns in the admin history.