Peer rename + details box on Connectivity tab; Add band dialog fixes

Add band dialog (from testing feedback):
 * Tab order is now Start, End, Gain, OK, Cancel (OK was after Cancel).
 * Gain box takes decimals like 1.5 (half-dB steps); parametric list shows one decimal.
 * The two frequency boxes start empty — nothing prepopulated to mislead; both required on OK.

New Connectivity-tab feature (held for next release):
 * Rename peer (Alt+M) opens a dialog to give a peer a friendly name, with a Clear custom name
   button. Names are keyed by the peer's MACHINE NAME (stable across restarts, IP changes and
   networks), stored machine-wide in AppConfig.PeerFriendlyNames, and resolved everywhere a peer
   shows: both peer lists (via PeerListItem.DisplayNameProvider), the volume/pan/EQ list, the
   status line and split-recording filenames. Manual-by-IP peers with no announced name fall back
   to keying by address.
 * Peer details (Alt+E): a read-only box for the highlighted connected peer showing name, machine
   name, IP, connected-for, link health + ping, what they're sending, and whether they're
   receiving our audio. "Sending: 2 devices on ASIO at 48 kHz, Opus" is derived from the live
   receive streams — each stream is one device and its lane gives WASAPI vs ASIO — so NO protocol
   change and no new privacy exposure. AudioReceiver.ActiveFormatsFromAddress added for this.

Manual updated (readme.html + MANUAL.md). Build clean; --selftest passes; deployed to both test
folders. Held for next release.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-07-07 23:56:42 +01:00
co-authored by Claude Opus 4.8
parent 033edd776f
commit f35f6c3c28
8 changed files with 402 additions and 52 deletions
+5
View File
@@ -75,6 +75,11 @@ public sealed class AppConfig
/// <see cref="Profile.PeerShaping"/>.</summary>
public bool ShowPanEqTab { get; set; } = true;
/// <summary>Custom friendly names the user has given to peers, keyed by the peer's stable identity —
/// its machine name when known, otherwise its address. Machine-wide (a name applies in every profile)
/// and shown wherever that peer appears. Empty by default. See the Connectivity tab's Rename peer.</summary>
public Dictionary<string, string> PeerFriendlyNames { get; set; } = new();
/// <summary>If true (the default), RemSound plays the startup cue once, right after this
/// copy wins the single-instance takeover and before the profile loads. Machine-wide (not
/// per-<see cref="Profile"/>) because it fires before any profile — and its per-profile