Core - Split up RGBService into RenderService and DeviceService

Core - Removed rendering from CoreService
Core - Store and restore original device LEDs when applying/clearing layouts
This commit is contained in:
Robert committed 2023-10-05 20:38:07 +02:00
1 parent 919199a8d0
commit 2a0a0f3cfd
43 files changed
+1363 -1189

No files matched your search

@@ -17,20 +17,16 @@ namespace Artemis.UI.Screens.Device;
public class DeviceDetectInputViewModel : ContentDialogViewModelBase
{
private readonly IInputService _inputService;
private readonly ListLedGroup _ledGroup;
private readonly INotificationService _notificationService;
private readonly IRgbService _rgbService;
public DeviceDetectInputViewModel(ArtemisDevice device, IInputService inputService, INotificationService notificationService, IRgbService rgbService)
public DeviceDetectInputViewModel(ArtemisDevice device, IInputService inputService, INotificationService notificationService, IRenderService renderService)
{
_inputService = inputService;
_notificationService = notificationService;
_rgbService = rgbService;
Device = device;
// Create a LED group way at the top
_ledGroup = new ListLedGroup(_rgbService.Surface, Device.Leds.Select(l => l.RgbLed))
ListLedGroup ledGroup = new(renderService.Surface, Device.Leds.Select(l => l.RgbLed))
{
Brush = new SolidColorBrush(new Color(255, 255, 0)),
ZIndex = 999
@@ -46,7 +42,7 @@ public class DeviceDetectInputViewModel : ContentDialogViewModelBase
Disposable.Create(() =>
{
_inputService.StopIdentify();
_ledGroup.Detach();
ledGroup.Detach();
}).DisposeWith(disposables);
});
}
@@ -17,7 +17,7 @@ public class DevicePropertiesViewModel : DialogViewModelBase<object>
private readonly IDeviceVmFactory _deviceVmFactory;
private ArtemisDevice _device;
public DevicePropertiesViewModel(ArtemisDevice device, ICoreService coreService, IRgbService rgbService, IDeviceVmFactory deviceVmFactory)
public DevicePropertiesViewModel(ArtemisDevice device, IRenderService renderService, IDeviceService deviceService, IDeviceVmFactory deviceVmFactory)
{
_deviceVmFactory = deviceVmFactory;
_device = device;
@@ -28,10 +28,15 @@ public class DevicePropertiesViewModel : DialogViewModelBase<object>
AddTabs();
this.WhenActivated(d =>
{
rgbService.DeviceAdded += RgbServiceOnDeviceAdded;
rgbService.DeviceRemoved += RgbServiceOnDeviceRemoved;
coreService.FrameRendering += CoreServiceOnFrameRendering;
Disposable.Create(() => coreService.FrameRendering -= CoreServiceOnFrameRendering).DisposeWith(d);
deviceService.DeviceAdded += DeviceServiceOnDeviceAdded;
deviceService.DeviceRemoved += DeviceServiceOnDeviceRemoved;
renderService.FrameRendering += RenderServiceOnFrameRendering;
Disposable.Create(() =>
{
deviceService.DeviceAdded -= DeviceServiceOnDeviceAdded;
deviceService.DeviceRemoved -= DeviceServiceOnDeviceRemoved;
renderService.FrameRendering -= RenderServiceOnFrameRendering;
}).DisposeWith(d);
});
ClearSelectedLeds = ReactiveCommand.Create(ExecuteClearSelectedLeds);
@@ -47,7 +52,7 @@ public class DevicePropertiesViewModel : DialogViewModelBase<object>
public ObservableCollection<ActivatableViewModelBase> Tabs { get; }
public ReactiveCommand<Unit, Unit> ClearSelectedLeds { get; }
private void RgbServiceOnDeviceAdded(object? sender, DeviceEventArgs e)
private void DeviceServiceOnDeviceAdded(object? sender, DeviceEventArgs e)
{
if (e.Device.Identifier != Device.Identifier || Device == e.Device)
return;
@@ -56,7 +61,7 @@ public class DevicePropertiesViewModel : DialogViewModelBase<object>
AddTabs();
}
private void RgbServiceOnDeviceRemoved(object? sender, DeviceEventArgs e)
private void DeviceServiceOnDeviceRemoved(object? sender, DeviceEventArgs e)
{
Tabs.Clear();
SelectedLeds.Clear();
@@ -76,7 +81,7 @@ public class DevicePropertiesViewModel : DialogViewModelBase<object>
SelectedLeds.Clear();
}
private void CoreServiceOnFrameRendering(object? sender, FrameRenderingEventArgs e)
private void RenderServiceOnFrameRendering(object? sender, FrameRenderingEventArgs e)
{
if (!SelectedLeds.Any())
return;
@@ -18,18 +18,15 @@ public class DeviceSettingsViewModel : ActivatableViewModelBase
private readonly IDeviceService _deviceService;
private readonly DevicesTabViewModel _devicesTabViewModel;
private readonly IDeviceVmFactory _deviceVmFactory;
private readonly IRgbService _rgbService;
private readonly IWindowService _windowService;
private bool _togglingDevice;
public DeviceSettingsViewModel(ArtemisDevice device, DevicesTabViewModel devicesTabViewModel, IDeviceService deviceService, IWindowService windowService, IDeviceVmFactory deviceVmFactory,
IRgbService rgbService)
public DeviceSettingsViewModel(ArtemisDevice device, DevicesTabViewModel devicesTabViewModel, IDeviceService deviceService, IWindowService windowService, IDeviceVmFactory deviceVmFactory)
{
_devicesTabViewModel = devicesTabViewModel;
_deviceService = deviceService;
_windowService = windowService;
_deviceVmFactory = deviceVmFactory;
_rgbService = rgbService;
Device = device;
Type = Device.DeviceType.ToString().Humanize();
@@ -87,7 +84,7 @@ public class DeviceSettingsViewModel : ActivatableViewModelBase
.ShowAsync();
if (viewModel.MadeChanges)
_rgbService.SaveDevice(Device);
_deviceService.SaveDevice(Device);
}
private async Task UpdateIsDeviceEnabled(bool value)
@@ -103,9 +100,9 @@ public class DeviceSettingsViewModel : ActivatableViewModelBase
value = !await _devicesTabViewModel.ShowDeviceDisableDialog();
if (value)
_rgbService.EnableDevice(Device);
_deviceService.EnableDevice(Device);
else
_rgbService.DisableDevice(Device);
_deviceService.DisableDevice(Device);
this.RaisePropertyChanged(nameof(IsDeviceEnabled));
SaveDevice();
@@ -118,6 +115,6 @@ public class DeviceSettingsViewModel : ActivatableViewModelBase
private void SaveDevice()
{
_rgbService.SaveDevice(Device);
_deviceService.SaveDevice(Device);
}
}
@@ -20,7 +20,8 @@ namespace Artemis.UI.Screens.Device;
public class DeviceGeneralTabViewModel : ActivatableViewModelBase
{
private readonly ICoreService _coreService;
private readonly IRgbService _rgbService;
private readonly IDeviceService _deviceService;
private readonly IRenderService _renderService;
private readonly IWindowService _windowService;
private readonly List<DeviceCategory> _categories;
@@ -39,10 +40,11 @@ public class DeviceGeneralTabViewModel : ActivatableViewModelBase
private SKColor _currentColor;
private bool _displayOnDevices;
public DeviceGeneralTabViewModel(ArtemisDevice device, ICoreService coreService, IRgbService rgbService, IWindowService windowService)
public DeviceGeneralTabViewModel(ArtemisDevice device, ICoreService coreService, IDeviceService deviceService, IRenderService renderService, IWindowService windowService)
{
_coreService = coreService;
_rgbService = rgbService;
_deviceService = deviceService;
_renderService = renderService;
_windowService = windowService;
_categories = new List<DeviceCategory>(device.Categories);
@@ -66,11 +68,11 @@ public class DeviceGeneralTabViewModel : ActivatableViewModelBase
this.WhenActivated(d =>
{
_coreService.FrameRendering += OnFrameRendering;
_renderService.FrameRendering += OnFrameRendering;
Disposable.Create(() =>
{
_coreService.FrameRendering -= OnFrameRendering;
_renderService.FrameRendering -= OnFrameRendering;
Apply();
}).DisposeWith(d);
});
@@ -191,17 +193,12 @@ public class DeviceGeneralTabViewModel : ActivatableViewModelBase
return;
await Task.Delay(400);
_rgbService.SaveDevice(Device);
_rgbService.ApplyBestDeviceLayout(Device);
_deviceService.SaveDevice(Device);
_deviceService.ApplyDeviceLayout(Device, Device.GetBestDeviceLayout());
}
private void Apply()
{
// TODO: Validation
_coreService.ProfileRenderingDisabled = true;
Thread.Sleep(100);
Device.X = X;
Device.Y = Y;
Device.Scale = Scale;
@@ -213,9 +210,7 @@ public class DeviceGeneralTabViewModel : ActivatableViewModelBase
foreach (DeviceCategory deviceCategory in _categories)
Device.Categories.Add(deviceCategory);
_rgbService.SaveDevice(Device);
_coreService.ProfileRenderingDisabled = false;
_deviceService.SaveDevice(Device);
}
public void ApplyScaling()
@@ -224,7 +219,7 @@ public class DeviceGeneralTabViewModel : ActivatableViewModelBase
Device.GreenScale = GreenScale / 100f;
Device.BlueScale = BlueScale / 100f;
_rgbService.FlushLeds = true;
_renderService.FlushLeds = true;
}
public void ResetScaling()
@@ -22,20 +22,13 @@ public class DeviceLayoutTabViewModel : ActivatableViewModelBase
{
private readonly IWindowService _windowService;
private readonly INotificationService _notificationService;
private readonly ICoreService _coreService;
private readonly IRgbService _rgbService;
private readonly IDeviceService _deviceService;
public DeviceLayoutTabViewModel(
IWindowService windowService,
INotificationService notificationService,
ICoreService coreService,
IRgbService rgbService,
ArtemisDevice device)
public DeviceLayoutTabViewModel(IWindowService windowService, INotificationService notificationService, IDeviceService deviceService, ArtemisDevice device)
{
_windowService = windowService;
_notificationService = notificationService;
_coreService = coreService;
_rgbService = rgbService;
_deviceService = deviceService;
Device = device;
DisplayName = "Layout";
@@ -160,6 +153,6 @@ public class DeviceLayoutTabViewModel : ActivatableViewModelBase
private void DeviceOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName is nameof(Device.CustomLayoutPath) or nameof(Device.DisableDefaultLayout))
Task.Run(() => _rgbService.ApplyBestDeviceLayout(Device));
Task.Run(() => _deviceService.ApplyDeviceLayout(Device, Device.GetBestDeviceLayout()));
}
}
@@ -16,17 +16,17 @@ namespace Artemis.UI.Screens.Device;
public class InputMappingsTabViewModel : ActivatableViewModelBase
{
private readonly IInputService _inputService;
private readonly IRgbService _rgbService;
private readonly IDeviceService _deviceService;
private readonly ObservableCollection<ArtemisLed> _selectedLeds;
private ArtemisLed? _selectedLed;
public InputMappingsTabViewModel(ArtemisDevice device, ObservableCollection<ArtemisLed> selectedLeds, IRgbService rgbService, IInputService inputService)
public InputMappingsTabViewModel(ArtemisDevice device, ObservableCollection<ArtemisLed> selectedLeds, IInputService inputService, IDeviceService deviceService)
{
if (device.DeviceType != RGBDeviceType.Keyboard)
throw new ArtemisUIException("The input mappings tab only supports keyboards");
_rgbService = rgbService;
_inputService = inputService;
_deviceService = deviceService;
_selectedLeds = selectedLeds;
Device = device;
@@ -81,7 +81,7 @@ public class InputMappingsTabViewModel : ActivatableViewModelBase
// Apply the new LED mapping
Device.InputMappings[SelectedLed] = artemisLed;
_rgbService.SaveDevice(Device);
_deviceService.SaveDevice(Device);
_selectedLeds.Clear();
UpdateInputMappings();