diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs index 4aaa5e9f2c..9c9a7a4111 100644 --- a/Ryujinx/Program.cs +++ b/Ryujinx/Program.cs @@ -64,9 +64,22 @@ namespace Ryujinx MainWindow mainWindow = new MainWindow(); mainWindow.Show(); - if (args.Length == 1) + if (args.Length > 0) { - mainWindow.LoadApplication(args[0]); + foreach (string arg in args) + { + switch (arg.Substring(0, 2).ToUpper()) + { + case "/U": + //Do that update stuffs + Updater.Update.PerformUpdate(); + return; + default: + mainWindow.LoadApplication(args[0]); + break; + } + } + } Application.Run(); diff --git a/Ryujinx/Ryujinx.csproj b/Ryujinx/Ryujinx.csproj index 7c5b925f05..bbf1724666 100644 --- a/Ryujinx/Ryujinx.csproj +++ b/Ryujinx/Ryujinx.csproj @@ -76,6 +76,7 @@ + diff --git a/Ryujinx/Updater/Parser/UpdateParser.cs b/Ryujinx/Updater/Parser/UpdateParser.cs index ff6beefd75..15dfa5af94 100644 --- a/Ryujinx/Updater/Parser/UpdateParser.cs +++ b/Ryujinx/Updater/Parser/UpdateParser.cs @@ -1,10 +1,13 @@ using Gtk; +using Ionic.Zip; using Newtonsoft.Json.Linq; using Ryujinx.Common.Logging; +using Ryujinx.HLE.FileSystem; using Ryujinx.Ui; using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics; using System.IO; using System.IO.Compression; using System.Net; @@ -25,7 +28,6 @@ namespace Ryujinx.Updater.Parser private static string _PlatformExt; public static string _RyuDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ryujinx"); public static WebClient _Package = new WebClient(); - private static string _URLStr; public static int _PackageProgress; public static double _Percentage; public static void BeginParse() @@ -85,20 +87,22 @@ namespace Ryujinx.Updater.Parser private static async void GrabPackage() { - if (!Directory.Exists(Path.Combine(_RyuDir, "Data", "Update")) || !Directory.Exists(Path.Combine(_RyuDir, "Data"))) + if (!Directory.Exists(Path.Combine(_RyuDir, "Data", "Update")) || !Directory.Exists(Path.Combine(_RyuDir, "Data")) || !Directory.Exists(Path.Combine(Environment.CurrentDirectory, "temp"))) { Directory.CreateDirectory(Path.Combine(_RyuDir, "Data", "Update")); Directory.CreateDirectory(Path.Combine(_RyuDir, "Data")); + Directory.CreateDirectory(Path.Combine(Environment.CurrentDirectory, "temp")); } try { _Package.DownloadProgressChanged += new DownloadProgressChangedEventHandler(PackageDownloadProgress); _Package.DownloadFileCompleted += new AsyncCompletedEventHandler(PackageDownloadedAsync); - using (MessageDialog dialog = await GtkDialog.CreateProgressDialogAsync(false, "Update", "Ryujinx - Update", "Downloading update " + _BuildVer + ", 0% complete...", "Please wait while we download the latest package")) + using (MessageDialog dialog = await GtkDialog.CreateProgressDialogAsync(false, "Update", "Ryujinx - Update", "Downloading update " + _BuildVer, "Please wait while we download the latest package")) { dialog.Run(); } + } catch (Exception ex) { @@ -119,9 +123,9 @@ namespace Ryujinx.Updater.Parser Logger.PrintWarning(LogClass.Application, "Package is now installing"); using (MessageDialog dialog = await GtkDialog.CreateProgressDialogAsync(true, "Update", "Ryujinx - Update", "Installing update " + _BuildVer + "...", "Please wait while we install the latest package")) { + dialog.Dispose(); dialog.Run(); } - return; } } @@ -134,11 +138,21 @@ namespace Ryujinx.Updater.Parser { try { - //using (ZipFile Package = ZipFile.Read(Path.Combine(_RyuDir, "Data", "Update", "RyujinxPackage.zip"))) - //{ - // await Task.Run(() => Package.ExtractAll(_InstallDir, ExtractExistingFileAction.OverwriteSilently)); - //} - throw new Exception("This is a test exception.\nThis is the package extract thread."); + using (Ionic.Zip.ZipFile Package = Ionic.Zip.ZipFile.Read(Path.Combine(_RyuDir, "Data", "Update", "RyujinxPackage.zip"))) + { + await Task.Run(() => Package.ExtractAll(Path.Combine(Environment.CurrentDirectory,"temp"), ExtractExistingFileAction.OverwriteSilently)); + } + + try + { + Process.Start(new ProcessStartInfo(Path.Combine(Environment.CurrentDirectory, "temp", "Ryujinx.exe"), "/U") { UseShellExecute = true }); + } + catch (System.ComponentModel.Win32Exception) + { + GtkDialog.CreateErrorDialog("Update canceled by user or the installation was not found"); + return; + } + Application.Quit(); } catch (Exception ex) { @@ -148,4 +162,4 @@ namespace Ryujinx.Updater.Parser } } } -} +} \ No newline at end of file diff --git a/Ryujinx/Updater/Update.cs b/Ryujinx/Updater/Update.cs new file mode 100644 index 0000000000..308759fca4 --- /dev/null +++ b/Ryujinx/Updater/Update.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace Ryujinx.Updater +{ + public class Update + { + public static string _RyuDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Ryujinx"); + public static void PerformUpdate() + { + + return; + } + + private void Cleanup() + { + return; + } + } +}