diff --git a/src/RemSound.App/MainForm.cs b/src/RemSound.App/MainForm.cs index 4716492..7d0802c 100644 --- a/src/RemSound.App/MainForm.cs +++ b/src/RemSound.App/MainForm.cs @@ -1666,6 +1666,34 @@ public sealed partial class MainForm : Form MaybeWarnAboutRealtekAsio(); if (IsDisposed) return; MaybeWarnMicBlockedOnStartup(); + if (IsDisposed) return; + MaybeWarnWeakPassword(); + } + + /// Startup warning for a profile whose password is too weak to stream under the 5.6 rule. + /// Runs from the SETTLED post-launch notice sequence — after the window is fully shown and + /// activated, one dialog at a time — NOT from the mid-connect crypto path where an earlier version + /// fired it and left a blind user trapped behind a dialog NVDA couldn't reach (Ed, 2026-07-27). + /// From here pulls it to the front (even from the tray) with clean + /// focus, exactly like the mic-blocked and Realtek warnings that already work with NVDA. Only fires + /// when the profile is actually set up to stream (send or receive on) — otherwise there's no audio + /// to block and the guided prompt on the first streaming tick is enough. The status line carries a + /// standing reminder after this is dismissed. + private void MaybeWarnWeakPassword() + { + if (IsDisposed || CuePlayer.GloballyMuted) return; // never on a --silent/automated launch + if (!WeakPasswordBlocksAudio(currentProfilePassword, currentAudioKey is not null)) return; + if (!IsSendEnabled && !IsReceiveEnabled) return; // not trying to stream → nothing blocked yet + var advice = PasswordStrength.Critique(currentProfilePassword) ?? ""; + ForegroundDialog.Show(owner => MessageBox.Show(owner, + "The password on this profile — the one that protects your audio — is too easy to guess, so " + + "from this version RemSound won't stream with it. Until it's changed, the people you " + + "connect to will hear nothing.\n\n" + + advice + "\n\n" + + "To fix it: open the File menu and choose “Change this profile's password”, then set " + + "the SAME new password on every machine you connect with.", + "RemSound — password too weak to stream", + MessageBoxButtons.OK, MessageBoxIcon.Warning)); } /// Startup log-folder housekeeping driven by the Logging-tab preferences. Both steps are