microsoft/TypeAgent

Public

mirrored fromhttps://github.com/microsoft/TypeAgentAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
copilot/fix-shell-and-cli-windows-job

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

dotnet/autoShell/Handlers/AudioActionHandler.cs

73lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using System;
5using autoShell.Handlers.Generated;
6using autoShell.Services;
7
8namespace autoShell.Handlers;
9
10/// <summary>
11/// Handles audio commands: Mute, RestoreVolume, and Volume.
12/// </summary>
13internal class AudioActionHandler : ActionHandlerBase
14{
15 private readonly IAudioService _audio;
16 private double _savedVolumePct;
17
18 public AudioActionHandler(IAudioService audio)
19 {
20 _audio = audio;
21 AddAction<AdjustVolumeParams>("AdjustVolume", HandleAdjustVolume);
22 AddAction<MuteParams>("Mute", HandleMute);
23 AddAction<RestoreVolumeParams>("RestoreVolume", HandleRestoreVolume);
24 AddAction<VolumeParams>("Volume", HandleVolume);
25 }
26
27 private ActionResult HandleMute(MuteParams p)
28 {
29 bool mute = p.On;
30 _audio.SetMute(mute);
31 return ActionResult.Ok($"Audio {(mute ? "muted" : "unmuted")}");
32 }
33
34 private ActionResult HandleAdjustVolume(AdjustVolumeParams p)
35 {
36 int current = _audio.GetVolume();
37 int amount = p.Amount is > 0 ? p.Amount.Value : 10;
38 int target = p.Direction.Equals("down", StringComparison.OrdinalIgnoreCase)
39 ? current - amount
40 : current + amount;
41 target = Math.Clamp(target, 0, 100);
42
43 if (current > 0)
44 {
45 _savedVolumePct = current;
46 }
47 _audio.SetVolume(target);
48 return ActionResult.Ok($"Volume adjusted from {current}% to {target}%");
49 }
50
51 private ActionResult HandleRestoreVolume(RestoreVolumeParams p)
52 {
53 _audio.SetVolume((int)_savedVolumePct);
54 return ActionResult.Ok($"Volume restored to {(int)_savedVolumePct}%");
55 }
56
57 private ActionResult HandleVolume(VolumeParams p)
58 {
59 int pct = p.TargetVolume;
60 if (pct < 0)
61 {
62 return ActionResult.Fail("Invalid volume: targetVolume required");
63 }
64
65 int currentVolume = _audio.GetVolume();
66 if (currentVolume > 0)
67 {
68 _savedVolumePct = currentVolume;
69 }
70 _audio.SetVolume(pct);
71 return ActionResult.Ok($"Volume set to {pct}%");
72 }
73}
74