From daac4e44ee08857b09a84b70f96a625c92f3588a Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 22 Sep 2021 21:42:42 +0200 Subject: [PATCH] Plugins - Remove related device settings when clearing plugin settings --- src/Artemis.Core/Models/Surface/ArtemisDevice.cs | 1 + src/Artemis.Core/Services/PluginManagementService.cs | 9 ++++++++- src/Artemis.Storage/Entities/Surface/DeviceEntity.cs | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Artemis.Core/Models/Surface/ArtemisDevice.cs b/src/Artemis.Core/Models/Surface/ArtemisDevice.cs index b8034ca26..1fa950b3c 100644 --- a/src/Artemis.Core/Models/Surface/ArtemisDevice.cs +++ b/src/Artemis.Core/Models/Surface/ArtemisDevice.cs @@ -457,6 +457,7 @@ namespace Artemis.Core { // Other properties are computed DeviceEntity.Id = Identifier; + DeviceEntity.DeviceProvider = DeviceProvider.Plugin.Guid.ToString(); DeviceEntity.InputIdentifiers.Clear(); foreach (ArtemisDeviceInputIdentifier identifier in InputIdentifiers) diff --git a/src/Artemis.Core/Services/PluginManagementService.cs b/src/Artemis.Core/Services/PluginManagementService.cs index 6c528bcfe..d03c22e3e 100644 --- a/src/Artemis.Core/Services/PluginManagementService.cs +++ b/src/Artemis.Core/Services/PluginManagementService.cs @@ -10,6 +10,7 @@ using Artemis.Core.DeviceProviders; using Artemis.Core.Ninject; using Artemis.Storage.Entities.General; using Artemis.Storage.Entities.Plugins; +using Artemis.Storage.Entities.Surface; using Artemis.Storage.Repositories.Interfaces; using McMaster.NETCore.Plugins; using Ninject; @@ -28,15 +29,17 @@ namespace Artemis.Core.Services private readonly IKernel _kernel; private readonly ILogger _logger; private readonly IPluginRepository _pluginRepository; + private readonly IDeviceRepository _deviceRepository; private readonly IQueuedActionRepository _queuedActionRepository; private readonly List _plugins; private bool _isElevated; - public PluginManagementService(IKernel kernel, ILogger logger, IPluginRepository pluginRepository, IQueuedActionRepository queuedActionRepository) + public PluginManagementService(IKernel kernel, ILogger logger, IPluginRepository pluginRepository, IDeviceRepository deviceRepository, IQueuedActionRepository queuedActionRepository) { _kernel = kernel; _logger = logger; _pluginRepository = pluginRepository; + _deviceRepository = deviceRepository; _queuedActionRepository = queuedActionRepository; _plugins = new List(); @@ -572,7 +575,11 @@ namespace Artemis.Core.Services { if (plugin.IsEnabled) throw new ArtemisCoreException("Cannot remove the settings of an enabled plugin"); + _pluginRepository.RemoveSettings(plugin.Guid); + foreach (DeviceEntity deviceEntity in _deviceRepository.GetAll().Where(e => e.DeviceProvider == plugin.Guid.ToString())) + _deviceRepository.Remove(deviceEntity); + plugin.Settings?.ClearSettings(); } diff --git a/src/Artemis.Storage/Entities/Surface/DeviceEntity.cs b/src/Artemis.Storage/Entities/Surface/DeviceEntity.cs index 6cce72dcc..a1c6784ba 100644 --- a/src/Artemis.Storage/Entities/Surface/DeviceEntity.cs +++ b/src/Artemis.Storage/Entities/Surface/DeviceEntity.cs @@ -12,6 +12,7 @@ namespace Artemis.Storage.Entities.Surface } public string Id { get; set; } + public string DeviceProvider { get; set; } public float X { get; set; } public float Y { get; set; } public float Rotation { get; set; }