Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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();
            }
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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);
            }
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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));
        }
Exemple #7
0
 public SurfaceConfigurationEventArgs(SurfaceConfiguration surfaceConfiguration)
 {
     SurfaceConfiguration = surfaceConfiguration;
 }