diff --git a/Ryujinx.Updater/Program.cs b/Ryujinx.Updater/Program.cs new file mode 100644 index 0000000000..b44b850fed --- /dev/null +++ b/Ryujinx.Updater/Program.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Ryujinx.Updater +{ + public class Program + { + public static string RyuDir = Environment.CurrentDirectory; + + public static string updateSaveLocation; + public static string metaFilePath; + + public static string versionNumber; + public static string downloadUrl; + + private static void CloneDirectory(string root, string dest) + { + foreach (var directory in Directory.GetDirectories(root)) + { + string dirName = Path.GetFileName(directory); + + try + { + if (!Directory.Exists(Path.Combine(dest, dirName))) + { + Directory.CreateDirectory(Path.Combine(dest, dirName)); + } + } + catch + { + + } + + CloneDirectory(directory, Path.Combine(dest, dirName)); + } + + foreach (var file in Directory.GetFiles(root)) + { + try + { + File.Move(file, Path.Combine(dest, Path.GetFileName(file)), true); + } + catch + { + + } + } + } + + [STAThread] + public static void Main() + { + // Create Temp Directory + + if (!Directory.Exists(Path.Combine(RyuDir, "Temp"))) + { + Directory.CreateDirectory(Path.Combine(RyuDir, "Temp")); + } + + updateSaveLocation = Path.Combine(RyuDir, "Temp", "RyujinxPackage.zip"); + metaFilePath = Path.Combine(RyuDir, "Meta.json"); + + string[] metaFileData = File.ReadAllLines(metaFilePath); + + versionNumber = metaFileData[0]; + downloadUrl = metaFileData[1]; + + using (WebClient client = new WebClient()) + { + client.DownloadFile(downloadUrl, updateSaveLocation); + } + + foreach (string file in Directory.GetFiles(RyuDir, "*", SearchOption.AllDirectories)) + { + if (Path.GetFileName(file) != "Config.json" && Path.GetFileName(file) != "Meta.json" && Path.GetFileName(file) != "RyujinxPackage.zip") + { + try + { + File.Delete(file); + } + catch + { + + } + } + } + + ZipFile.ExtractToDirectory(updateSaveLocation, RyuDir, true); + + CloneDirectory(Path.Combine(RyuDir, "publish"), RyuDir); + Directory.Delete(Path.Combine(RyuDir, "publish"), true); + Directory.Delete(Path.Combine(RyuDir, "Temp"), true); + + Process.Start(Path.Combine(RyuDir, "Ryujinx.exe")); + + Application.Exit(); + } + + } +} \ No newline at end of file diff --git a/Ryujinx.Updater/Ryujinx.Updater.csproj b/Ryujinx.Updater/Ryujinx.Updater.csproj new file mode 100644 index 0000000000..6db5bdf5ed --- /dev/null +++ b/Ryujinx.Updater/Ryujinx.Updater.csproj @@ -0,0 +1,12 @@ + + + + WinExe + netcoreapp3.0 + true + Ryujinx.Updater.Program + Updater + Ryujinx.ico + + + \ No newline at end of file diff --git a/Ryujinx.Updater/Ryujinx.ico b/Ryujinx.Updater/Ryujinx.ico new file mode 100644 index 0000000000..edf1b93f71 Binary files /dev/null and b/Ryujinx.Updater/Ryujinx.ico differ diff --git a/Ryujinx.sln b/Ryujinx.sln index 38fc6cf76c..75c9fed419 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -4,6 +4,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 16.0.29613.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "Ryujinx\Ryujinx.csproj", "{074045D4-3ED2-4711-9169-E385F2BFB5A0}" + ProjectSection(ProjectDependencies) = postProject + {529E361C-FEF5-4C07-A2F4-3351C45CADDD} = {529E361C-FEF5-4C07-A2F4-3351C45CADDD} + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" EndProject @@ -33,7 +36,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", " EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Debugger", "Ryujinx.Debugger\Ryujinx.Debugger.csproj", "{79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Updater", "Ryujinx.Updater\Ryujinx.Updater.csproj", "{529E361C-FEF5-4C07-A2F4-3351C45CADDD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -163,22 +166,6 @@ Global {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Profile Release|Any CPU.Build.0 = Release|Any CPU {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Debug|Any CPU.ActiveCfg = Profile Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Debug|Any CPU.Build.0 = Profile Debug|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Release|Any CPU.ActiveCfg = Profile Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Profile Release|Any CPU.Build.0 = Profile Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E02B7F3-245E-43B1-AE5B-44167A0FDA20}.Release|Any CPU.Build.0 = Release|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Profile Debug|Any CPU.ActiveCfg = Profile Debug|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Profile Debug|Any CPU.Build.0 = Profile Debug|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Profile Release|Any CPU.ActiveCfg = Profile Release|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Profile Release|Any CPU.Build.0 = Profile Release|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79E4EE34-9C5F-4BE6-8529-A49D32B5B0CC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Ryujinx/Ryujinx.csproj b/Ryujinx/Ryujinx.csproj index bbf1724666..c12cd2669f 100644 --- a/Ryujinx/Ryujinx.csproj +++ b/Ryujinx/Ryujinx.csproj @@ -89,6 +89,7 @@ + diff --git a/Ryujinx/Updater/Parser/UpdateParser.cs b/Ryujinx/Updater/Parser/UpdateParser.cs index b920494ecf..cc535e6b58 100644 --- a/Ryujinx/Updater/Parser/UpdateParser.cs +++ b/Ryujinx/Updater/Parser/UpdateParser.cs @@ -3,6 +3,7 @@ using Newtonsoft.Json.Linq; using Ryujinx.Common.Logging; using Ryujinx.Ui; using System; +using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; @@ -24,7 +25,7 @@ namespace Ryujinx.Updater.Parser public static string _buildArt; - public static string RyuDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ryujinx"); + public static string RyuDir = Environment.CurrentDirectory; public static WebClient Package = new WebClient(); public static int PackageProgress; public static double Percentage; @@ -77,8 +78,19 @@ namespace Ryujinx.Updater.Parser { if (dialog.Run() == (int)ResponseType.Yes) { - dialog.Dispose(); - GrabPackage(); + try + { + // Start Updater.exe + + string updaterPath = Path.Combine(RyuDir, "Updater.exe"); + + Process.Start(new ProcessStartInfo(updaterPath) { UseShellExecute = true }); + Application.Quit(); + } + catch (Exception ex) + { + GtkDialog.CreateErrorDialog(ex.Message); + } } } diff --git a/Ryujinx/Updater/Update.cs b/Ryujinx/Updater/Update.cs index 517761f506..f97d71ed5a 100644 --- a/Ryujinx/Updater/Update.cs +++ b/Ryujinx/Updater/Update.cs @@ -34,7 +34,7 @@ namespace Ryujinx.Updater try { - Process.Start(new ProcessStartInfo(Path.Combine(_parentdir, "Ryujinx.exe"), "/C") { UseShellExecute = true }); + Process.Start(new ProcessStartInfo(Path.Combine(RyuDir, "Ryujinx.exe")) { UseShellExecute = true }); Application.Quit(); } catch (Exception ex)