private void LoadFromRepository() { var configs = _surfaceRepository.GetAll(); foreach (var surfaceEntity in configs) { // Create the surface configuration var surfaceConfiguration = new SurfaceConfiguration(surfaceEntity); // For each loaded device, match a device configuration var devices = _rgbService.LoadedDevices; foreach (var rgbDevice in devices) { MatchDeviceConfiguration(rgbDevice, surfaceConfiguration); } // Finally, add the surface config to the collection lock (_surfaceConfigurations) { _surfaceConfigurations.Add(surfaceConfiguration); } } // When all surface configs are loaded, apply the active surface config var active = SurfaceConfigurations.FirstOrDefault(c => c.IsActive); if (active != null) { ActiveSurfaceConfiguration = active; } }
public void DeleteSurfaceConfiguration(SurfaceConfiguration surfaceConfiguration) { if (surfaceConfiguration == ActiveSurfaceConfiguration) { throw new ArtemisCoreException($"Cannot delete surface configuration '{surfaceConfiguration.Name}' because it is active."); } lock (_surfaceConfigurations) { surfaceConfiguration.Destroy(); _surfaceConfigurations.Remove(surfaceConfiguration); _surfaceRepository.Remove(surfaceConfiguration.SurfaceEntity); _surfaceRepository.Save(); } }
private void MatchDeviceConfiguration(IRGBDevice rgbDevice, SurfaceConfiguration surfaceConfiguration) { var deviceId = GetDeviceId(rgbDevice); var deviceConfig = surfaceConfiguration.DeviceConfigurations.FirstOrDefault(d => d.DeviceName == rgbDevice.DeviceInfo.DeviceName && d.DeviceModel == rgbDevice.DeviceInfo.Model && d.DeviceManufacturer == rgbDevice.DeviceInfo.Manufacturer && d.DeviceId == deviceId); if (deviceConfig == null) { _logger.Information("No active surface config found for {deviceInfo}, device ID: {deviceId}. Adding a new entry.", rgbDevice.DeviceInfo, deviceId); deviceConfig = new SurfaceDeviceConfiguration(rgbDevice, deviceId, surfaceConfiguration); surfaceConfiguration.DeviceConfigurations.Add(deviceConfig); } deviceConfig.Device = rgbDevice; deviceConfig.ApplyToDevice(); }
public SurfaceConfiguration CreateSurfaceConfiguration(string name) { // Create a blank config var configuration = new SurfaceConfiguration(name); // Add all current devices foreach (var rgbDevice in _rgbService.LoadedDevices) { var deviceId = GetDeviceId(rgbDevice); configuration.DeviceConfigurations.Add(new SurfaceDeviceConfiguration(rgbDevice, deviceId, configuration)); } lock (_surfaceConfigurations) { _surfaceRepository.Add(configuration.SurfaceEntity); UpdateSurfaceConfiguration(configuration, true); return(configuration); } }
public void UpdateSurfaceConfiguration(SurfaceConfiguration surfaceConfiguration, bool includeDevices) { surfaceConfiguration.ApplyToEntity(); if (includeDevices) { foreach (var deviceConfiguration in surfaceConfiguration.DeviceConfigurations) { deviceConfiguration.ApplyToEntity(); if (surfaceConfiguration.IsActive) { deviceConfiguration.ApplyToDevice(); } } } _surfaceRepository.Save(); _rgbService.UpdateGraphicsDecorator(); OnSurfaceConfigurationUpdated(new SurfaceConfigurationEventArgs(surfaceConfiguration)); }
public void SetActiveSurfaceConfiguration(SurfaceConfiguration surfaceConfiguration) { if (ActiveSurfaceConfiguration == surfaceConfiguration) { return; } // Set the new configuration ActiveSurfaceConfiguration = surfaceConfiguration; // Ensure only the new configuration is marked as active lock (_surfaceConfigurations) { // Mark only the new surfaceConfiguration as active foreach (var configuration in _surfaceConfigurations) { configuration.IsActive = configuration == ActiveSurfaceConfiguration; configuration.ApplyToEntity(); } _surfaceRepository.Save(); } // Apply the active surface configuration to the devices if (ActiveSurfaceConfiguration != null) { foreach (var deviceConfiguration in ActiveSurfaceConfiguration.DeviceConfigurations) { deviceConfiguration.ApplyToDevice(); } } // Update the RGB service's graphics decorator to work with the new surface configuration _rgbService.UpdateGraphicsDecorator(); OnActiveSurfaceConfigurationChanged(new SurfaceConfigurationEventArgs(ActiveSurfaceConfiguration)); }
public SurfaceConfigurationEventArgs(SurfaceConfiguration surfaceConfiguration) { SurfaceConfiguration = surfaceConfiguration; }