mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Plugins - Don't load incompatible plugins
This commit is contained in:
parent
dc17253518
commit
73a80ef476
@ -37,7 +37,7 @@ namespace Artemis.Core.Services
|
|||||||
/// Loads the plugin located in the provided <paramref name="directory" />
|
/// Loads the plugin located in the provided <paramref name="directory" />
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="directory">The directory where the plugin is located</param>
|
/// <param name="directory">The directory where the plugin is located</param>
|
||||||
Plugin LoadPlugin(DirectoryInfo directory);
|
Plugin? LoadPlugin(DirectoryInfo directory);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enables the provided <paramref name="plugin" />
|
/// Enables the provided <paramref name="plugin" />
|
||||||
@ -68,7 +68,7 @@ namespace Artemis.Core.Services
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="fileName">The full path to the ZIP file that contains the plugin</param>
|
/// <param name="fileName">The full path to the ZIP file that contains the plugin</param>
|
||||||
/// <returns>The resulting plugin</returns>
|
/// <returns>The resulting plugin</returns>
|
||||||
Plugin ImportPlugin(string fileName);
|
Plugin? ImportPlugin(string fileName);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Unloads and permanently removes the provided plugin
|
/// Unloads and permanently removes the provided plugin
|
||||||
|
|||||||
@ -292,7 +292,7 @@ namespace Artemis.Core.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plugin LoadPlugin(DirectoryInfo directory)
|
public Plugin? LoadPlugin(DirectoryInfo directory)
|
||||||
{
|
{
|
||||||
_logger.Verbose("Loading plugin from {directory}", directory.FullName);
|
_logger.Verbose("Loading plugin from {directory}", directory.FullName);
|
||||||
|
|
||||||
@ -304,6 +304,9 @@ namespace Artemis.Core.Services
|
|||||||
// PluginInfo contains the ID which we need to move on
|
// PluginInfo contains the ID which we need to move on
|
||||||
PluginInfo pluginInfo = CoreJson.DeserializeObject<PluginInfo>(File.ReadAllText(metadataFile))!;
|
PluginInfo pluginInfo = CoreJson.DeserializeObject<PluginInfo>(File.ReadAllText(metadataFile))!;
|
||||||
|
|
||||||
|
if (!pluginInfo.IsCompatible)
|
||||||
|
return null;
|
||||||
|
|
||||||
if (pluginInfo.Guid == Constants.CorePluginInfo.Guid)
|
if (pluginInfo.Guid == Constants.CorePluginInfo.Guid)
|
||||||
throw new ArtemisPluginException($"Plugin {pluginInfo} cannot use reserved GUID {pluginInfo.Guid}");
|
throw new ArtemisPluginException($"Plugin {pluginInfo} cannot use reserved GUID {pluginInfo.Guid}");
|
||||||
|
|
||||||
@ -531,7 +534,7 @@ namespace Artemis.Core.Services
|
|||||||
OnPluginDisabled(new PluginEventArgs(plugin));
|
OnPluginDisabled(new PluginEventArgs(plugin));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Plugin ImportPlugin(string fileName)
|
public Plugin? ImportPlugin(string fileName)
|
||||||
{
|
{
|
||||||
DirectoryInfo pluginDirectory = new(Constants.PluginsFolder);
|
DirectoryInfo pluginDirectory = new(Constants.PluginsFolder);
|
||||||
|
|
||||||
|
|||||||
@ -13,7 +13,7 @@ namespace Artemis.UI.Screens.Plugins;
|
|||||||
|
|
||||||
public class PluginSettingsViewModel : ActivatableViewModelBase
|
public class PluginSettingsViewModel : ActivatableViewModelBase
|
||||||
{
|
{
|
||||||
private Plugin _plugin;
|
private readonly Plugin _plugin;
|
||||||
|
|
||||||
private readonly IPluginManagementService _pluginManagementService;
|
private readonly IPluginManagementService _pluginManagementService;
|
||||||
private readonly INotificationService _notificationService;
|
private readonly INotificationService _notificationService;
|
||||||
@ -41,10 +41,13 @@ public class PluginSettingsViewModel : ActivatableViewModelBase
|
|||||||
bool wasEnabled = _plugin.IsEnabled;
|
bool wasEnabled = _plugin.IsEnabled;
|
||||||
await Task.Run(() => _pluginManagementService.UnloadPlugin(_plugin));
|
await Task.Run(() => _pluginManagementService.UnloadPlugin(_plugin));
|
||||||
|
|
||||||
_plugin = _pluginManagementService.LoadPlugin(_plugin.Directory);
|
Plugin? plugin = _pluginManagementService.LoadPlugin(_plugin.Directory);
|
||||||
if (wasEnabled)
|
if (plugin != null && wasEnabled)
|
||||||
await Task.Run(() => _pluginManagementService.EnablePlugin(_plugin, true, true));
|
{
|
||||||
|
await Task.Run(() => _pluginManagementService.EnablePlugin(plugin, true, true));
|
||||||
_notificationService.CreateNotification().WithTitle("Reloaded plugin.").Show();
|
_notificationService.CreateNotification().WithTitle("Reloaded plugin.").Show();
|
||||||
|
}
|
||||||
|
else if (plugin == null)
|
||||||
|
_notificationService.CreateNotification().WithTitle("Failed to load plugin after unloading it.").Show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -82,7 +82,13 @@ namespace Artemis.UI.Screens.Settings
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Plugin plugin = _pluginManagementService.ImportPlugin(files[0]);
|
Plugin? plugin = _pluginManagementService.ImportPlugin(files[0]);
|
||||||
|
if (plugin == null)
|
||||||
|
{
|
||||||
|
await _windowService.ShowConfirmContentDialog("Failed to import plugin", "Make sure it is compatible with the current platform.", "Close", null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SearchPluginInput = plugin.Info.Name;
|
SearchPluginInput = plugin.Info.Name;
|
||||||
|
|
||||||
// Wait for the VM to be created asynchronously (it would be better to respond to some event here)
|
// Wait for the VM to be created asynchronously (it would be better to respond to some event here)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user