diff --git a/DiscordBot/Bot/Actions/Extra/PluginMethods.cs b/DiscordBot/Bot/Actions/Extra/PluginMethods.cs index 3cbf43c..56d37c4 100644 --- a/DiscordBot/Bot/Actions/Extra/PluginMethods.cs +++ b/DiscordBot/Bot/Actions/Extra/PluginMethods.cs @@ -25,17 +25,49 @@ internal static class PluginMethods var data = await ConsoleUtilities.ExecuteWithProgressBar(manager.GetPluginsList(), "Reading remote database"); - TableData tableData = new(["Name", "Description", "Version", "Is Installed"]); + TableData tableData = new(["Name", "Description", "Version", "Is Installed", "Dependencies"]); var installedPlugins = await ConsoleUtilities.ExecuteWithProgressBar(manager.GetInstalledPlugins(), "Reading local database "); foreach (var plugin in data) { bool isInstalled = installedPlugins.Any(p => p.PluginName == plugin.Name); - tableData.AddRow([plugin.Name, plugin.Description, plugin.Version.ToString(), isInstalled ? "Yes" : "No"]); + if (!plugin.HasFileDependencies) + { + tableData.AddRow([plugin.Name, plugin.Description, plugin.Version.ToString(), isInstalled ? "Yes" : "No", "None"]); + continue; + } + + TableData dependenciesTable; + + + if (isInstalled) + { + dependenciesTable = new(["Name", "Location", "Is Executable"]); + foreach (var dep in plugin.Dependencies) + { + dependenciesTable.AddRow([dep.DependencyName, dep.DownloadLocation, dep.IsExecutable ? "Yes" : "No"]); + } + + } + else + { + dependenciesTable = new(["Name", "Is Executable"]); + foreach (var dep in plugin.Dependencies) + { + dependenciesTable.AddRow([dep.DependencyName, dep.IsExecutable ? "Yes" : "No"]); + } + } + + dependenciesTable.DisplayLinesBetweenRows = true; + + Table spectreTable = dependenciesTable.AsTable(); + + tableData.AddRow([plugin.Name, plugin.Description, plugin.Version.ToString(), isInstalled ? "Yes" : "No", spectreTable]); } tableData.HasRoundBorders = false; + tableData.DisplayLinesBetweenRows = true; tableData.PrintTable(); } @@ -44,10 +76,13 @@ internal static class PluginMethods try { await LoadPlugins(quiet ? ["-q"] : null); - await Application.CurrentApplication.InternalActionManager.Initialize(); + }catch(Exception ex) { Application.CurrentApplication.Logger.LogException(ex, typeof(PluginMethods), false); + } finally + { + await Application.CurrentApplication.InternalActionManager.Initialize(); } } diff --git a/DiscordBot/Utilities/TableData.cs b/DiscordBot/Utilities/TableData.cs index 848e4d2..a41136f 100644 --- a/DiscordBot/Utilities/TableData.cs +++ b/DiscordBot/Utilities/TableData.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using DiscordBotCore.Others; using Spectre.Console; @@ -42,29 +43,20 @@ namespace DiscordBot.Utilities foreach (var row in this.Rows) { table.AddRow(row.Select(element => element.Match( - (data) => new Markup(data), - (data) => data + (string data) => new Markup(data), + (IRenderable data) => data ))); } + table.Alignment(Justify.Center); + return table; } public void PrintTable() { - var table = new Table(); - table.Border(this.HasRoundBorders ? TableBorder.Rounded : TableBorder.Square); - table.AddColumns(this.Columns.ToArray()); - table.ShowRowSeparators = DisplayLinesBetweenRows; - foreach (var row in this.Rows) - { - table.AddRow(row.Select(element => element.Match( - (data) => new Markup(data), - (data) => data - ))); - } - - AnsiConsole.Write(table); + if (IsEmpty) return; + AnsiConsole.Write(this.AsTable()); } } }