From 496f0e9b74b5649ecab558cb3948a18f6ca98d70 Mon Sep 17 00:00:00 2001 From: Robert Date: Wed, 9 Jun 2021 22:10:34 +0200 Subject: [PATCH] Plugin import - Overwrite existing folder if needed Plugin import - Enable newly imported plugins straight away --- .../Services/PluginManagementService.cs | 2 +- .../Plugins/PluginSettingsTabViewModel.cs | 20 +++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Artemis.Core/Services/PluginManagementService.cs b/src/Artemis.Core/Services/PluginManagementService.cs index 00eb627a0..027ac09af 100644 --- a/src/Artemis.Core/Services/PluginManagementService.cs +++ b/src/Artemis.Core/Services/PluginManagementService.cs @@ -529,7 +529,7 @@ namespace Artemis.Core.Services string targetDirectory = pluginInfo.PreferredPluginDirectory; if (Directory.Exists(Path.Combine(pluginDirectory.FullName, targetDirectory))) - throw new ArtemisPluginException($"A directory for this plugin already exists {Path.Combine(pluginDirectory.FullName, targetDirectory)}"); + Directory.Delete(Path.Combine(pluginDirectory.FullName, targetDirectory), true); // Extract everything in the same archive directory to the unique plugin directory DirectoryInfo directoryInfo = new(Path.Combine(pluginDirectory.FullName, targetDirectory)); diff --git a/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsTabViewModel.cs b/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsTabViewModel.cs index fa9632187..67aa81fa1 100644 --- a/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsTabViewModel.cs +++ b/src/Artemis.UI/Screens/Settings/Tabs/Plugins/PluginSettingsTabViewModel.cs @@ -55,6 +55,7 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins if (!Items.Contains(pluginSettingsViewModel)) Items.Add(pluginSettingsViewModel); } + foreach (PluginSettingsViewModel pluginSettingsViewModel in Items.ToList()) { if (!instances.Contains(pluginSettingsViewModel)) @@ -76,21 +77,28 @@ namespace Artemis.UI.Screens.Settings.Tabs.Plugins base.OnInitialActivate(); } - public void ImportPlugin() + public async Task ImportPlugin() { - VistaOpenFileDialog dialog = new(); - dialog.Filter = "ZIP files (*.zip)|*.zip"; - dialog.Title = "Import Artemis plugin"; + VistaOpenFileDialog dialog = new() {Filter = "ZIP files (*.zip)|*.zip", Title = "Import Artemis plugin"}; bool? result = dialog.ShowDialog(); - if (result == true) + if (result != true) + return; + + // Take the actual import off of the UI thread + await Task.Run(() => { Plugin plugin = _pluginManagementService.ImportPlugin(dialog.FileName); GetPluginInstances(); SearchPluginInput = plugin.Info.Name; + // Enable it via the VM to enable the prerequisite dialog + PluginSettingsViewModel pluginViewModel = Items.FirstOrDefault(i => i.Plugin == plugin); + if (pluginViewModel is {IsEnabled: false}) + pluginViewModel.IsEnabled = true; + _messageService.ShowMessage($"Imported plugin: {plugin.Info.Name}"); - } + }); } public void GetPluginInstances()