using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using DiscordBotCore.Online; using DiscordBotCore.Others; using DiscordBotCore.Plugin; namespace DiscordBotCore.Updater.Plugins; public class PluginUpdater { private readonly PluginManager _PluginsManager; public PluginUpdater(PluginManager pluginManager) { _PluginsManager = pluginManager; } public async Task GetPluginInfo(string pluginName) { var result = await _PluginsManager.GetPluginDataByName(pluginName); return result; } public async Task GetLocalPluginInfo(string pluginName) { string pluginsDatabase = File.ReadAllText(DiscordBotCore.Application.CurrentApplication.PluginDatabase); List installedPlugins = await JsonManager.ConvertFromJson>(pluginsDatabase); var result = installedPlugins.Find(p => p.PluginName == pluginName); return result; } public async Task UpdatePlugin(string pluginName, IProgress? progressMeter = null) { PluginOnlineInfo pluginInfo = await GetPluginInfo(pluginName); 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 _PluginsManager.RemovePluginFromDatabase(pluginName); await _PluginsManager.AppendPluginToDatabase(PluginInfo.FromOnlineInfo(pluginInfo)); } public async Task HasUpdate(string pluginName) { var localPluginInfo = await GetLocalPluginInfo(pluginName); var pluginInfo = await GetPluginInfo(pluginName); return pluginInfo.Version.IsNewerThan(localPluginInfo.PluginVersion); } }