diff --git a/UserInterface/ViewModels/AddCommandViewModel.cs b/UserInterface/ViewModels/AddCommandViewModel.cs index 31d593a..8aa0633 100644 --- a/UserInterface/ViewModels/AddCommandViewModel.cs +++ b/UserInterface/ViewModels/AddCommandViewModel.cs @@ -11,6 +11,8 @@ namespace UserInterface.ViewModels private bool _showCommandInput; private bool _showKeyInput; private string _moreInfoLink; + private string _command; + private string _key; public AvailableCommands SelectedType { get => _selectedType; set => this.RaiseAndSetIfChanged(ref _selectedType, value); } public string Name { get => _name; set => this.RaiseAndSetIfChanged(ref _name, value); } @@ -18,7 +20,7 @@ namespace UserInterface.ViewModels public bool ShowCommandInput { get => _showCommandInput; set => this.RaiseAndSetIfChanged(ref _showCommandInput, value); } public bool ShowKeyInput { get => _showKeyInput; set => this.RaiseAndSetIfChanged(ref _showKeyInput, value); } public string MoreInfoLink { get => _moreInfoLink; set => this.RaiseAndSetIfChanged(ref _moreInfoLink, value); } - public string Command { get; set; } - public string Key { get; set; } + public string Command { get => _command; set => this.RaiseAndSetIfChanged(ref _command, value); } + public string Key { get => _key; set => this.RaiseAndSetIfChanged(ref _key, value); } } } \ No newline at end of file diff --git a/UserInterface/ViewModels/AddSensorViewModel.cs b/UserInterface/ViewModels/AddSensorViewModel.cs index 6c04b9a..4e22e0f 100644 --- a/UserInterface/ViewModels/AddSensorViewModel.cs +++ b/UserInterface/ViewModels/AddSensorViewModel.cs @@ -11,8 +11,9 @@ namespace UserInterface.ViewModels private string _description; private bool _showQueryInput; private bool _showWindowNameInput; - private bool _showDetectionModeOptions; private string _moreInfoLink; + private string _query; + private string _windowName; public AvailableSensors SelectedType { get => _selectedType; set => this.RaiseAndSetIfChanged(ref _selectedType, value); } public string Name { get => _name; set => this.RaiseAndSetIfChanged(ref _name, value); } @@ -20,9 +21,8 @@ namespace UserInterface.ViewModels public string Description { get => _description; set => this.RaiseAndSetIfChanged(ref _description, value); } public bool ShowQueryInput { get => _showQueryInput; set => this.RaiseAndSetIfChanged(ref _showQueryInput, value); } public bool ShowWindowNameInput { get => _showWindowNameInput; set => this.RaiseAndSetIfChanged(ref _showWindowNameInput, value); } - public bool ShowDetectionModeOptions { get => _showDetectionModeOptions; set => this.RaiseAndSetIfChanged(ref _showDetectionModeOptions, value); } public string MoreInfoLink { get => _moreInfoLink; set => this.RaiseAndSetIfChanged(ref _moreInfoLink, value); } - public string Query { get; set; } - public string WindowName { get; set; } + public string Query { get => _query; set => this.RaiseAndSetIfChanged(ref _query, value); } + public string WindowName { get => _windowName; set => this.RaiseAndSetIfChanged(ref _windowName, value); } } } \ No newline at end of file diff --git a/UserInterface/Views/AddCommandDialog.axaml.cs b/UserInterface/Views/AddCommandDialog.axaml.cs index 45005e2..dbda8a9 100644 --- a/UserInterface/Views/AddCommandDialog.axaml.cs +++ b/UserInterface/Views/AddCommandDialog.axaml.cs @@ -1,193 +1,193 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Interactivity; -using Avalonia.Markup.Xaml; -using hass_workstation_service.Communication.InterProcesCommunication.Models; -using hass_workstation_service.Communication.NamedPipe; -using JKang.IpcServiceFramework.Client; -using Microsoft.Extensions.DependencyInjection; -using System; -using System.Linq; -using System.Text.Json; -using UserInterface.Util; -using UserInterface.ViewModels; - -namespace UserInterface.Views -{ - public class AddCommandDialog : Window - { - private readonly IIpcClient _client; - public ComboBox ComboBox { get; set; } - public ComboBox DetectionModecomboBox { get; set; } +using Avalonia; +using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Markup.Xaml; +using hass_workstation_service.Communication.InterProcesCommunication.Models; +using hass_workstation_service.Communication.NamedPipe; +using JKang.IpcServiceFramework.Client; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Linq; +using System.Text.Json; +using UserInterface.Util; +using UserInterface.ViewModels; + +namespace UserInterface.Views +{ + public class AddCommandDialog : Window + { + private readonly IIpcClient _client; + public ComboBox ComboBox { get; set; } + public ComboBox DetectionModecomboBox { get; set; } public Guid CommandId { get; } - public AddCommandDialog(Guid commandId) : this() - { - CommandId = commandId; - GetCommandInfo(CommandId); - Title = "Edit command"; + public AddCommandDialog(Guid commandId) : this() + { + CommandId = commandId; + GetCommandInfo(CommandId); + Title = "Edit command"; + } + + public AddCommandDialog() + { + InitializeComponent(); + DataContext = new AddCommandViewModel(); + ComboBox = this.FindControl("ComboBox"); + ComboBox.Items = Enum.GetValues(typeof(AvailableCommands)).Cast().OrderBy(v => v.ToString()); + ComboBox.SelectedIndex = 0; + + // register IPC clients + ServiceProvider serviceProvider = new ServiceCollection() + .AddNamedPipeIpcClient("addCommand", pipeName: "pipeinternal") + .BuildServiceProvider(); + + // resolve IPC client factory + IIpcClientFactory clientFactory = serviceProvider + .GetRequiredService>(); + + // create client + _client = clientFactory.CreateClient("addCommand"); + Title = "Add command"; + + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + + private async void GetCommandInfo(Guid commandId) + { + var command = await _client.InvokeAsync(x => x.GetConfiguredCommand(commandId)); + + ComboBox.SelectedItem = command.Type; + FillDefaultValues(); + ComboBox.IsEnabled = false; + var item = (AddCommandViewModel)DataContext; + item.SelectedType = command.Type; + item.Name = command.Name; + item.Command = command.Command; + item.Key = command.Key; + } - public AddCommandDialog() - { - InitializeComponent(); - DataContext = new AddCommandViewModel(); - ComboBox = this.FindControl("ComboBox"); - ComboBox.Items = Enum.GetValues(typeof(AvailableCommands)).Cast().OrderBy(v => v.ToString()); - ComboBox.SelectedIndex = 0; - - // register IPC clients - ServiceProvider serviceProvider = new ServiceCollection() - .AddNamedPipeIpcClient("addCommand", pipeName: "pipeinternal") - .BuildServiceProvider(); - - // resolve IPC client factory - IIpcClientFactory clientFactory = serviceProvider - .GetRequiredService>(); - - // create client - _client = clientFactory.CreateClient("addCommand"); - Title = "Add sensor"; - - } - - private void InitializeComponent() - { - AvaloniaXamlLoader.Load(this); - } - - private async void GetCommandInfo(Guid commandId) - { - var command = await _client.InvokeAsync(x => x.GetConfiguredCommand(commandId)); - - ComboBox.SelectedItem = command.Type; - FillDefaultValues(); - ComboBox.IsEnabled = false; - var item = (AddCommandViewModel)DataContext; - item.SelectedType = command.Type; - item.Name = command.Name; - //item.UpdateInterval = command.UpdateInterval; - //item.WindowName = - //item.Query = - } - - public async void Save(object sender, RoutedEventArgs args) - { - var item = (AddCommandViewModel)DataContext; - dynamic model = new { item.Name, item.Command, item.Key }; - string json = JsonSerializer.Serialize(model); - if (CommandId == Guid.Empty) - await _client.InvokeAsync(x => x.AddCommand(item.SelectedType, json)); - else + public async void Save(object sender, RoutedEventArgs args) + { + var item = (AddCommandViewModel)DataContext; + dynamic model = new { item.Name, item.Command, item.Key }; + string json = JsonSerializer.Serialize(model); + if (CommandId == Guid.Empty) + await _client.InvokeAsync(x => x.AddCommand(item.SelectedType, json)); + else await _client.InvokeAsync(x => x.UpdateCommandById(CommandId, json)); - Close(); - } - - public void ComboBoxClosed(object sender, SelectionChangedEventArgs args) - { - FillDefaultValues(); - } - - private void FillDefaultValues() + Close(); + } + + public void ComboBoxClosed(object sender, SelectionChangedEventArgs args) + { + FillDefaultValues(); + } + + private void FillDefaultValues() { - var item = (AddCommandViewModel)DataContext; - switch (ComboBox.SelectedItem) - { - case AvailableCommands.CustomCommand: - item.Description = "This command lets you execute any command you want. It will run in a Windows Command Prompt silently. "; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#customcommand"; - item.ShowCommandInput = true; - item.ShowKeyInput = false; - break; - case AvailableCommands.ShutdownCommand: - item.Description = "This command shuts down the PC immediately. "; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#shutdowncommand"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.RestartCommand: - item.Description = "This command restarts the PC immediately. "; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#restartcommand"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.LogOffCommand: - item.Description = "This command logs the current user off immediately. "; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#logoffcommand"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.KeyCommand: - item.Description = "This command can be used to emulate a keystroke. It requires a key code which you can find by clicking the info button below."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#keycommand"; - item.ShowCommandInput = false; - item.ShowKeyInput = true; - break; - case AvailableCommands.PlayPauseCommand: - item.Description = "This command plays or pauses currently playing media."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.NextCommand: - item.Description = "This command skips to the next media."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.PreviousCommand: - item.Description = "This command plays previous media."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.VolumeDownCommand: - item.Description = "Lowers the system volume."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.VolumeUpCommand: - item.Description = "Raises the system volume."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - case AvailableCommands.MuteCommand: - item.Description = "Toggles muting the system volume."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - default: - item.Description = null; - item.MoreInfoLink = null; - item.ShowCommandInput = false; - item.ShowKeyInput = false; - break; - } - } - + var item = (AddCommandViewModel)DataContext; + switch (ComboBox.SelectedItem) + { + case AvailableCommands.CustomCommand: + item.Description = "This command lets you execute any command you want. It will run in a Windows Command Prompt silently. "; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#customcommand"; + item.ShowCommandInput = true; + item.ShowKeyInput = false; + break; + case AvailableCommands.ShutdownCommand: + item.Description = "This command shuts down the PC immediately. "; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#shutdowncommand"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.RestartCommand: + item.Description = "This command restarts the PC immediately. "; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#restartcommand"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.LogOffCommand: + item.Description = "This command logs the current user off immediately. "; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#logoffcommand"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.KeyCommand: + item.Description = "This command can be used to emulate a keystroke. It requires a key code which you can find by clicking the info button below."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#keycommand"; + item.ShowCommandInput = false; + item.ShowKeyInput = true; + break; + case AvailableCommands.PlayPauseCommand: + item.Description = "This command plays or pauses currently playing media."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.NextCommand: + item.Description = "This command skips to the next media."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.PreviousCommand: + item.Description = "This command plays previous media."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.VolumeDownCommand: + item.Description = "Lowers the system volume."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.VolumeUpCommand: + item.Description = "Raises the system volume."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + case AvailableCommands.MuteCommand: + item.Description = "Toggles muting the system volume."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#media-commands"; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + default: + item.Description = null; + item.MoreInfoLink = null; + item.ShowCommandInput = false; + item.ShowKeyInput = false; + break; + } + } + public void OpenInfo(object sender, RoutedEventArgs args) - { - var item = (AddCommandViewModel)DataContext; - BrowserUtil.OpenBrowser(item.MoreInfoLink); - } - - public void Test(object sender, RoutedEventArgs args) - { - var item = (AddCommandViewModel)DataContext; - - var process = new System.Diagnostics.Process(); + { + var item = (AddCommandViewModel)DataContext; + BrowserUtil.OpenBrowser(item.MoreInfoLink); + } + + public void Test(object sender, RoutedEventArgs args) + { + var item = (AddCommandViewModel)DataContext; + + var process = new System.Diagnostics.Process(); var startInfo = new System.Diagnostics.ProcessStartInfo { WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal, FileName = "cmd.exe", Arguments = $"/k {"echo You won't see this window normally. &&" + item.Command}" - }; - process.StartInfo = startInfo; - process.Start(); - } - } + }; + process.StartInfo = startInfo; + process.Start(); + } + } } \ No newline at end of file diff --git a/UserInterface/Views/AddSensorDialog.axaml.cs b/UserInterface/Views/AddSensorDialog.axaml.cs index 9b5d82f..de6da7e 100644 --- a/UserInterface/Views/AddSensorDialog.axaml.cs +++ b/UserInterface/Views/AddSensorDialog.axaml.cs @@ -1,229 +1,222 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Interactivity; -using Avalonia.Markup.Xaml; -using hass_workstation_service.Communication.InterProcesCommunication.Models; -using hass_workstation_service.Communication.NamedPipe; -using JKang.IpcServiceFramework.Client; -using Microsoft.Extensions.DependencyInjection; -using System; -using System.Linq; -using System.Text.Json; -using UserInterface.Util; -using UserInterface.ViewModels; - -namespace UserInterface.Views -{ - public class AddSensorDialog : Window - { - private readonly IIpcClient _client; - public ComboBox ComboBox { get; set; } - public ComboBox DetectionModecomboBox { get; set; } +using Avalonia; +using Avalonia.Controls; +using Avalonia.Interactivity; +using Avalonia.Markup.Xaml; +using hass_workstation_service.Communication.InterProcesCommunication.Models; +using hass_workstation_service.Communication.NamedPipe; +using JKang.IpcServiceFramework.Client; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Linq; +using System.Text.Json; +using UserInterface.Util; +using UserInterface.ViewModels; + +namespace UserInterface.Views +{ + public class AddSensorDialog : Window + { + private readonly IIpcClient _client; + public ComboBox ComboBox { get; set; } + public ComboBox DetectionModecomboBox { get; set; } public Guid SensorId { get; } - public AddSensorDialog(Guid sensorId) : this() - { - SensorId = sensorId; - GetSensorInfo(SensorId); - Title = "Edit sensor"; - } - - public AddSensorDialog() - { - InitializeComponent(); - DataContext = new AddSensorViewModel(); - ComboBox = this.FindControl("ComboBox"); - ComboBox.Items = Enum.GetValues(typeof(AvailableSensors)).Cast().OrderBy(v => v.ToString()); - ComboBox.SelectedIndex = 0; - - // register IPC clients - ServiceProvider serviceProvider = new ServiceCollection() - .AddNamedPipeIpcClient("addsensor", pipeName: "pipeinternal") - .BuildServiceProvider(); - - // resolve IPC client factory - IIpcClientFactory clientFactory = serviceProvider - .GetRequiredService>(); - - // create client - _client = clientFactory.CreateClient("addsensor"); - Title = "Add sensor"; - } - - private void InitializeComponent() - { - AvaloniaXamlLoader.Load(this); - } - - private async void GetSensorInfo(Guid sensorId) - { - var sensor = await _client.InvokeAsync(x => x.GetConfiguredSensor(sensorId)); - - ComboBox.SelectedItem = sensor.Type; - FillDefaultValues(); - ComboBox.IsEnabled = false; - var item = (AddSensorViewModel)DataContext; - item.SelectedType = sensor.Type; - item.Name = sensor.Name; - item.UpdateInterval = sensor.UpdateInterval; - //item.WindowName = - //item.Query = - } - - public async void Save(object sender, RoutedEventArgs args) - { - var item = (AddSensorViewModel)DataContext; - dynamic model = new { item.Name, item.Query, item.UpdateInterval, item.WindowName }; - string json = JsonSerializer.Serialize(model); - if (SensorId == Guid.Empty) - await _client.InvokeAsync(x => x.AddSensor(item.SelectedType, json)); - else - await _client.InvokeAsync(x => x.UpdateSensorById(SensorId, json)); - - Close(); - } - - public void ComboBoxClosed(object sender, SelectionChangedEventArgs args) - { - FillDefaultValues(); - } - - private void FillDefaultValues() - { - var item = (AddSensorViewModel)DataContext; - switch (ComboBox.SelectedItem) - { - case AvailableSensors.UserNotificationStateSensor: - item.Description = "This sensor watches the UserNotificationState. This is normally used in applications to determine if it is appropriate to send a notification but we can use it to expose this state. \n "; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#usernotificationstate"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.DummySensor: - item.Description = "This sensor spits out a random number every second. Useful for testing, maybe you'll find some other use for it."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#dummy"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 1; - break; - case AvailableSensors.CPULoadSensor: - item.Description = "This sensor checks the current CPU load. It averages the load on all logical cores every second and rounds the output to two decimals."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#cpuload"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.CurrentClockSpeedSensor: - item.Description = "This sensor returns the BIOS configured baseclock for the processor."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#currentclockspeed"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 3600; - break; - case AvailableSensors.WMIQuerySensor: - item.Description = "This advanced sensor executes a user defined WMI query and exposes the result. The query should return a single value."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#wmiquerysensor"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = true; - item.ShowWindowNameInput = false; - item.UpdateInterval = 10; - break; - case AvailableSensors.MemoryUsageSensor: - item.Description = "This sensor calculates the percentage of used memory."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#usedmemory"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 10; - break; - case AvailableSensors.ActiveWindowSensor: - item.Description = "This sensor exposes the name of the currently active window."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#activewindow"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.WebcamActiveSensor: - item.Description = "This sensor shows if the webcam is currently being used."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#webcamactive"; - item.ShowDetectionModeOptions = true; - item.ShowQueryInput = false; - item.UpdateInterval = 10; - break; - case AvailableSensors.MicrophoneActiveSensor: - item.Description = "This sensor shows if the microphone is currently in use."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#microphoneactive"; - item.ShowDetectionModeOptions = false; - item.ShowQueryInput = false; - item.UpdateInterval = 10; - break; - case AvailableSensors.NamedWindowSensor: - item.Description = "This sensor returns true if a window was found with the name you search for. "; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#namedwindow"; - item.ShowQueryInput = false; - item.ShowWindowNameInput = true; - item.UpdateInterval = 5; - break; - case AvailableSensors.LastActiveSensor: - item.Description = "This sensor returns the date/time that the workstation was last active."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#lastactive"; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.LastBootSensor: - item.Description = "This sensor returns the date/time that Windows was last booted"; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#lastboot"; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.SessionStateSensor: - item.Description = "This sensor returns the state of the Windows session."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#sessionstate"; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.CurrentVolumeSensor: - item.Description = "This sensor returns the volume of currently playing audio."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#currentvolume"; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.GPUTemperatureSensor: - item.Description = "This sensor returns the current temperature of the GPU in °C."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#gputemperature"; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - case AvailableSensors.GPULoadSensor: - item.Description = "This sensor returns the current GPU load."; - item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#gpuload"; - item.ShowQueryInput = false; - item.ShowWindowNameInput = false; - item.UpdateInterval = 5; - break; - default: - item.Description = null; - item.MoreInfoLink = null; - item.ShowQueryInput = false; - break; - } - } - - public void OpenInfo(object sender, RoutedEventArgs args) - { - var item = (AddSensorViewModel)DataContext; - BrowserUtil.OpenBrowser(item.MoreInfoLink); - } - } + public AddSensorDialog(Guid sensorId) : this() + { + SensorId = sensorId; + GetSensorInfo(SensorId); + Title = "Edit sensor"; + } + + public AddSensorDialog() + { + InitializeComponent(); + DataContext = new AddSensorViewModel(); + ComboBox = this.FindControl("ComboBox"); + ComboBox.Items = Enum.GetValues(typeof(AvailableSensors)).Cast().OrderBy(v => v.ToString()); + ComboBox.SelectedIndex = 0; + + // register IPC clients + ServiceProvider serviceProvider = new ServiceCollection() + .AddNamedPipeIpcClient("addsensor", pipeName: "pipeinternal") + .BuildServiceProvider(); + + // resolve IPC client factory + IIpcClientFactory clientFactory = serviceProvider + .GetRequiredService>(); + + // create client + _client = clientFactory.CreateClient("addsensor"); + Title = "Add sensor"; + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + + private async void GetSensorInfo(Guid sensorId) + { + ConfiguredSensorModel sensor = await _client.InvokeAsync(x => x.GetConfiguredSensor(sensorId)); + + ComboBox.SelectedItem = sensor.Type; + FillDefaultValues(); + ComboBox.IsEnabled = false; + var item = (AddSensorViewModel)DataContext; + item.SelectedType = sensor.Type; + item.Name = sensor.Name; + item.UpdateInterval = sensor.UpdateInterval; + item.Query = sensor.Query; + item.WindowName = sensor.WindowName; + + Title = $"Edit {sensor.Name}"; + } + + public async void Save(object sender, RoutedEventArgs args) + { + var item = (AddSensorViewModel)DataContext; + dynamic model = new { item.Name, item.Query, item.UpdateInterval, item.WindowName }; + string json = JsonSerializer.Serialize(model); + if (SensorId == Guid.Empty) + await _client.InvokeAsync(x => x.AddSensor(item.SelectedType, json)); + else + await _client.InvokeAsync(x => x.UpdateSensorById(SensorId, json)); + + Close(); + } + + public void ComboBoxClosed(object sender, SelectionChangedEventArgs args) + { + FillDefaultValues(); + } + + private void FillDefaultValues() + { + var item = (AddSensorViewModel)DataContext; + switch (ComboBox.SelectedItem) + { + case AvailableSensors.UserNotificationStateSensor: + item.Description = "This sensor watches the UserNotificationState. This is normally used in applications to determine if it is appropriate to send a notification but we can use it to expose this state. \n "; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#usernotificationstate"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.DummySensor: + item.Description = "This sensor spits out a random number every second. Useful for testing, maybe you'll find some other use for it."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#dummy"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 1; + break; + case AvailableSensors.CPULoadSensor: + item.Description = "This sensor checks the current CPU load. It averages the load on all logical cores every second and rounds the output to two decimals."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#cpuload"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.CurrentClockSpeedSensor: + item.Description = "This sensor returns the BIOS configured baseclock for the processor."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#currentclockspeed"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 3600; + break; + case AvailableSensors.WMIQuerySensor: + item.Description = "This advanced sensor executes a user defined WMI query and exposes the result. The query should return a single value."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#wmiquerysensor"; + item.ShowQueryInput = true; + item.ShowWindowNameInput = false; + item.UpdateInterval = 10; + break; + case AvailableSensors.MemoryUsageSensor: + item.Description = "This sensor calculates the percentage of used memory."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#usedmemory"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 10; + break; + case AvailableSensors.ActiveWindowSensor: + item.Description = "This sensor exposes the name of the currently active window."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#activewindow"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.WebcamActiveSensor: + item.Description = "This sensor shows if the webcam is currently being used."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#webcamactive"; + item.ShowQueryInput = false; + item.UpdateInterval = 10; + break; + case AvailableSensors.MicrophoneActiveSensor: + item.Description = "This sensor shows if the microphone is currently in use."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#microphoneactive"; + item.ShowQueryInput = false; + item.UpdateInterval = 10; + break; + case AvailableSensors.NamedWindowSensor: + item.Description = "This sensor returns true if a window was found with the name you search for. "; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#namedwindow"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = true; + item.UpdateInterval = 5; + break; + case AvailableSensors.LastActiveSensor: + item.Description = "This sensor returns the date/time that the workstation was last active."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#lastactive"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.LastBootSensor: + item.Description = "This sensor returns the date/time that Windows was last booted"; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#lastboot"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.SessionStateSensor: + item.Description = "This sensor returns the state of the Windows session."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#sessionstate"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.CurrentVolumeSensor: + item.Description = "This sensor returns the volume of currently playing audio."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#currentvolume"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.GPUTemperatureSensor: + item.Description = "This sensor returns the current temperature of the GPU in °C."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#gputemperature"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + case AvailableSensors.GPULoadSensor: + item.Description = "This sensor returns the current GPU load."; + item.MoreInfoLink = "https://github.com/sleevezipper/hass-workstation-service#gpuload"; + item.ShowQueryInput = false; + item.ShowWindowNameInput = false; + item.UpdateInterval = 5; + break; + default: + item.Description = null; + item.MoreInfoLink = null; + item.ShowQueryInput = false; + break; + } + } + + public void OpenInfo(object sender, RoutedEventArgs args) + { + var item = (AddSensorViewModel)DataContext; + BrowserUtil.OpenBrowser(item.MoreInfoLink); + } + } } \ No newline at end of file diff --git a/UserInterface/Views/CommandSettings.axaml.cs b/UserInterface/Views/CommandSettings.axaml.cs index 4c8d7bf..3088a45 100644 --- a/UserInterface/Views/CommandSettings.axaml.cs +++ b/UserInterface/Views/CommandSettings.axaml.cs @@ -1,65 +1,65 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Markup.Xaml; -using Microsoft.Extensions.DependencyInjection; -using hass_workstation_service.Communication.NamedPipe; -using JKang.IpcServiceFramework.Client; -using Avalonia.Interactivity; -using System.Reactive.Linq; -using UserInterface.ViewModels; -using hass_workstation_service.Communication.InterProcesCommunication.Models; -using System.Collections.Generic; -using System.Linq; -using Avalonia.Controls.ApplicationLifetimes; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; +using Microsoft.Extensions.DependencyInjection; +using hass_workstation_service.Communication.NamedPipe; +using JKang.IpcServiceFramework.Client; +using Avalonia.Interactivity; +using System.Reactive.Linq; +using UserInterface.ViewModels; +using hass_workstation_service.Communication.InterProcesCommunication.Models; +using System.Collections.Generic; +using System.Linq; +using Avalonia.Controls.ApplicationLifetimes; using System.Threading.Tasks; -namespace UserInterface.Views -{ - public class CommandSettings : UserControl - { - private readonly IIpcClient _client; - private readonly DataGrid _dataGrid; - private bool _commandsNeedToRefresh; - - public CommandSettings() - { - InitializeComponent(); - // register IPC clients - ServiceProvider serviceProvider = new ServiceCollection() - .AddNamedPipeIpcClient("commands", pipeName: "pipeinternal") - .BuildServiceProvider(); - - // resolve IPC client factory - IIpcClientFactory clientFactory = serviceProvider - .GetRequiredService>(); - - // create client - _client = clientFactory.CreateClient("commands"); - _dataGrid = this.FindControl("Grid"); - - DataContext = new CommandSettingsViewModel(); - GetConfiguredCommands(); - } - - private void InitializeComponent() - { - AvaloniaXamlLoader.Load(this); - } - - public async void GetConfiguredCommands() - { - List status = await _client.InvokeAsync(x => x.GetConfiguredCommands()); - - ((CommandSettingsViewModel)DataContext).ConfiguredCommands = status.Select(s => - new CommandViewModel() - { - Name = s.Name, - Type = s.Type, - Id = s.Id - }).ToList(); - - if (_commandsNeedToRefresh) - { +namespace UserInterface.Views +{ + public class CommandSettings : UserControl + { + private readonly IIpcClient _client; + private readonly DataGrid _dataGrid; + private bool _commandsNeedToRefresh; + + public CommandSettings() + { + InitializeComponent(); + // register IPC clients + ServiceProvider serviceProvider = new ServiceCollection() + .AddNamedPipeIpcClient("commands", pipeName: "pipeinternal") + .BuildServiceProvider(); + + // resolve IPC client factory + IIpcClientFactory clientFactory = serviceProvider + .GetRequiredService>(); + + // create client + _client = clientFactory.CreateClient("commands"); + _dataGrid = this.FindControl("Grid"); + + DataContext = new CommandSettingsViewModel(); + GetConfiguredCommands(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + + public async void GetConfiguredCommands() + { + List status = await _client.InvokeAsync(x => x.GetConfiguredCommands()); + + ((CommandSettingsViewModel)DataContext).ConfiguredCommands = status.Select(s => + new CommandViewModel() + { + Name = s.Name, + Type = s.Type, + Id = s.Id + }).ToList(); + + if (_commandsNeedToRefresh) + { await Task.Delay(1000); GetConfiguredCommands(); _commandsNeedToRefresh = false; @@ -104,5 +104,5 @@ namespace UserInterface.Views _dataGrid.SelectedIndex = -1; viewModel.TriggerUpdate(); } - } + } } \ No newline at end of file diff --git a/hass-workstation-service/Communication/InterProcesCommunication/InterProcessApi.cs b/hass-workstation-service/Communication/InterProcesCommunication/InterProcessApi.cs index 849631b..6bc188a 100644 --- a/hass-workstation-service/Communication/InterProcesCommunication/InterProcessApi.cs +++ b/hass-workstation-service/Communication/InterProcesCommunication/InterProcessApi.cs @@ -59,15 +59,7 @@ namespace hass_workstation_service.Communication.InterProcesCommunication if (!Enum.TryParse(s.GetType().Name, out AvailableSensors type)) Log.Logger.Error("Unknown sensor"); - return new ConfiguredSensorModel() - { - Name = s.Name, - Type = type, - Value = s.PreviousPublishedState, - Id = s.Id, - UpdateInterval = s.UpdateInterval, - UnitOfMeasurement = ((SensorDiscoveryConfigModel)s.GetAutoDiscoveryConfig()).Unit_of_measurement - }; + return new ConfiguredSensorModel(s); }).ToList(); } @@ -82,31 +74,18 @@ namespace hass_workstation_service.Communication.InterProcesCommunication if (!Enum.TryParse(s.GetType().Name, out AvailableSensors type)) Log.Logger.Error("Unknown sensor"); - return new ConfiguredSensorModel() - { - Name = s.Name, - Type = type, - Value = s.PreviousPublishedState, - Id = s.Id, - UpdateInterval = s.UpdateInterval, - UnitOfMeasurement = ((SensorDiscoveryConfigModel)s.GetAutoDiscoveryConfig()).Unit_of_measurement - }; + return new ConfiguredSensorModel(s); } } public List GetConfiguredCommands() { - return _configurationService.ConfiguredCommands.Select(s => + return _configurationService.ConfiguredCommands.Select(c => { - if (!Enum.TryParse(s.GetType().Name, out AvailableCommands type)) + if (!Enum.TryParse(c.GetType().Name, out AvailableCommands type)) Log.Logger.Error("Unknown command"); - return new ConfiguredCommandModel() - { - Name = s.Name, - Type = type, - Id = s.Id - }; + return new ConfiguredCommandModel(c); }).ToList(); } @@ -120,12 +99,7 @@ namespace hass_workstation_service.Communication.InterProcesCommunication if (!Enum.TryParse(c.GetType().Name, out AvailableCommands type)) Log.Logger.Error("Unknown command"); - return new ConfiguredCommandModel() - { - Name = c.Name, - Type = type, - Id = c.Id - }; + return new ConfiguredCommandModel(c); } } @@ -229,12 +203,12 @@ namespace hass_workstation_service.Communication.InterProcesCommunication AvailableCommands.RestartCommand => new RestartCommand(_publisher, model.Name), AvailableCommands.LogOffCommand => new LogOffCommand(_publisher, model.Name), AvailableCommands.CustomCommand => new CustomCommand(_publisher, model.Command, model.Name), - AvailableCommands.PlayPauseCommand => new MediaPlayPauseCommand(_publisher, model.Name), - AvailableCommands.NextCommand => new MediaNextCommand(_publisher, model.Name), - AvailableCommands.PreviousCommand => new MediaPreviousCommand(_publisher, model.Name), - AvailableCommands.VolumeUpCommand => new MediaVolumeUpCommand(_publisher, model.Name), - AvailableCommands.VolumeDownCommand => new MediaVolumeDownCommand(_publisher, model.Name), - AvailableCommands.MuteCommand => new MediaMuteCommand(_publisher, model.Name), + AvailableCommands.PlayPauseCommand => new PlayPauseCommand(_publisher, model.Name), + AvailableCommands.NextCommand => new NextCommand(_publisher, model.Name), + AvailableCommands.PreviousCommand => new PreviousCommand(_publisher, model.Name), + AvailableCommands.VolumeUpCommand => new VolumeUpCommand(_publisher, model.Name), + AvailableCommands.VolumeDownCommand => new VolumeDownCommand(_publisher, model.Name), + AvailableCommands.MuteCommand => new MuteCommand(_publisher, model.Name), AvailableCommands.KeyCommand => new KeyCommand(_publisher, Convert.ToByte(model.Key, 16), model.Name), _ => null }; diff --git a/hass-workstation-service/Communication/InterProcesCommunication/ServiceContractModels.cs b/hass-workstation-service/Communication/InterProcesCommunication/ServiceContractModels.cs index f85bdac..9a692ba 100644 --- a/hass-workstation-service/Communication/InterProcesCommunication/ServiceContractModels.cs +++ b/hass-workstation-service/Communication/InterProcesCommunication/ServiceContractModels.cs @@ -1,3 +1,5 @@ +using hass_workstation_service.Domain.Commands; +using hass_workstation_service.Domain.Sensors; using System; namespace hass_workstation_service.Communication.InterProcesCommunication.Models @@ -23,8 +25,33 @@ namespace hass_workstation_service.Communication.InterProcesCommunication.Models public AvailableSensors Type { get; set; } public string Name { get; set; } public string Value { get; set; } + public string Query { get; set; } + public string WindowName { get; set; } public int UpdateInterval { get; set; } public string UnitOfMeasurement { get; set; } + + public ConfiguredSensorModel(AbstractSensor sensor) + { + this.Id = sensor.Id; + this.Name = sensor.Name; + Enum.TryParse(sensor.GetType().Name, out AvailableSensors type); + this.Type = type; + this.Value = sensor.PreviousPublishedState; + if (sensor is WMIQuerySensor wMIQuerySensor) + { + this.Query = wMIQuerySensor.Query; + } + if (sensor is NamedWindowSensor namedWindowSensor) + { + this.WindowName = namedWindowSensor.WindowName; + } + this.UpdateInterval = sensor.UpdateInterval; + this.UnitOfMeasurement = ((SensorDiscoveryConfigModel)sensor.GetAutoDiscoveryConfig()).Unit_of_measurement; + } + public ConfiguredSensorModel() + { + + } } public class ConfiguredCommandModel @@ -33,6 +60,28 @@ namespace hass_workstation_service.Communication.InterProcesCommunication.Models public AvailableCommands Type { get; set; } public string Name { get; set; } public string Command { get; set; } + public string Key { get; set; } + + public ConfiguredCommandModel(AbstractCommand command) + { + this.Id = command.Id; + Enum.TryParse(command.GetType().Name, out AvailableCommands type); + this.Type = type; + this.Name = command.Name; + if (command is CustomCommand customCommand) + { + this.Command = customCommand.Command; + } + if (command is KeyCommand keyCommand) + { + this.Key = "0x" + Convert.ToString(keyCommand.KeyCode, 16); + } + } + + public ConfiguredCommandModel() + { + + } } public enum AvailableSensors diff --git a/hass-workstation-service/Data/ConfigurationService.cs b/hass-workstation-service/Data/ConfigurationService.cs index 7965764..7b63668 100644 --- a/hass-workstation-service/Data/ConfigurationService.cs +++ b/hass-workstation-service/Data/ConfigurationService.cs @@ -184,22 +184,22 @@ namespace hass_workstation_service.Data command = new CustomCommand(publisher, configuredCommand.Command, configuredCommand.Name, configuredCommand.Id); break; case "MediaPlayPauseCommand": - command = new MediaPlayPauseCommand(publisher, configuredCommand.Name, configuredCommand.Id); + command = new PlayPauseCommand(publisher, configuredCommand.Name, configuredCommand.Id); break; case "MediaNextCommand": - command = new MediaNextCommand(publisher, configuredCommand.Name, configuredCommand.Id); + command = new NextCommand(publisher, configuredCommand.Name, configuredCommand.Id); break; case "MediaPreviousCommand": - command = new MediaPreviousCommand(publisher, configuredCommand.Name, configuredCommand.Id); + command = new PreviousCommand(publisher, configuredCommand.Name, configuredCommand.Id); break; case "MediaVolumeUpCommand": - command = new MediaVolumeUpCommand(publisher, configuredCommand.Name, configuredCommand.Id); + command = new VolumeUpCommand(publisher, configuredCommand.Name, configuredCommand.Id); break; case "MediaVolumeDownCommand": - command = new MediaVolumeDownCommand(publisher, configuredCommand.Name, configuredCommand.Id); + command = new VolumeDownCommand(publisher, configuredCommand.Name, configuredCommand.Id); break; case "MediaMuteCommand": - command = new MediaMuteCommand(publisher, configuredCommand.Name, configuredCommand.Id); + command = new MuteCommand(publisher, configuredCommand.Name, configuredCommand.Id); break; case "KeyCommand": command = new KeyCommand(publisher, configuredCommand.KeyCode, configuredCommand.Name, configuredCommand.Id); @@ -385,6 +385,7 @@ namespace hass_workstation_service.Data public async void UpdateConfiguredCommand(Guid id, AbstractCommand command) { await DeleteCommand(id); + await Task.Delay(500); AddCommand(command); WriteCommandSettingsAsync(); } diff --git a/hass-workstation-service/Domain/Commands/MediaPlayPauseCommand.cs b/hass-workstation-service/Domain/Commands/MediaPlayPauseCommand.cs deleted file mode 100644 index 695b258..0000000 --- a/hass-workstation-service/Domain/Commands/MediaPlayPauseCommand.cs +++ /dev/null @@ -1,14 +0,0 @@ -using hass_workstation_service.Communication; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace hass_workstation_service.Domain.Commands -{ - public class MediaPlayPauseCommand : KeyCommand - { - public MediaPlayPauseCommand(MqttPublisher publisher, string name = "PlayPause", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_MEDIA_PLAY_PAUSE, name ?? "PlayPause", id) { } - } -} diff --git a/hass-workstation-service/Domain/Commands/MediaPreviousCommand.cs b/hass-workstation-service/Domain/Commands/MediaPreviousCommand.cs deleted file mode 100644 index fe35544..0000000 --- a/hass-workstation-service/Domain/Commands/MediaPreviousCommand.cs +++ /dev/null @@ -1,14 +0,0 @@ -using hass_workstation_service.Communication; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace hass_workstation_service.Domain.Commands -{ - public class MediaPreviousCommand : KeyCommand - { - public MediaPreviousCommand(MqttPublisher publisher, string name = "Previous", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_MEDIA_PREV_TRACK, name ?? "Previous", id) { } - } -} diff --git a/hass-workstation-service/Domain/Commands/MediaVolumeDownCommand.cs b/hass-workstation-service/Domain/Commands/MediaVolumeDownCommand.cs deleted file mode 100644 index 4096e3c..0000000 --- a/hass-workstation-service/Domain/Commands/MediaVolumeDownCommand.cs +++ /dev/null @@ -1,14 +0,0 @@ -using hass_workstation_service.Communication; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace hass_workstation_service.Domain.Commands -{ - public class MediaVolumeDownCommand : KeyCommand - { - public MediaVolumeDownCommand(MqttPublisher publisher, string name = "VolumeDown", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_VOLUME_DOWN, name ?? "VolumeDown", id) { } - } -} diff --git a/hass-workstation-service/Domain/Commands/MediaVolumeUpCommand.cs b/hass-workstation-service/Domain/Commands/MediaVolumeUpCommand.cs deleted file mode 100644 index 0631160..0000000 --- a/hass-workstation-service/Domain/Commands/MediaVolumeUpCommand.cs +++ /dev/null @@ -1,14 +0,0 @@ -using hass_workstation_service.Communication; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace hass_workstation_service.Domain.Commands -{ - public class MediaVolumeUpCommand : KeyCommand - { - public MediaVolumeUpCommand(MqttPublisher publisher, string name = "VolumeUp", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_VOLUME_UP, name ?? "VolumeUp", id) { } - } -} diff --git a/hass-workstation-service/Domain/Commands/MediaMuteCommand.cs b/hass-workstation-service/Domain/Commands/MuteCommand.cs similarity index 51% rename from hass-workstation-service/Domain/Commands/MediaMuteCommand.cs rename to hass-workstation-service/Domain/Commands/MuteCommand.cs index 3dd4dbc..c955716 100644 --- a/hass-workstation-service/Domain/Commands/MediaMuteCommand.cs +++ b/hass-workstation-service/Domain/Commands/MuteCommand.cs @@ -7,8 +7,8 @@ using System.Threading.Tasks; namespace hass_workstation_service.Domain.Commands { - public class MediaMuteCommand : KeyCommand + public class MuteCommand : KeyCommand { - public MediaMuteCommand(MqttPublisher publisher, string name = "Mute", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_VOLUME_MUTE, name ?? "Mute", id) { } + public MuteCommand(MqttPublisher publisher, string name = "Mute", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_VOLUME_MUTE, name ?? "Mute", id) { } } } diff --git a/hass-workstation-service/Domain/Commands/MediaNextCommand.cs b/hass-workstation-service/Domain/Commands/NextCommand.cs similarity index 50% rename from hass-workstation-service/Domain/Commands/MediaNextCommand.cs rename to hass-workstation-service/Domain/Commands/NextCommand.cs index 6f7cb7f..45c13ef 100644 --- a/hass-workstation-service/Domain/Commands/MediaNextCommand.cs +++ b/hass-workstation-service/Domain/Commands/NextCommand.cs @@ -7,8 +7,8 @@ using System.Threading.Tasks; namespace hass_workstation_service.Domain.Commands { - public class MediaNextCommand : KeyCommand + public class NextCommand : KeyCommand { - public MediaNextCommand(MqttPublisher publisher, string name = "Next", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_MEDIA_NEXT_TRACK, name ?? "Next", id) { } + public NextCommand(MqttPublisher publisher, string name = "Next", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_MEDIA_NEXT_TRACK, name ?? "Next", id) { } } } diff --git a/hass-workstation-service/Domain/Commands/PlayPauseCommand.cs b/hass-workstation-service/Domain/Commands/PlayPauseCommand.cs new file mode 100644 index 0000000..723eab1 --- /dev/null +++ b/hass-workstation-service/Domain/Commands/PlayPauseCommand.cs @@ -0,0 +1,14 @@ +using hass_workstation_service.Communication; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hass_workstation_service.Domain.Commands +{ + public class PlayPauseCommand : KeyCommand + { + public PlayPauseCommand(MqttPublisher publisher, string name = "PlayPause", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_MEDIA_PLAY_PAUSE, name ?? "PlayPause", id) { } + } +} diff --git a/hass-workstation-service/Domain/Commands/PreviousCommand.cs b/hass-workstation-service/Domain/Commands/PreviousCommand.cs new file mode 100644 index 0000000..b5db78c --- /dev/null +++ b/hass-workstation-service/Domain/Commands/PreviousCommand.cs @@ -0,0 +1,14 @@ +using hass_workstation_service.Communication; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hass_workstation_service.Domain.Commands +{ + public class PreviousCommand : KeyCommand + { + public PreviousCommand(MqttPublisher publisher, string name = "Previous", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_MEDIA_PREV_TRACK, name ?? "Previous", id) { } + } +} diff --git a/hass-workstation-service/Domain/Commands/VolumeDownCommand.cs b/hass-workstation-service/Domain/Commands/VolumeDownCommand.cs new file mode 100644 index 0000000..548a157 --- /dev/null +++ b/hass-workstation-service/Domain/Commands/VolumeDownCommand.cs @@ -0,0 +1,14 @@ +using hass_workstation_service.Communication; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hass_workstation_service.Domain.Commands +{ + public class VolumeDownCommand : KeyCommand + { + public VolumeDownCommand(MqttPublisher publisher, string name = "VolumeDown", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_VOLUME_DOWN, name ?? "VolumeDown", id) { } + } +} diff --git a/hass-workstation-service/Domain/Commands/VolumeUpCommand.cs b/hass-workstation-service/Domain/Commands/VolumeUpCommand.cs new file mode 100644 index 0000000..9a13beb --- /dev/null +++ b/hass-workstation-service/Domain/Commands/VolumeUpCommand.cs @@ -0,0 +1,14 @@ +using hass_workstation_service.Communication; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace hass_workstation_service.Domain.Commands +{ + public class VolumeUpCommand : KeyCommand + { + public VolumeUpCommand(MqttPublisher publisher, string name = "VolumeUp", Guid id = default(Guid)) : base(publisher, KeyCommand.VK_VOLUME_UP, name ?? "VolumeUp", id) { } + } +}