Service: drop the WASAPI inputs (mic) list — outputs and apps only

The service streams a machine's OUTPUT audio (or specific apps); capturing a mic from an
unattended, logged-out box isn't a use case (Ed). Removed the "WASAPI audio inputs to
send" list from the service config dialog, and made the service ignore inputs everywhere:

- ServiceProfileDialog: removed the inputs CheckedListBox, its status label, its row and
  accessibility wiring. Save now clears SelectedWasapiSendInputs so a profile saved by an
  older build can't keep a mic streaming.
- ServiceSendHost.BuildSendSpecs: removed the input-spec loop — a legacy profile's inputs
  are deliberately ignored.

(The main app is unchanged: it still has its WASAPI inputs list and AudioDeviceCatalog
.LoadInputs stays for it.)

Test: the service-parity test now adds a mic to the profile and asserts BuildSendSpecs
emits only per-application specs and never a CaptureKind.Input. Gate 46/46.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ednunp
2026-07-18 00:10:36 +01:00
co-authored by Claude Opus 4.8
parent 0102aa51f4
commit 27353a3f41
3 changed files with 13 additions and 11 deletions
+5 -2
View File
@@ -1000,11 +1000,14 @@ internal static class SelfTest
{
var appsProfile = new Profile { WasapiSendMode = "applications", SendAllApplications = true };
appsProfile.SelectedSendApplications.Add("nonexistent-proc-for-test");
appsProfile.SelectedWasapiSendInputs.Add("some-mic-id"); // legacy input selection must be ignored
var appSpecs = ServiceSendHost.BuildSendSpecs(appsProfile);
Check(!appSpecs.Any(s => s.Kind == CaptureKind.Loopback),
"applications mode must NOT produce a whole-system loopback spec, even with SendAllApplications=true");
Check(appSpecs.All(s => s.Kind is CaptureKind.ProcessLoopback or CaptureKind.Input),
"applications mode must build only per-application (or input) specs — the 'send all' path is gone");
Check(appSpecs.All(s => s.Kind == CaptureKind.ProcessLoopback),
"the service builds only per-application specs — no whole-system loopback, and no WASAPI inputs");
Check(!appSpecs.Any(s => s.Kind == CaptureKind.Input),
"the service must never send WASAPI inputs, even if a legacy profile still lists one");
}
return "service forces Opus + 2.5ms frame + lock-to-clock; apps mode is specific-apps-only; crypto matches";
}