Updated Logger. Local plugin database has now only executable dependencies stored in the database

This commit is contained in:
2024-07-01 13:07:34 +03:00
parent fa7e7988d5
commit 9b563cc0f6
10 changed files with 33 additions and 22 deletions

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using DiscordBot.Utilities;
@@ -40,9 +41,15 @@ internal static class PluginMethods
internal static async Task RefreshPlugins(bool quiet)
{
try
{
await LoadPlugins(quiet ? ["-q"] : null);
await Application.CurrentApplication.InternalActionManager.Initialize();
}catch(Exception ex)
{
Application.CurrentApplication.Logger.LogException(ex, typeof(PluginMethods), false);
}
}
internal static async Task DownloadPlugin(PluginManager manager, string pluginName)
@@ -108,7 +115,7 @@ internal static class PluginMethods
foreach (var dependency in pluginData.Dependencies)
{
var task = ctx.AddTask($"Downloading {dependency.DownloadLocation}: ");
var task = ctx.AddTask($"Downloading {dependency.DownloadLocation} -> Executable: {dependency.IsExecutable}: ");
IProgress<float> progress = new Progress<float>(p =>
{
task.Value = p;

View File

@@ -1,5 +1,4 @@
using System;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
@@ -22,10 +21,10 @@ public class Program
/// </summary>
public static async Task Startup(string[] args)
{
await LoadComponents(args);
await PrepareConsole();
await PluginMethods.LoadPlugins(null);
await Application.CurrentApplication.InternalActionManager.Initialize();
await PluginMethods.RefreshPlugins(false);
await ConsoleInputHandler();
}
@@ -54,7 +53,6 @@ public class Program
/// <returns>Returns the bootloader for the Discord Bot</returns>
private static async Task PrepareConsole()
{
AnsiConsole.MarkupLine($"[yellow]Running on version: {Assembly.GetExecutingAssembly().GetName().Version}[/]");
AnsiConsole.MarkupLine("[yellow]Git SethBot: https://github.com/andreitdr/SethDiscordBot [/]");
AnsiConsole.MarkupLine("[yellow]Git Plugins: https://github.com/andreitdr/SethPlugins [/]");

View File

@@ -1,14 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Spectre.Console;
namespace DiscordBot.Utilities;
public static class ConsoleUtilities
internal static class ConsoleUtilities
{
public static async Task<T> ExecuteWithProgressBar<T>(Task<T> function, string message)
{
T result = default;
@@ -28,4 +26,5 @@ public static class ConsoleUtilities
return result;
}
}

View File

@@ -11,7 +11,7 @@ namespace DiscordBotCore.Interfaces.Logger
public string LogMessageFormat { get; set; }
public void Log(ILogMessage message);
public void LogException(Exception exception, object Sender);
public void LogException(Exception exception, object Sender, bool logFullStack = false);
public event EventHandler<FormattedMessage> OnFormattedLog;
public event EventHandler<ILogMessage> OnRawLog;

View File

@@ -1,9 +1,7 @@
using System;
using System.Collections.Frozen;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using DiscordBotCore.Others;
using DiscordBotCore.Plugin;
@@ -165,6 +163,9 @@ public class PluginManager
File.Delete(dependency.Value);
await RemovePluginFromDatabase(pluginInfo.PluginName);
if (Directory.Exists($"Libraries/{pluginInfo.PluginName}"))
Directory.Delete($"Libraries/{pluginInfo.PluginName}", true);
}
public async Task<string> GetDependencyLocation(string dependencyName)
@@ -177,7 +178,7 @@ public class PluginManager
return plugin.ListOfDependancies[dependencyName];
}
throw new Exception("Dependency not found");
return string.Empty;
}
public string GenerateDependencyLocation(string pluginName, string dependencyName)

View File

@@ -71,9 +71,9 @@ namespace DiscordBotCore.Others.Logger
return this;
}
public static LogMessage CreateFromException(Exception exception, object Sender)
public static LogMessage CreateFromException(Exception exception, object Sender, bool logFullStack)
{
LogMessage message = new LogMessage(exception.ToString(), Sender, LogType.ERROR);
LogMessage message = new LogMessage(logFullStack? exception.ToString() : exception.Message, Sender, LogType.ERROR);
return message;
}
}

View File

@@ -85,5 +85,5 @@ public sealed class Logger : ILogger
public void Log(string message, LogType logType) => Log(new LogMessage(message, logType));
public void Log(string message, object Sender) => Log(new LogMessage(message, Sender));
public void Log(string message, object Sender, LogType type) => Log(new LogMessage(message, Sender, type));
public void LogException(Exception exception, object Sender) => Log(LogMessage.CreateFromException(exception, Sender));
public void LogException(Exception exception, object Sender, bool logFullStack = false) => Log(LogMessage.CreateFromException(exception, Sender, logFullStack));
}

View File

@@ -8,12 +8,14 @@ public class OnlineDependencyInfo
public string DependencyName { get; private set; }
public string DownloadLink { get; private set; }
public string DownloadLocation { get; private set; }
public bool IsExecutable { get; private set; }
[JsonConstructor]
public OnlineDependencyInfo(string dependencyName, string downloadLink, string downloadLocation)
public OnlineDependencyInfo(string dependencyName, string downloadLink, string downloadLocation, bool isExecutable)
{
DependencyName = dependencyName;
DownloadLink = downloadLink;
DownloadLocation = downloadLocation;
IsExecutable = isExecutable;
}
}

View File

@@ -1,4 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
@@ -37,6 +36,11 @@ public class PluginInfo
public static PluginInfo FromOnlineInfo(PluginOnlineInfo onlineInfo)
{
return new PluginInfo(onlineInfo.Name, onlineInfo.Version, onlineInfo.Dependencies.Select(dep => new KeyValuePair<string, string>(dep.DependencyName, dep.DownloadLocation)).ToDictionary());
return new PluginInfo(onlineInfo.Name,
onlineInfo.Version,
onlineInfo.Dependencies
.Where(dep => dep.IsExecutable)
.Select(dep => new KeyValuePair<string, string>(dep.DependencyName, dep.DownloadLocation))
.ToDictionary());
}
}

View File

@@ -43,7 +43,7 @@ public class PluginUpdater
await ServerCom.DownloadFileAsync(pluginInfo.DownLoadLink, $"{DiscordBotCore.Application.CurrentApplication.ApplicationEnvironmentVariables["PluginFolder"]}/{pluginName}.dll", progressMeter);
foreach(OnlineDependencyInfo dependency in pluginInfo.Dependencies)
await ServerCom.DownloadFileAsync(dependency.DownloadLocation, dependency.DownloadLocation, progressMeter);
await ServerCom.DownloadFileAsync(dependency.DownloadLink, dependency.DownloadLocation, progressMeter);
await _PluginsManager.RemovePluginFromDatabase(pluginName);
await _PluginsManager.AppendPluginToDatabase(PluginInfo.FromOnlineInfo(pluginInfo));