mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-01-01 18:23:32 +00:00
Compare commits
4 Commits
8c1fef2883
...
91d1d16f24
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91d1d16f24 | ||
|
|
18d75318d9 | ||
|
|
e588a06516 | ||
|
|
fa8b03104f |
@ -425,10 +425,18 @@ internal class PluginManagementService : IPluginManagementService
|
||||
);
|
||||
}
|
||||
|
||||
bool addedNewFeature = false;
|
||||
foreach (Type featureType in featureTypes)
|
||||
{
|
||||
// Load the enabled state and if not found, default to true
|
||||
PluginFeatureEntity featureEntity = plugin.Entity.Features.FirstOrDefault(i => i.Type == featureType.FullName) ?? new PluginFeatureEntity {Type = featureType.FullName!};
|
||||
PluginFeatureEntity? featureEntity = plugin.Entity.Features.FirstOrDefault(i => i.Type == featureType.FullName);
|
||||
if (featureEntity == null)
|
||||
{
|
||||
featureEntity = new PluginFeatureEntity {Type = featureType.FullName!};
|
||||
entity.Features.Add(featureEntity);
|
||||
addedNewFeature = true;
|
||||
}
|
||||
|
||||
PluginFeatureInfo feature = new(plugin, featureType, featureEntity, (PluginFeatureAttribute?) Attribute.GetCustomAttribute(featureType, typeof(PluginFeatureAttribute)));
|
||||
|
||||
// If the plugin only has a single feature, it should always be enabled
|
||||
@ -443,7 +451,8 @@ internal class PluginManagementService : IPluginManagementService
|
||||
|
||||
// It is appropriate to call this now that we have the features of this plugin
|
||||
bool autoEnabled = plugin.AutoEnableIfNew();
|
||||
if (autoEnabled)
|
||||
|
||||
if (autoEnabled || addedNewFeature)
|
||||
_pluginRepository.SavePlugin(entity);
|
||||
|
||||
List<Type> bootstrappers = plugin.Assembly.GetTypes().Where(t => typeof(PluginBootstrapper).IsAssignableFrom(t)).ToList();
|
||||
@ -662,7 +671,19 @@ internal class PluginManagementService : IPluginManagementService
|
||||
UnloadPlugin(plugin);
|
||||
}
|
||||
|
||||
directory.Delete(true);
|
||||
// Delete plugin.json since that should never be in use and prevents future loads
|
||||
File.Delete(Path.Combine(directory.FullName, "plugin.json"));
|
||||
|
||||
try
|
||||
{
|
||||
// Give a good effort to remove the directory, files may be in use though :\
|
||||
directory.Delete(true);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.Warning(e, "Failed to fully remove plugin directory {Directory}", directory.FullName);
|
||||
}
|
||||
|
||||
if (removeSettings)
|
||||
RemovePluginSettings(plugin);
|
||||
}
|
||||
|
||||
@ -63,11 +63,17 @@ public class PluginEntryInstallationHandler : IEntryInstallationHandler
|
||||
using ZipArchive archive = new(stream);
|
||||
archive.ExtractToDirectory(releaseDirectory.FullName);
|
||||
|
||||
// If there is already a version of the plugin installed, disable it
|
||||
if (installedEntry.TryGetMetadata("PluginId", out Guid pluginId))
|
||||
PluginInfo pluginInfo = CoreJson.Deserialize<PluginInfo>(await File.ReadAllTextAsync(Path.Combine(releaseDirectory.FullName, "plugin.json"), cancellationToken))!;
|
||||
|
||||
// If there is already a version of the plugin installed, remove it
|
||||
Plugin? currentVersion = _pluginManagementService.GetAllPlugins().FirstOrDefault(p => p.Guid == pluginInfo.Guid);
|
||||
if (currentVersion != null)
|
||||
{
|
||||
Plugin? currentVersion = _pluginManagementService.GetAllPlugins().FirstOrDefault(p => p.Guid == pluginId);
|
||||
if (currentVersion != null)
|
||||
// If the current version isn't from the workshop, remove it first
|
||||
if (currentVersion.Directory.FullName.StartsWith(Constants.PluginsFolder))
|
||||
_pluginManagementService.RemovePlugin(currentVersion, false);
|
||||
// If the current version is from the workshop only unload it, the old folder will be orphaned and cleaned up later
|
||||
else
|
||||
_pluginManagementService.UnloadPlugin(currentVersion);
|
||||
}
|
||||
|
||||
@ -96,6 +102,8 @@ public class PluginEntryInstallationHandler : IEntryInstallationHandler
|
||||
return EntryInstallResult.FromFailure(e.Message);
|
||||
}
|
||||
|
||||
installedEntry.ApplyRelease(release);
|
||||
|
||||
_workshopService.SaveInstalledEntry(installedEntry);
|
||||
return EntryInstallResult.FromSuccess(installedEntry);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user