From 68a83b052a15d48b6a3e20f5d5d1cd35feb3c315 Mon Sep 17 00:00:00 2001 From: Wizzy69 Date: Sun, 28 Aug 2022 12:59:41 +0300 Subject: [PATCH] Updater added --- BUILDS/net6.0/PluginManager.dll | Bin 81920 -> 84480 bytes DiscordBot/DiscordBot.csproj | 2 +- DiscordBot/Program.cs | 145 +++--- PluginManager/Config.cs | 5 +- PluginManager/Items/ConsoleCommandsHandler.cs | 44 +- PluginManager/Online/ServerCom.cs | 6 + PluginManager/Others/Console Utilities.cs | 26 + PluginManager/Others/Functions.cs | 10 +- SethDiscordBot.sln | 10 + Updater/.gitignore | 454 ++++++++++++++++++ Updater/App.axaml | 7 + Updater/App.axaml.cs | 24 + Updater/MainWindow.axaml | 12 + Updater/MainWindow.axaml.cs | 36 ++ Updater/Program.cs | 34 ++ Updater/Updater.csproj | 27 ++ 16 files changed, 732 insertions(+), 110 deletions(-) create mode 100644 Updater/.gitignore create mode 100644 Updater/App.axaml create mode 100644 Updater/App.axaml.cs create mode 100644 Updater/MainWindow.axaml create mode 100644 Updater/MainWindow.axaml.cs create mode 100644 Updater/Program.cs create mode 100644 Updater/Updater.csproj diff --git a/BUILDS/net6.0/PluginManager.dll b/BUILDS/net6.0/PluginManager.dll index 7c99f4fb00190e8106de6ceec1ea0bcb3fac059e..358c7300bea41899f970c033449259708562af39 100644 GIT binary patch literal 84480 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

?>>c!6v{ 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μScP9@<`o2Mc=-$(b3}Nb)$xNA4G%8oXD!=p(_SMzGQ<>4 zAI$!z6m&JQ*H{Rq?V#Jl($y}8h)AnKDsUcx#I19=B?{Wh{O_P5hbV(y)tp83UKSBR zYJtd3Zymfku1=bYNvle8WDeqfgkx7wmWQZ;<#8FuT5ySl+=4?rHmrwZkBkcmqU4q_ zPdwQK1>It?IBgKgje)B|6`&^NHApmj3 zFGh;LkMWGv2=)-9L)${(Ya7iP12HML&1|j&Av?S@NC^@&zBybi&O|9G-hFJI-!o}iZEgwIIdMJ12}@`|unOR66AXIMS-L~|hi(Iv6QxFu zyQGt4(n$$qi?1TPr=IpB{scQBVpVd{1W${_he_h11kEX7lLdy0^#zvhs0%haLJX)Q zrIASSRd_ENQ+QnnavOEE8c|_*7hPc>bcH#bcOQC*L0L>L?N9W>-bO8+S!_%xB6mz|W8@IJ@km`33%dZNqdY>=ts+fh34qhbd z>|fTD7T_72>nye5ViJ1v=flibbR_3hxVvSkYc7_v_B&*fli!cW?|$HUv+_RGvmjZ)Q!K848Dsb3dT!UHQzFxO>?>$eAijN zi=w-Y?|88h<)3btO>;AHx?fS?8?7<uj*=ec13(7K1Pv;b`U?}BJBGOp+izDpt^|QGL^LDQ3E`0@S zhj-E?%a4BGE717yF?CaIW#oNqI=`y#KDu9tST*a94yaw0+WyN3x$tMA`RUtPM9$u% z>Axp}-}P9xYSs_+{-22KoGFr@`Bi%?wey#0_@)E|RX!GmH)W^)LJvO;{C`0#zZI++ z@VXmfWZS}wf*Du;VS>c$2cpc0g5uIpIrq3Il8gZPK{FSpFwCr8kw&4*Ep-M@H{)0S z>?XX zReOG;iccwgc{10XPV+lVYJ}e^b({`Hz{5C0C}#g1W|`|*2W1H$<=@8A6|El108 zW!_}uup6qx3bh;1f>b_!yA_YU@DUU~48#Xt__tI#ZwRS;J~A&4Q@Ia13xj&vyA47u z)QQim=?7(FlfZv&q5f)4N`V+eWm#sVK#%HW|O_jxkPuYP1`+Is@3Tk^VP zz0ZTk7m=|Ji!r!w)AHIUV_ANuJQ-JhLJnm{z)uaiuj}x!vPzBLzrN+iqVPVk4H2%s zeIXgx6~gc1S?G!Cywf#R(UZdO-chG9SPLKB8$nO&CvM+Ak34-yb^q)B+hO7NOqKel Q5B%$H#{aMVzf1%F8-fl2^8f$< diff --git a/DiscordBot/DiscordBot.csproj b/DiscordBot/DiscordBot.csproj index 5aa59c2..a0ad0e1 100644 --- a/DiscordBot/DiscordBot.csproj +++ b/DiscordBot/DiscordBot.csproj @@ -8,7 +8,7 @@ False True - 1.0.0.3 + 1.0.0.10 diff --git a/DiscordBot/Program.cs b/DiscordBot/Program.cs index a94ff80..1ec9773 100644 --- a/DiscordBot/Program.cs +++ b/DiscordBot/Program.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; @@ -30,18 +31,18 @@ public class Program [Obsolete] public static void Main(string[] args) { + Console.WriteLine("Loading resources ..."); Directory.CreateDirectory("./Data/Resources"); Directory.CreateDirectory("./Data/Plugins/Commands"); Directory.CreateDirectory("./Data/Plugins/Events"); PreLoadComponents().Wait(); - - - if (!Config.ContainsKey("ServerID")) + do { - do + if (!Config.ContainsKey("ServerID")) { - Console.Clear(); + + Console.WriteLine("Please enter the server ID: "); Console_Utilities.WriteColorText("You can find it in the Server Settings at &r\"Widget\"&c section"); Console.WriteLine("Example: 1234567890123456789"); @@ -56,49 +57,48 @@ public class Program string SID = key.KeyChar + Console.ReadLine(); if (SID.Length != 18) { - Console.WriteLine("Your server ID is not 18 characters long. Please try again."); + Console.Clear(); + Console_Utilities.WriteColorText("&rYour server ID is not 18 characters long. Please try again. \n"); + continue; } - - Config.AddValueToVariables("ServerID", SID, false); - } - break; - } while (true); + } - } + if (!Config.ContainsKey("token") || Config.GetValue("token") == null || (Config.GetValue("token")?.Length != 70 && Config.GetValue("token")?.Length != 59)) + { + Console.WriteLine("Please insert your token"); + Console.Write("Token = "); + var token = Console.ReadLine(); + if (token?.Length == 59 || token?.Length == 70) + Config.AddValueToVariables("token", token, true); + else + { + Console.Clear(); + Console_Utilities.WriteColorText("&rThe token length is invalid !"); + continue; + } + } - if (!Config.ContainsKey("token") || Config.GetValue("token") == null || Config.GetValue("token")?.Length != 70) - { - Console.WriteLine("Please insert your token"); - Console.Write("Token = "); - var token = Console.ReadLine(); - if (token?.Length == 59 || token?.Length == 70) - Config.AddValueToVariables("token", token, true); - else - Console.WriteLine("Invalid token"); + if (!Config.ContainsKey("prefix") || Config.GetValue("prefix") == null || Config.GetValue("prefix")?.Length != 1) + { + Console.WriteLine("Please insert your prefix (max. 1 character long):"); + Console.WriteLine("For a prefix longer then one character, the first character will be saved and the others will be ignored.\n No spaces, numbers, '/' or '\\' allowed"); + Console.Write("Prefix = "); + var prefix = Console.ReadLine()![0]; - Console.WriteLine("Please insert your prefix (max. 1 character long):"); - Console.WriteLine("For a prefix longer then one character, the first character will be saved and the others will be ignored.\n No spaces or numbers allowed"); - Console.Write("Prefix = "); - var prefix = Console.ReadLine()![0]; - - if (prefix == ' ' || char.IsDigit(prefix)) - return; - Config.AddValueToVariables("prefix", prefix.ToString(), false); - } - - if (!Config.ContainsKey("prefix") || Config.GetValue("prefix") == default) - { - Console.WriteLine("Please insert your prefix (max. 1 character long):"); - Console.WriteLine("For a prefix longer then one character, the first character will be saved and the others will be ignored.\n No spaces or numbers allowed"); - Console.Write("Prefix = "); - var prefix = Console.ReadLine()![0]; - if (prefix == ' ') return; - Config.AddValueToVariables("prefix", prefix.ToString(), false); - } + if (prefix == ' ' || char.IsDigit(prefix) || prefix == '/' || prefix == '\\') + { + Console.Clear(); + Console_Utilities.WriteColorText("&rThe prefix is invalid"); + continue; + } + Config.AddValueToVariables("prefix", prefix.ToString(), false); + } + break; + } while (true); HandleInput(args).Wait(); } @@ -346,6 +346,8 @@ public class Program private static async Task PreLoadComponents() { + Console_Utilities.ProgressBar main = new Console_Utilities.ProgressBar(ProgressBarType.NO_END); + main.Start(); await Config.LoadConfig(); if (Config.ContainsKey("DeleteLogsAtStartup")) if (Config.GetValue("DeleteLogsAtStartup")) @@ -375,7 +377,11 @@ public class Program } } + + + List onlineSettingsList = await ServerCom.ReadTextFromURL("https://raw.githubusercontent.com/Wizzy69/installer/discord-bot-files/OnlineData"); + main.Stop(); foreach (var key in onlineSettingsList) { if (key.Length <= 3 || !key.Contains(' ')) continue; @@ -387,42 +393,45 @@ public class Program string newVersion = s[1]; if (!newVersion.Equals(Config.GetValue("Version"))) { - Console.WriteLine("A new version has been released on github page."); - Console.WriteLine("Download the new version using the following link wrote in yellow"); - Console_Utilities.WriteColorText("&y" + Config.GetValue("GitURL") + "&c"); - - Console.WriteLine(); - Console.WriteLine("Your product will work just fine on this outdated version, but an update is recommended.\n" + - "From now on, this version is no longer supported" - ); - Console_Utilities.WriteColorText("&rUse at your own risk&c"); - - Console_Utilities.WriteColorText("&mCurrent Version: " + Config.GetValue("Version") + "&c"); - Console_Utilities.WriteColorText("&gNew Version: " + newVersion + "&c"); - - Console.WriteLine("\n\n"); - await Task.Delay(1000); - - int waitTime = 10; //wait time to proceed - - Console.Write($"The bot will start in {waitTime} seconds"); - while (waitTime > 0) + if (Functions.GetOperatingSystem() == PluginManager.Others.OperatingSystem.WINDOWS) { - await Task.Delay(1000); - waitTime--; - Console.SetCursorPosition("The bot will start in ".Length, Console.CursorTop); - Console.Write(" "); - Console.SetCursorPosition("The bot will start in ".Length, Console.CursorTop); - Console.Write(waitTime + " seconds"); + + string url = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0.zip"; + //string url2 = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}-preview/net6.0.zip"; + Process.Start("./Updater/Updater.exe", $"/update {url} ./DiscordBot.exe ./"); } + else + { + string url = $"https://github.com/Wizzy69/SethDiscordBot/releases/download/v{newVersion}/net6.0_linux.zip"; + Process.Start("./Updater/Updater", $"/update {url} ./DiscordBot ./"); + } + Environment.Exit(0); } + break; + case "UpdaterVersion": + string updaternewversion = s[1]; + if (Config.UpdaterVersion != updaternewversion) + { + Console.Clear(); + Console.WriteLine("Installing updater ...\nDo NOT close the bot during update !"); + Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END); + bar.Start(); + await ServerCom.DownloadFileNoProgressAsync("https://github.com/Wizzy69/installer/releases/download/release-1-discordbot/Updater.zip", "./Updater.zip"); + await Functions.ExtractArchive("./Updater.zip", "./", null, UnzipProgressType.PercentageFromTotalSize); + Config.UpdaterVersion = updaternewversion; + File.Delete("Updater.zip"); + await Config.SaveConfig(SaveType.NORMAL); + bar.Stop(); + Console.Clear(); + } break; } } - Console_Utilities.Initialize(); - Config.SaveConfig(SaveType.NORMAL); + Console_Utilities.Initialize(); + await Config.SaveConfig(SaveType.NORMAL); + Console.Clear(); } } diff --git a/PluginManager/Config.cs b/PluginManager/Config.cs index 9bb7140..348602f 100644 --- a/PluginManager/Config.cs +++ b/PluginManager/Config.cs @@ -11,6 +11,7 @@ namespace PluginManager { internal class AppConfig { + public string UpdaterVersion { get; set; } public Dictionary? ApplicationVariables { get; init; } public List? ProtectedKeyWords { get; init; } public Dictionary? PluginVersions { get; init; } @@ -77,6 +78,8 @@ namespace PluginManager private static AppConfig? appConfig { get; set; } + public static string UpdaterVersion { get => appConfig.UpdaterVersion; set => appConfig.UpdaterVersion = value; } + public static string GetPluginVersion(string pluginName) => appConfig!.PluginVersions![pluginName]; public static void SetPluginVersion(string pluginName, string newVersion) { @@ -220,7 +223,7 @@ namespace PluginManager Functions.WriteLogFile($"Loaded {appConfig.ApplicationVariables!.Keys.Count} application variables.\nLoaded {appConfig.ProtectedKeyWords!.Count} readonly variables."); return; } - appConfig = new() { ApplicationVariables = new Dictionary(), ProtectedKeyWords = new List(), PluginVersions = new Dictionary() }; + appConfig = new() { ApplicationVariables = new Dictionary(), ProtectedKeyWords = new List(), PluginVersions = new Dictionary(), UpdaterVersion = "-1" }; } public static bool ContainsValue(T value) => appConfig!.ApplicationVariables!.ContainsValue(value!); diff --git a/PluginManager/Items/ConsoleCommandsHandler.cs b/PluginManager/Items/ConsoleCommandsHandler.cs index 4a31091..3f2d455 100644 --- a/PluginManager/Items/ConsoleCommandsHandler.cs +++ b/PluginManager/Items/ConsoleCommandsHandler.cs @@ -193,29 +193,11 @@ public class ConsoleCommandsHandler if (split[0].EndsWith(".zip") || split[0].EndsWith(".pak") || split[0].EndsWith(".pkg")) { - Console.WriteLine($"Extracting {split[1]}"); - var proc = 0f; - var isExtracting = true; - var bar = new Console_Utilities.ProgressBar(ProgressBarType.NORMAL) { Max = 100f, Color = ConsoleColor.Green }; - - IProgress extractProgress = new Progress(value => { proc = value; }); - new Thread(new Task(() => - { - while (isExtracting) - { - bar.Update(proc); - if (proc >= 99.9f) - isExtracting = false; - Thread.Sleep(500); - } - } - ).Start - ).Start(); - await Functions.ExtractArchive("./" + split[1], "./", extractProgress, UnzipProgressType.PercentageFromTotalSize); - bar.Update(100f); - isExtracting = false; - await Task.Delay(1000); - bar.Update(100); + Console.WriteLine($"Extracting {split[1]} ..."); + var bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END) { Max = 100f, Color = ConsoleColor.Green }; + bar.Start(); + await Functions.ExtractArchive("./" + split[1], "./", null, UnzipProgressType.PercentageFromTotalSize); + bar.Stop(); Console.WriteLine("\n"); File.Delete("./" + split[1]); } @@ -277,21 +259,13 @@ public class ConsoleCommandsHandler { if (client is null) return; - bool run = true; - var t = new Thread(() => - { - Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END); - while (run) - { - bar.Update(1); - Thread.Sleep(50); - } - }); - t.Start(); + Console_Utilities.ProgressBar bar = new Console_Utilities.ProgressBar(ProgressBarType.NO_END); + + bar.Start(); await Config.SaveConfig(SaveType.NORMAL); await Config.SaveConfig(SaveType.BACKUP); await Task.Delay(4000); - run = false; + bar.Stop(); Console.WriteLine(); await client.StopAsync(); await client.DisposeAsync(); diff --git a/PluginManager/Online/ServerCom.cs b/PluginManager/Online/ServerCom.cs index 925bbf5..6151e61 100644 --- a/PluginManager/Online/ServerCom.cs +++ b/PluginManager/Online/ServerCom.cs @@ -79,5 +79,11 @@ namespace PluginManager.Online pbar.Update(100f); isDownloading = false; } + public static async Task DownloadFileNoProgressAsync(string URL, string location) + { + IProgress progress = new Progress(); + await DownloadFileAsync(URL, location, progress); + } + } } diff --git a/PluginManager/Others/Console Utilities.cs b/PluginManager/Others/Console Utilities.cs index c1277f0..81800ea 100644 --- a/PluginManager/Others/Console Utilities.cs +++ b/PluginManager/Others/Console Utilities.cs @@ -46,6 +46,32 @@ namespace PluginManager.Others private int position = 1; private bool positive = true; + private bool isRunning; + + public async void Start() + { + if (type != ProgressBarType.NO_END) + throw new Exception("Only NO_END progress bar can use this method"); + if (isRunning) + throw new Exception("This progress bar is already running"); + + isRunning = true; + while (isRunning) + { + UpdateNoEnd(); + await System.Threading.Tasks.Task.Delay(100); + } + } + + public void Stop() + { + if (type != ProgressBarType.NO_END) + throw new Exception("Only NO_END progress bar can use this method"); + if (!isRunning) + throw new Exception("Can not stop a progressbar that did not start"); + isRunning = false; + } + public void Update(float progress) { switch (type) diff --git a/PluginManager/Others/Functions.cs b/PluginManager/Others/Functions.cs index 2f26f9e..4decd4b 100644 --- a/PluginManager/Others/Functions.cs +++ b/PluginManager/Others/Functions.cs @@ -168,9 +168,7 @@ namespace PluginManager.Others /// public static async Task ExtractArchive(string zip, string folder, IProgress progress, UnzipProgressType type) { - if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); - - + Directory.CreateDirectory(folder); using (ZipArchive archive = ZipFile.OpenRead(zip)) { if (type == UnzipProgressType.PercentageFromNumberOfFiles) @@ -194,7 +192,8 @@ namespace PluginManager.Others currentZIPFile++; await Task.Delay(10); - progress.Report((float)currentZIPFile / totalZIPFiles * 100); + if (progress != null) + progress.Report((float)currentZIPFile / totalZIPFiles * 100); } } else if (type == UnzipProgressType.PercentageFromTotalSize) @@ -224,7 +223,8 @@ namespace PluginManager.Others } await Task.Delay(10); - progress.Report((float)currentSize / zipSize * 100); + if (progress != null) + progress.Report((float)currentSize / zipSize * 100); } } } diff --git a/SethDiscordBot.sln b/SethDiscordBot.sln index 13ea9af..d19c69a 100644 --- a/SethDiscordBot.sln +++ b/SethDiscordBot.sln @@ -23,6 +23,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMD_LevelingSystem", "CMD_L EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Roles", "Roles\Roles.csproj", "{954F2AA9-6624-4554-946D-0F17B84487C3}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Others", "Others", "{727BBA0B-9114-4BC8-B9A8-3F461449A564}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Updater", "Updater\Updater.csproj", "{24616F7E-E2E9-45A3-8A44-AB51FCD2D525}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -57,6 +61,10 @@ Global {954F2AA9-6624-4554-946D-0F17B84487C3}.Debug|Any CPU.Build.0 = Debug|Any CPU {954F2AA9-6624-4554-946D-0F17B84487C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {954F2AA9-6624-4554-946D-0F17B84487C3}.Release|Any CPU.Build.0 = Release|Any CPU + {24616F7E-E2E9-45A3-8A44-AB51FCD2D525}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24616F7E-E2E9-45A3-8A44-AB51FCD2D525}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24616F7E-E2E9-45A3-8A44-AB51FCD2D525}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24616F7E-E2E9-45A3-8A44-AB51FCD2D525}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -69,6 +77,8 @@ Global {EEC445DC-0C4B-43EA-8694-606BA0390B77} = {A290C028-77C4-4D1D-AB43-DDFE6ABD9012} {1A4E49FF-9A0A-4C54-AF35-CFFBA64353D9} = {449FA364-0B72-43FF-B3A3-806E2916200E} {954F2AA9-6624-4554-946D-0F17B84487C3} = {449FA364-0B72-43FF-B3A3-806E2916200E} + {727BBA0B-9114-4BC8-B9A8-3F461449A564} = {1862ABD5-7C30-4F15-A561-45AC8A9CA10E} + {24616F7E-E2E9-45A3-8A44-AB51FCD2D525} = {727BBA0B-9114-4BC8-B9A8-3F461449A564} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3FB3C5DE-ED21-4D2E-ABDD-3A00EE4A2FFF} diff --git a/Updater/.gitignore b/Updater/.gitignore new file mode 100644 index 0000000..8afdcb6 --- /dev/null +++ b/Updater/.gitignore @@ -0,0 +1,454 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# JetBrains Rider +.idea/ +*.sln.iml + +## +## Visual Studio Code +## +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/Updater/App.axaml b/Updater/App.axaml new file mode 100644 index 0000000..828d949 --- /dev/null +++ b/Updater/App.axaml @@ -0,0 +1,7 @@ + + + + + diff --git a/Updater/App.axaml.cs b/Updater/App.axaml.cs new file mode 100644 index 0000000..a9165e5 --- /dev/null +++ b/Updater/App.axaml.cs @@ -0,0 +1,24 @@ +using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Markup.Xaml; + +namespace Updater +{ + public partial class App : Application + { + public override void Initialize() + { + AvaloniaXamlLoader.Load(this); + } + + public override void OnFrameworkInitializationCompleted() + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + desktop.MainWindow = new MainWindow() { Width = 250, Height = 50 }; + } + + base.OnFrameworkInitializationCompleted(); + } + } +} diff --git a/Updater/MainWindow.axaml b/Updater/MainWindow.axaml new file mode 100644 index 0000000..439b8e5 --- /dev/null +++ b/Updater/MainWindow.axaml @@ -0,0 +1,12 @@ + + + + diff --git a/Updater/MainWindow.axaml.cs b/Updater/MainWindow.axaml.cs new file mode 100644 index 0000000..2aa21e1 --- /dev/null +++ b/Updater/MainWindow.axaml.cs @@ -0,0 +1,36 @@ +using Avalonia.Controls; + +using System; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Net; + +using System.Threading.Tasks; + +namespace Updater +{ + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + + Activated += (sender, e) => FormActive(); + } + + public async void FormActive() + { + if (Program.Command != "/update") + return; + await Task.Delay(3000); + WebClient c = new WebClient(); + Directory.CreateDirectory("./Updater/Downloads"); + await c.DownloadFileTaskAsync(Program.Link, "./Updater/Downloads/Update.zip"); + await Task.Run(() => ZipFile.ExtractToDirectory("./Updater/Downloads/Update.zip", Program.Location, true)); + Process.Start(Program.AppToOpen); + File.Delete("./Updater/Downloads/Update.zip"); + Environment.Exit(0); + } + } +} diff --git a/Updater/Program.cs b/Updater/Program.cs new file mode 100644 index 0000000..e42859e --- /dev/null +++ b/Updater/Program.cs @@ -0,0 +1,34 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.ApplicationLifetimes; + +using System; + +namespace Updater +{ + internal class Program + { + + public static string Command, Link, AppToOpen, Location; + + // Initialization code. Don't use any Avalonia, third-party APIs or any + // SynchronizationContext-reliant code before AppMain is called: things aren't initialized + // yet and stuff might break. + [STAThread] + public static void Main(string[] args) + { + Command = args[0]; + Link = args[1]; + AppToOpen = args[2]; + Location = string.Join(' ', args, 3, args.Length - 3); + BuildAvaloniaApp() + .StartWithClassicDesktopLifetime(args); + } + + // Avalonia configuration, don't remove; also used by visual designer. + public static AppBuilder BuildAvaloniaApp() + => AppBuilder.Configure() + .UsePlatformDetect() + .LogToTrace(); + } +} diff --git a/Updater/Updater.csproj b/Updater/Updater.csproj new file mode 100644 index 0000000..2524f5b --- /dev/null +++ b/Updater/Updater.csproj @@ -0,0 +1,27 @@ + + + WinExe + net6.0 + enable + + copyused + true + + + + + + + + + + + + + + + + +