Fixed plugin deletion

This commit is contained in:
2025-04-23 12:21:44 +03:00
parent f10d72d704
commit 2cb868d747
7 changed files with 66 additions and 53 deletions

View File

@@ -136,7 +136,8 @@ public class PluginRepository : IPluginRepository
List<OnlineDependencyInfo> dependencies = await JsonManager.ConvertFromJson<List<OnlineDependencyInfo>>(content);
return dependencies;
}catch(HttpRequestException exception)
}
catch(HttpRequestException exception)
{
_logger.LogException(exception, this);
return [];

View File

@@ -10,11 +10,11 @@ public interface IPluginManager
Task AppendPluginToDatabase(LocalPlugin pluginData);
Task<List<LocalPlugin>> GetInstalledPlugins();
Task<bool> IsPluginInstalled(string pluginName);
Task<bool> MarkPluginToUninstall(string pluginName);
Task UninstallMarkedPlugins();
Task<string?> GetDependencyLocation(string dependencyName);
Task<string?> GetDependencyLocation(string dependencyName, string pluginName);
string GenerateDependencyRelativePath(string pluginName, string dependencyPath);
Task InstallPlugin(OnlinePlugin plugin, IProgress<float> progress);
Task SetEnabledStatus(string pluginName, bool status);
Task<bool> UninstallPluginByName(string pluginName);
Task<LocalPlugin?> GetLocalPluginByName(string pluginName);
}

View File

@@ -8,17 +8,15 @@ public class LocalPlugin
public string PluginVersion { get; private set; }
public string FilePath { get; private set; }
public Dictionary<string, string> ListOfExecutableDependencies {get; private set;}
public bool IsMarkedToUninstall {get; internal set;}
public bool IsOfflineAdded { get; internal set; }
public bool IsEnabled { get; internal set; }
[JsonConstructor]
public LocalPlugin(string pluginName, string pluginVersion, string filePath, Dictionary<string, string> listOfExecutableDependencies, bool isMarkedToUninstall, bool isOfflineAdded, bool isEnabled)
public LocalPlugin(string pluginName, string pluginVersion, string filePath, Dictionary<string, string> listOfExecutableDependencies, bool isOfflineAdded, bool isEnabled)
{
PluginName = pluginName;
PluginVersion = pluginVersion;
ListOfExecutableDependencies = listOfExecutableDependencies;
IsMarkedToUninstall = isMarkedToUninstall;
FilePath = filePath;
IsOfflineAdded = isOfflineAdded;
IsEnabled = isEnabled;
@@ -30,7 +28,6 @@ public class LocalPlugin
PluginName = pluginName;
PluginVersion = pluginVersion;
ListOfExecutableDependencies = listOfExecutableDependencies;
IsMarkedToUninstall = false;
FilePath = filePath;
IsOfflineAdded = false;
IsEnabled = true;

View File

@@ -127,48 +127,6 @@ public sealed class PluginManager : IPluginManager
return installedPlugins.Any(plugin => plugin.PluginName == pluginName);
}
public async Task<bool> MarkPluginToUninstall(string pluginName)
{
List<LocalPlugin> installedPlugins = await GetInstalledPlugins();
List<LocalPlugin> info = installedPlugins.Where(info => info.PluginName == pluginName).ToList();
if (!info.Any())
return false;
foreach (var item in info)
{
await RemovePluginFromDatabase(item.PluginName);
item.IsMarkedToUninstall = true;
await AppendPluginToDatabase(item);
}
return true;
}
public async Task UninstallMarkedPlugins()
{
IEnumerable<LocalPlugin> installedPlugins = (await GetInstalledPlugins()).AsEnumerable();
IEnumerable<LocalPlugin> pluginsToRemove = installedPlugins.Where(plugin => plugin.IsMarkedToUninstall).AsEnumerable();
foreach (var plugin in pluginsToRemove)
{
await UninstallPlugin(plugin);
}
}
private async Task UninstallPlugin(LocalPlugin LocalPlugin)
{
File.Delete(LocalPlugin.FilePath);
foreach (var dependency in LocalPlugin.ListOfExecutableDependencies)
File.Delete(dependency.Value);
await RemovePluginFromDatabase(LocalPlugin.PluginName);
if (Directory.Exists($"{_LibrariesBaseFolder}/{LocalPlugin.PluginName}"))
Directory.Delete($"{_LibrariesBaseFolder}/{LocalPlugin.PluginName}", true);
}
public async Task<string?> GetDependencyLocation(string dependencyName)
{
List<LocalPlugin> installedPlugins = await GetInstalledPlugins();
@@ -255,6 +213,45 @@ public sealed class PluginManager : IPluginManager
}
public async Task<bool> UninstallPluginByName(string pluginName)
{
var localPlugin = await GetLocalPluginByName(pluginName);
if (localPlugin == null)
{
return false;
}
File.Delete(localPlugin.FilePath);
if (Directory.Exists($"./{_LibrariesBaseFolder}/{pluginName}"))
{
foreach (var file in Directory.EnumerateFiles($"./{_LibrariesBaseFolder}/{pluginName}"))
{
File.Delete(file);
}
}
await RemovePluginFromDatabase(pluginName);
_Logger.Log($"Plugin {pluginName} uninstalled successfully", this, LogType.Info);
return true;
}
public async Task<LocalPlugin?> GetLocalPluginByName(string pluginName)
{
List<LocalPlugin> installedPlugins = await GetInstalledPlugins();
var plugin = installedPlugins.Find(p => p.PluginName == pluginName);
if (plugin == null)
{
_Logger.Log($"Plugin {pluginName} not found in the database", this, LogType.Warning);
return null;
}
return plugin;
}
private async Task<bool> CreateEmptyPluginDatabase()
{
string ? pluginDatabaseFile = _Configuration.Get<string>("PluginDatabase");