diff --git a/src/FocusVolumeControl/AudioHelpers/AudioHelper.cs b/src/FocusVolumeControl/AudioHelpers/AudioHelper.cs index 408f976..4a0a3c0 100644 --- a/src/FocusVolumeControl/AudioHelpers/AudioHelper.cs +++ b/src/FocusVolumeControl/AudioHelpers/AudioHelper.cs @@ -17,6 +17,7 @@ public class AudioHelper int _retryFallbackCount = 0; public List Overrides { get; set; } + public List Ignored { get; set; } public IAudioSession Current { get; private set; } @@ -223,6 +224,11 @@ public class AudioHelper { return new List(); } + + if(processes.Any(x => Ignored.Contains(x.ProcessName))) + { + return new List(); + } try { diff --git a/src/FocusVolumeControl/DialAction.cs b/src/FocusVolumeControl/DialAction.cs index 7ecfa44..b2cfb6d 100644 --- a/src/FocusVolumeControl/DialAction.cs +++ b/src/FocusVolumeControl/DialAction.cs @@ -33,12 +33,16 @@ public class DialAction : EncoderBase [JsonProperty("overrides")] public string Overrides { get; set; } + [JsonProperty("ignored")] + public string Ignored { get; set; } + public static PluginSettings CreateDefaultSettings() { PluginSettings instance = new PluginSettings(); instance.FallbackBehavior = FallbackBehavior.SystemSounds; instance.StepSize = 1; instance.Overrides = DefaultOverrides; + instance.Ignored = ""; return instance; } } @@ -57,9 +61,20 @@ public class DialAction : EncoderBase else { settings = payload.Settings.ToObject(); + bool save = false; if(string.IsNullOrEmpty(settings.Overrides)) { settings.Overrides = DefaultOverrides; + save = true; + } + if(string.IsNullOrEmpty(settings.Ignored)) + { + settings.Ignored = ""; + save = true; + } + + if(save) + { _ = SaveSettings(); } } @@ -69,6 +84,7 @@ public class DialAction : EncoderBase try { _audioHelper.Overrides = OverrideParser.Parse(settings.Overrides); + _audioHelper.Ignored = IgnoreParser.Parse(settings.Ignored); //just in case we fail to get the active session, don't prevent the plugin from launching var session = _audioHelper.GetActiveSession(settings.FallbackBehavior); _ = UpdateStateIfNeeded(session); @@ -238,6 +254,7 @@ public class DialAction : EncoderBase { Tools.AutoPopulateSettings(settings, payload.Settings); _audioHelper.Overrides = OverrideParser.Parse(settings.Overrides); + _audioHelper.Ignored = IgnoreParser.Parse(settings.Ignored); //_ = SaveSettings(); } catch (Exception ex) diff --git a/src/FocusVolumeControl/FocusVolumeControl.csproj b/src/FocusVolumeControl/FocusVolumeControl.csproj index 70dadb0..e047962 100644 --- a/src/FocusVolumeControl/FocusVolumeControl.csproj +++ b/src/FocusVolumeControl/FocusVolumeControl.csproj @@ -67,6 +67,7 @@ + diff --git a/src/FocusVolumeControl/Overrides/IgnoreParser.cs b/src/FocusVolumeControl/Overrides/IgnoreParser.cs new file mode 100644 index 0000000..4cdb764 --- /dev/null +++ b/src/FocusVolumeControl/Overrides/IgnoreParser.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FocusVolumeControl.Overrides +{ + internal class IgnoreParser + { + public static List Parse(string raw) + { + var ignores = new List(); + + if (raw == null) + { + return ignores; + } + + var lines = raw.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var line in lines) + { + if (string.IsNullOrEmpty(line) || line.StartsWith("//")) + { + continue; + } + var str = line.Trim(); + ignores.Add(line.Trim()); + } + + return ignores; + } + + } +} diff --git a/src/FocusVolumeControl/PropertyInspector/PluginActionPI.html b/src/FocusVolumeControl/PropertyInspector/PluginActionPI.html index 9630d70..ccb6733 100644 --- a/src/FocusVolumeControl/PropertyInspector/PluginActionPI.html +++ b/src/FocusVolumeControl/PropertyInspector/PluginActionPI.html @@ -61,6 +61,22 @@ +
+
Ignored
+ + + +
+ +
+ Ignored Details +

Sometimes you may not want certain processes to be controlable.

+

In this case, you can add a list of process names which will be ignored.

+

ex:
chrome

+

Blank lines can be used for spacing
Lines starting with // are ignored

+

To get a process name, you can use task manager, right click on a process and select properties

+

Process names are case sensitive and must match exactly

+