diff --git a/DiscordBotCore.PluginManagement/IPluginManager.cs b/DiscordBotCore.PluginManagement/IPluginManager.cs index 72502e4..05fb7e7 100644 --- a/DiscordBotCore.PluginManagement/IPluginManager.cs +++ b/DiscordBotCore.PluginManagement/IPluginManager.cs @@ -16,6 +16,5 @@ public interface IPluginManager Task GetDependencyLocation(string dependencyName, string pluginName); string GenerateDependencyRelativePath(string pluginName, string dependencyPath); Task InstallPlugin(OnlinePlugin plugin, IProgress progress); - Task, List>> GatherInstallDataForPlugin(OnlinePlugin plugin); Task SetEnabledStatus(string pluginName, bool status); } \ No newline at end of file diff --git a/DiscordBotCore.PluginManagement/PluginManager.cs b/DiscordBotCore.PluginManagement/PluginManager.cs index c54a165..de61de7 100644 --- a/DiscordBotCore.PluginManagement/PluginManager.cs +++ b/DiscordBotCore.PluginManagement/PluginManager.cs @@ -209,13 +209,14 @@ public sealed class PluginManager : IPluginManager public async Task InstallPlugin(OnlinePlugin plugin, IProgress progress) { - List dependencies = await _PluginRepository.GetDependenciesForPlugin(plugin.Id); string? pluginsFolder = _Configuration.Get("PluginFolder"); if (pluginsFolder is null) { throw new Exception("Plugin folder not found"); } + List dependencies = await _PluginRepository.GetDependenciesForPlugin(plugin.Id); + string downloadLocation = $"{pluginsFolder}/{plugin.Name}.dll"; IProgress downloadProgress = new Progress(progress.Report); @@ -237,25 +238,6 @@ public sealed class PluginManager : IPluginManager LocalPlugin localPlugin = LocalPlugin.FromOnlineInfo(plugin, dependencies, downloadLocation); await AppendPluginToDatabase(localPlugin); } - - public async Task, List>> GatherInstallDataForPlugin(OnlinePlugin plugin) - { - List dependencies = await _PluginRepository.GetDependenciesForPlugin(plugin.Id); - string? pluginsFolder = _Configuration.Get("PluginFolder"); - if (pluginsFolder is null) - { - throw new Exception("Plugin folder not found"); - } - string downloadLocation = $"{pluginsFolder}/{plugin.Name}.dll"; - var downloads = new Dictionary { { downloadLocation, plugin.DownloadLink } }; - foreach(var dependency in dependencies) - { - string dependencyLocation = GenerateDependencyRelativePath(plugin.Name, dependency.DownloadLocation); - downloads.Add(dependencyLocation, dependency.DownloadLink); - } - - return (downloads, dependencies).ToTuple(); - } public async Task SetEnabledStatus(string pluginName, bool status) { diff --git a/WebUI/Controllers/PluginsController.cs b/WebUI/Controllers/PluginsController.cs index 2ec5a58..a316e17 100644 --- a/WebUI/Controllers/PluginsController.cs +++ b/WebUI/Controllers/PluginsController.cs @@ -69,6 +69,35 @@ public class PluginsController : Controller return RedirectToAction("InstalledPlugins"); } + [HttpPost] + public async Task GetPluginDetails(string? pluginName) + { + if (pluginName == null) + { + _logger.Log("The plugin name is invalid", this); + return BadRequest(); + } + + _logger.Log($"Gathering information about {pluginName}", this); + + var pluginData = await _pluginManager.GetPluginDataByName(pluginName); + if (pluginData is null) + { + _logger.Log($"Plugin {pluginName} not found", this); + return NotFound("Plugin not found"); + } + + PluginDetailsViewModel model = new PluginDetailsViewModel + { + PluginName = pluginName, + Author = pluginData.Author, + Description = pluginData.Description, + Version = pluginData.Version + }; + + return View("PluginDetails", model); + } + [HttpPost] public async Task InstallPlugin(int pluginId) { diff --git a/WebUI/Models/PluginDetailsViewModel.cs b/WebUI/Models/PluginDetailsViewModel.cs new file mode 100644 index 0000000..2b2d44e --- /dev/null +++ b/WebUI/Models/PluginDetailsViewModel.cs @@ -0,0 +1,9 @@ +namespace WebUI.Models; + +public class PluginDetailsViewModel +{ + public string PluginName { get; set; } + public string Version { get; set; } + public string Description { get; set; } + public string Author { get; set; } +} \ No newline at end of file diff --git a/WebUI/Views/Plugins/InstalledPlugins.cshtml b/WebUI/Views/Plugins/InstalledPlugins.cshtml index f7a6e62..d7d1ead 100644 --- a/WebUI/Views/Plugins/InstalledPlugins.cshtml +++ b/WebUI/Views/Plugins/InstalledPlugins.cshtml @@ -24,7 +24,9 @@
- +
+ +
} diff --git a/WebUI/Views/Plugins/PluginDetails.cshtml b/WebUI/Views/Plugins/PluginDetails.cshtml new file mode 100644 index 0000000..572e9a3 --- /dev/null +++ b/WebUI/Views/Plugins/PluginDetails.cshtml @@ -0,0 +1,101 @@ +@model PluginDetailsViewModel + +@{ + ViewData["Title"] = "Plugin Details"; +} + + + + + + + @ViewData["Title"] + + + + +
+
+
+

@Model.PluginName

+

Version: @Model.Version

+
+ +
+

Description

+

@Model.Description

+

Author: @Model.Author

+
+ + +
+
+ + +