v3.4: handle-leak fix, Realtek ASIO block, device notifications, quick profile switch, hotkey announcements
Freezes the v3.4 feature set (everything since the v3.3 public release): - Fix the receiver handle leak: the 3-second device-refresh timer reopened the configured ASIO driver every tick, and Realtek's ASIO driver leaks Event+Mutant handles on every open. Cache the ASIO probe per driver so it is opened once. - Realtek ASIO block: detect a Realtek ASIO driver, offer once to disable it, and never touch it again if disabled; Options-menu toggle to reverse. Global config. - Device hot-plug is event-driven (AudioDeviceChangeNotifier) instead of a 3s poll; debounced refresh, falls back to polling if registration fails. - Quick profile switch: new global hotkey opens an NVDA-friendly popup of all profiles (current marked); Enter/click switches; plays a new "profile menu open" cue with Preferences mute + custom-sound. - Announce assigned global hotkeys on the controls/menu items they drive (NVDA reads "press X anywhere"). File > Open already had Ctrl+O. - Held-back changes folded in: config-folder migration, codec-column fix, Tailscale endpoint network-prune, empty-password guard, and the handle-leak diagnostics (ProcessSelfMeter, HandleTypeProbe). Version bumped to 3.4.0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
fc451ba3e3
commit
dd70613017
+5
-1
@@ -103,7 +103,10 @@ if (Test-Path $syncScript) {
|
||||
# Anything matching these must NEVER appear in a release. Folders by name; files by
|
||||
# extension / exact name. RemSound.deps.json and RemSound.runtimeconfig.json are
|
||||
# legitimate app files and are deliberately NOT matched (different names).
|
||||
$forbiddenFolders = @('logs', 'profiles', 'recordings')
|
||||
# 'config' added 2026-06-07: the config\ folder now holds global config (config\global config.json)
|
||||
# AND profiles (config\profiles\), so forbidding the whole folder catches both in one rule. The
|
||||
# legacy 'profiles' and 'remsound.config.json' rules stay for any pre-migration leftovers.
|
||||
$forbiddenFolders = @('logs', 'profiles', 'recordings', 'config')
|
||||
function Test-Forbidden([string]$path) {
|
||||
$p = $path -replace '\\', '/'
|
||||
foreach ($f in $forbiddenFolders) {
|
||||
@@ -111,6 +114,7 @@ function Test-Forbidden([string]$path) {
|
||||
}
|
||||
if ($p -match '\.log$') { return $true }
|
||||
if ($p -match '(^|/)remsound\.config\.json$') { return $true }
|
||||
if ($p -match '(^|/)global config\.json$') { return $true }
|
||||
return $false
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user