diff options
author | Ac_K <Acoustik666@gmail.com> | 2021-01-08 09:14:13 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-08 09:14:13 +0100 |
commit | a9cb31e75fe269519f6be71ae83627ee21d1bc1f (patch) | |
tree | d078b6adea185e6bab72bdb79db37b061ca3bcdf /Ryujinx/Modules/Updater/UpdateDialog.cs | |
parent | 72e94bb089a0f2fef862acee1960dd05083a735b (diff) |
gui: Refactoring Part 1 (#1859)
* gui: Refactoring Part 1
* Fix ProfileDialog.glade path
* Fix Application.Quit assert
* Fix TitleUpdateWindow parent
* Fix TitleUpdate selected item
* Remove extra line in TitleUpdateWindow
* Fix empty assign of Enum.TryParse
* Add Patrons list in the About Window
* update about error messages
Diffstat (limited to 'Ryujinx/Modules/Updater/UpdateDialog.cs')
-rw-r--r-- | Ryujinx/Modules/Updater/UpdateDialog.cs | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/Ryujinx/Modules/Updater/UpdateDialog.cs b/Ryujinx/Modules/Updater/UpdateDialog.cs new file mode 100644 index 00000000..cb38383a --- /dev/null +++ b/Ryujinx/Modules/Updater/UpdateDialog.cs @@ -0,0 +1,89 @@ +using Gdk; +using Gtk; +using Mono.Unix; +using Ryujinx.Ui; +using System; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; + +namespace Ryujinx.Modules +{ + public class UpdateDialog : Gtk.Window + { +#pragma warning disable CS0649, IDE0044 + [Builder.Object] public Label MainText; + [Builder.Object] public Label SecondaryText; + [Builder.Object] public LevelBar ProgressBar; + [Builder.Object] public Button YesButton; + [Builder.Object] public Button NoButton; +#pragma warning restore CS0649, IDE0044 + + private readonly MainWindow _mainWindow; + private readonly string _buildUrl; + private bool _restartQuery; + + public UpdateDialog(MainWindow mainWindow, Version newVersion, string buildUrl) : this(new Builder("Ryujinx..Modules.Updater.UpdateDialog.glade"), mainWindow, newVersion, buildUrl) { } + + private UpdateDialog(Builder builder, MainWindow mainWindow, Version newVersion, string buildUrl) : base(builder.GetObject("UpdateDialog").Handle) + { + builder.Autoconnect(this); + + _mainWindow = mainWindow; + _buildUrl = buildUrl; + + MainText.Text = "Do you want to update Ryujinx to the latest version?"; + SecondaryText.Text = $"{Program.Version} -> {newVersion}"; + + ProgressBar.Hide(); + + YesButton.Clicked += YesButton_Clicked; + NoButton.Clicked += NoButton_Clicked; + } + + private void YesButton_Clicked(object sender, EventArgs args) + { + if (_restartQuery) + { + string ryuName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Ryujinx.exe" : "Ryujinx"; + string ryuExe = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ryuName); + string ryuArg = string.Join(" ", Environment.GetCommandLineArgs().AsEnumerable().Skip(1).ToArray()); + + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + UnixFileInfo unixFileInfo = new UnixFileInfo(ryuExe); + unixFileInfo.FileAccessPermissions |= FileAccessPermissions.UserExecute; + } + + Process.Start(ryuExe, ryuArg); + + Environment.Exit(0); + } + else + { + Window.Functions = _mainWindow.Window.Functions = WMFunction.All & WMFunction.Close; + _mainWindow.ExitMenuItem.Sensitive = false; + + YesButton.Hide(); + NoButton.Hide(); + ProgressBar.Show(); + + SecondaryText.Text = ""; + _restartQuery = true; + + _ = Updater.UpdateRyujinx(this, _buildUrl); + } + } + + private void NoButton_Clicked(object sender, EventArgs args) + { + Updater.Running = false; + _mainWindow.Window.Functions = WMFunction.All; + + _mainWindow.ExitMenuItem.Sensitive = true; + _mainWindow.UpdateMenuItem.Sensitive = true; + + Dispose(); + } + } +}
\ No newline at end of file |