This commit is contained in:
2022-05-23 20:18:53 +03:00
parent 760a840cc7
commit 363c85d0b3
11 changed files with 176 additions and 11 deletions

View File

@@ -1,7 +1,7 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="DiscordBotGUI.App">
<Application.Styles>
<FluentTheme Mode="Light"/>
</Application.Styles>
<Application.Styles>
<FluentTheme Mode="Dark"/>
</Application.Styles>
</Application>

View File

@@ -15,7 +15,10 @@ namespace DiscordBotGUI
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MainWindow();
desktop.MainWindow = new AppUpdater() { Width = 250, Height = 50 };
}
base.OnFrameworkInitializationCompleted();

View File

@@ -0,0 +1,13 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="250" d:DesignHeight="50"
x:Class="DiscordBotGUI.AppUpdater"
Title="AppUpdater">
<StackPanel Margin="10">
<TextBlock x:Class="DiscordBotGUI.AppUpdater" x:Name="textBox1" Text="Checking for updates..." />
<ProgressBar IsIndeterminate="True" x:Class="DiscordBotGUI.AppUpdater" x:Name="progressBar1" Foreground="Purple" />
</StackPanel>
</Window>

View File

@@ -0,0 +1,119 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using PluginManager.Online;
using PluginManager.Others;
using System.Threading.Tasks;
using System;
using System.IO;
namespace DiscordBotGUI
{
public partial class AppUpdater : Window
{
public AppUpdater()
{
InitializeComponent();
if (!File.Exists("./Version.txt"))
{
textBox1.Text = "Checking ...";
File.WriteAllText("./Version.txt", "DiscordBotVersion=0");
DownloadDiscordBotClientNoGUIAsDLL();
}
Updates();
}
private async void DownloadDiscordBotClientNoGUIAsDLL()
{
//await Task.Delay(5000);
string url_bot_dll = "https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/DiscordBot.dll";
IProgress<float> progress = new Progress<float>((percent) =>
{
textBox1.Text = "Downloading DiscordBot.dll ... " + percent.ToString() + "%";
this.progressBar1.Value = percent * 100;
});
this.progressBar1.IsIndeterminate = false;
await ServerCom.DownloadFileAsync(url_bot_dll, "./DiscordBot.dll", progress);
new MainWindow().Show();
Close();
}
private async void Updates()
{
if (!await CheckForUpdates())
{
await Task.Delay(5000);
textBox1.Text = "There is no update found !";
await Task.Delay(2000);
new MainWindow().Show();
this.Close();
return;
}
string file = await DownloadNewUpdate();
if (file == null)
{
textBox1.Text = "There was an error while downloading the update !";
await Task.Delay(5000);
new MainWindow().Show();
this.Close();
return;
}
IProgress<float> progress = new Progress<float>((percent) =>
{
this.progressBar1.Value = percent;
});
await Functions.ExtractArchive(file, "./", progress);
textBox1.Text = "Update downloaded successfully !";
await Task.Delay(2000);
new MainWindow().Show();
this.Close();
}
private async Task<string> DownloadNewUpdate()
{
string urlNewUpdateZip = (await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/Version"))[1];
IProgress<float> progress = new Progress<float>((percent) =>
{
this.progressBar1.Value = percent;
});
this.progressBar1.IsIndeterminate = false;
string FileName = $"{urlNewUpdateZip.Split('/')[urlNewUpdateZip.Split('/').Length - 1]}.zip";
await ServerCom.DownloadFileAsync(urlNewUpdateZip, FileName, progress);
return FileName;
}
private async Task<bool> CheckForUpdates()
{
try
{
string current_version = Functions.readCodeFromFile("Version.txt", "DiscordBotVersion", '=') ?? "0";
string latest_version = (await ServerCom.ReadTextFromFile("https://sethdiscordbot.000webhostapp.com/Storage/Discord%20Bot/Updates/Version"))[0];
if (current_version != latest_version)
{
return true;
}
return false;
}
catch (Exception ex)
{
//File.WriteAllText("./Debug.txt", "Error while checking for updates !\n" + ex.ToString());
return false;
}
}
}
}

View File

@@ -17,10 +17,14 @@ namespace DiscordBotGUI
InitializeComponent();
LoadElements();
}
private void LoadElements()
{
textBox3.Watermark = "Insert start arguments";
button1.Click += async (sender, e) =>
{
@@ -74,6 +78,8 @@ namespace DiscordBotGUI
textBox2.Watermark = "Insert Bot Prefix Here";
}
}

View File

@@ -3,6 +3,8 @@ using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using System;
using System.IO;
using System.Threading.Tasks;
namespace DiscordBotGUI
{
@@ -12,8 +14,11 @@ namespace DiscordBotGUI
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp()
public static void Main(string[] args)
{
BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
}
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()

View File

@@ -57,11 +57,15 @@ namespace DiscordBotGUI.Settings
if (!plugins[i].Contains(OS) || !plugins[i].Contains("Commands"))
continue;
string[] info = plugins[i].Split(',');
if (System.IO.Directory.EnumerateFiles("./Data/Plugins/Commands/").Any(x => x.EndsWith(info[0] + ".dll")))
continue;
try
{
if (System.IO.Directory.EnumerateFiles("./Data/Plugins/Commands/").Any(x => x.EndsWith(info[0] + ".dll")))
continue;
}
catch { }
data.Add($"{info[0]} - {info[1]} - {info[2]}");
}

View File

@@ -62,8 +62,13 @@ namespace DiscordBotGUI.Settings
continue;
string[] info = plugins[i].Split(',');
if (System.IO.Directory.EnumerateFiles("./Data/Plugins/Events/").Any(x => x.EndsWith(info[0] + ".dll")))
continue;
try
{
if (System.IO.Directory.EnumerateFiles("./Data/Plugins/Events/").Any(x => x.EndsWith(info[0] + ".dll")))
continue;
}
catch { }
data.Add($"{info[0]} - {info[1]} - {info[2]}");
}