Updated Logger. Local plugin database has now only executable dependencies stored in the database
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using DiscordBot.Utilities;
|
using DiscordBot.Utilities;
|
||||||
@@ -40,9 +41,15 @@ internal static class PluginMethods
|
|||||||
|
|
||||||
internal static async Task RefreshPlugins(bool quiet)
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
await LoadPlugins(quiet ? ["-q"] : null);
|
|
||||||
await Application.CurrentApplication.InternalActionManager.Initialize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task DownloadPlugin(PluginManager manager, string pluginName)
|
internal static async Task DownloadPlugin(PluginManager manager, string pluginName)
|
||||||
@@ -108,7 +115,7 @@ internal static class PluginMethods
|
|||||||
|
|
||||||
foreach (var dependency in pluginData.Dependencies)
|
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 =>
|
IProgress<float> progress = new Progress<float>(p =>
|
||||||
{
|
{
|
||||||
task.Value = p;
|
task.Value = p;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@@ -22,10 +21,10 @@ public class Program
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static async Task Startup(string[] args)
|
public static async Task Startup(string[] args)
|
||||||
{
|
{
|
||||||
|
|
||||||
await LoadComponents(args);
|
await LoadComponents(args);
|
||||||
await PrepareConsole();
|
await PrepareConsole();
|
||||||
await PluginMethods.LoadPlugins(null);
|
await PluginMethods.RefreshPlugins(false);
|
||||||
await Application.CurrentApplication.InternalActionManager.Initialize();
|
|
||||||
await ConsoleInputHandler();
|
await ConsoleInputHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,7 +53,6 @@ public class Program
|
|||||||
/// <returns>Returns the bootloader for the Discord Bot</returns>
|
/// <returns>Returns the bootloader for the Discord Bot</returns>
|
||||||
private static async Task PrepareConsole()
|
private static async Task PrepareConsole()
|
||||||
{
|
{
|
||||||
|
|
||||||
AnsiConsole.MarkupLine($"[yellow]Running on version: {Assembly.GetExecutingAssembly().GetName().Version}[/]");
|
AnsiConsole.MarkupLine($"[yellow]Running on version: {Assembly.GetExecutingAssembly().GetName().Version}[/]");
|
||||||
AnsiConsole.MarkupLine("[yellow]Git SethBot: https://github.com/andreitdr/SethDiscordBot [/]");
|
AnsiConsole.MarkupLine("[yellow]Git SethBot: https://github.com/andreitdr/SethDiscordBot [/]");
|
||||||
AnsiConsole.MarkupLine("[yellow]Git Plugins: https://github.com/andreitdr/SethPlugins [/]");
|
AnsiConsole.MarkupLine("[yellow]Git Plugins: https://github.com/andreitdr/SethPlugins [/]");
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
|
|
||||||
namespace DiscordBot.Utilities;
|
namespace DiscordBot.Utilities;
|
||||||
|
|
||||||
public static class ConsoleUtilities
|
internal static class ConsoleUtilities
|
||||||
{
|
{
|
||||||
|
|
||||||
public static async Task<T> ExecuteWithProgressBar<T>(Task<T> function, string message)
|
public static async Task<T> ExecuteWithProgressBar<T>(Task<T> function, string message)
|
||||||
{
|
{
|
||||||
T result = default;
|
T result = default;
|
||||||
@@ -28,4 +26,5 @@ public static class ConsoleUtilities
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ namespace DiscordBotCore.Interfaces.Logger
|
|||||||
public string LogMessageFormat { get; set; }
|
public string LogMessageFormat { get; set; }
|
||||||
|
|
||||||
public void Log(ILogMessage message);
|
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<FormattedMessage> OnFormattedLog;
|
||||||
public event EventHandler<ILogMessage> OnRawLog;
|
public event EventHandler<ILogMessage> OnRawLog;
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Frozen;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using DiscordBotCore.Others;
|
using DiscordBotCore.Others;
|
||||||
using DiscordBotCore.Plugin;
|
using DiscordBotCore.Plugin;
|
||||||
@@ -165,6 +163,9 @@ public class PluginManager
|
|||||||
File.Delete(dependency.Value);
|
File.Delete(dependency.Value);
|
||||||
|
|
||||||
await RemovePluginFromDatabase(pluginInfo.PluginName);
|
await RemovePluginFromDatabase(pluginInfo.PluginName);
|
||||||
|
|
||||||
|
if (Directory.Exists($"Libraries/{pluginInfo.PluginName}"))
|
||||||
|
Directory.Delete($"Libraries/{pluginInfo.PluginName}", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> GetDependencyLocation(string dependencyName)
|
public async Task<string> GetDependencyLocation(string dependencyName)
|
||||||
@@ -177,7 +178,7 @@ public class PluginManager
|
|||||||
return plugin.ListOfDependancies[dependencyName];
|
return plugin.ListOfDependancies[dependencyName];
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Exception("Dependency not found");
|
return string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GenerateDependencyLocation(string pluginName, string dependencyName)
|
public string GenerateDependencyLocation(string pluginName, string dependencyName)
|
||||||
|
|||||||
@@ -71,9 +71,9 @@ namespace DiscordBotCore.Others.Logger
|
|||||||
return this;
|
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;
|
return message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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, 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) => Log(new LogMessage(message, Sender));
|
||||||
public void Log(string message, object Sender, LogType type) => Log(new LogMessage(message, Sender, type));
|
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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,12 +8,14 @@ public class OnlineDependencyInfo
|
|||||||
public string DependencyName { get; private set; }
|
public string DependencyName { get; private set; }
|
||||||
public string DownloadLink { get; private set; }
|
public string DownloadLink { get; private set; }
|
||||||
public string DownloadLocation { get; private set; }
|
public string DownloadLocation { get; private set; }
|
||||||
|
public bool IsExecutable { get; private set; }
|
||||||
|
|
||||||
[JsonConstructor]
|
[JsonConstructor]
|
||||||
public OnlineDependencyInfo(string dependencyName, string downloadLink, string downloadLocation)
|
public OnlineDependencyInfo(string dependencyName, string downloadLink, string downloadLocation, bool isExecutable)
|
||||||
{
|
{
|
||||||
DependencyName = dependencyName;
|
DependencyName = dependencyName;
|
||||||
DownloadLink = downloadLink;
|
DownloadLink = downloadLink;
|
||||||
DownloadLocation = downloadLocation;
|
DownloadLocation = downloadLocation;
|
||||||
|
IsExecutable = isExecutable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
@@ -37,6 +36,11 @@ public class PluginInfo
|
|||||||
|
|
||||||
public static PluginInfo FromOnlineInfo(PluginOnlineInfo onlineInfo)
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public class PluginUpdater
|
|||||||
await ServerCom.DownloadFileAsync(pluginInfo.DownLoadLink, $"{DiscordBotCore.Application.CurrentApplication.ApplicationEnvironmentVariables["PluginFolder"]}/{pluginName}.dll", progressMeter);
|
await ServerCom.DownloadFileAsync(pluginInfo.DownLoadLink, $"{DiscordBotCore.Application.CurrentApplication.ApplicationEnvironmentVariables["PluginFolder"]}/{pluginName}.dll", progressMeter);
|
||||||
|
|
||||||
foreach(OnlineDependencyInfo dependency in pluginInfo.Dependencies)
|
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.RemovePluginFromDatabase(pluginName);
|
||||||
await _PluginsManager.AppendPluginToDatabase(PluginInfo.FromOnlineInfo(pluginInfo));
|
await _PluginsManager.AppendPluginToDatabase(PluginInfo.FromOnlineInfo(pluginInfo));
|
||||||
|
|||||||
Reference in New Issue
Block a user