diff --git a/UnionPatcher.Gui/Forms/FilePatchForm.cs b/UnionPatcher.Gui/Forms/FilePatchForm.cs index a52e04d..1653459 100644 --- a/UnionPatcher.Gui/Forms/FilePatchForm.cs +++ b/UnionPatcher.Gui/Forms/FilePatchForm.cs @@ -24,25 +24,8 @@ public class FilePatchForm : Form { return control; } - public Control CreateHelpButton(int tabIndex = 0) { - Button control = new() { - Text = "Help", - TabIndex = tabIndex, - }; - - control.Click += delegate { - Process process = new(); - - process.StartInfo.UseShellExecute = true; - process.StartInfo.FileName = "https://www.lbpunion.com"; - process.Start(); - }; - - return control; - } - public FilePatchForm() { - this.Title = "UnionPatcher - File Patch"; + this.Title = "File Patch"; this.ClientSize = new Size(500, -1); this.Content = new TableLayout { Spacing = new Size(5,5), @@ -61,7 +44,7 @@ public class FilePatchForm : Form { new TableCell(this.outputFileName = new FilePicker { TabIndex = 2, FileAction = FileAction.SaveFile, Filters = { new FileFilter("ELF files", "*.elf", "*.ELF"), new FileFilter("All Files", "*.*") }}) ), new TableRow( - new TableCell(this.CreateHelpButton(4)), + new TableCell(), new TableCell(this.CreatePatchButton(3)) ), }, diff --git a/UnionPatcher.Gui/Forms/ModeSelectionForm.cs b/UnionPatcher.Gui/Forms/ModeSelectionForm.cs index ce45984..8e8ec7e 100644 --- a/UnionPatcher.Gui/Forms/ModeSelectionForm.cs +++ b/UnionPatcher.Gui/Forms/ModeSelectionForm.cs @@ -8,8 +8,8 @@ namespace LBPUnion.UnionPatcher.Gui.Forms; public class ModeSelectionForm : Form { #region UI public ModeSelectionForm() { - this.Title = "Welcome to UnionPatcher"; - this.ClientSize = new Size(500, -1); + this.Title = "UnionPatcher"; + this.ClientSize = new Size(200, -1); this.Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), @@ -17,9 +17,6 @@ public class ModeSelectionForm : Form { new TableRow( new TableCell(new Button(openRemotePatcher) { Text = "Remote Patcher (PS3)" }) ), - new TableRow( - new TableCell(new Button(openLocalPatcher) { Text = "Local Patch (RPCS3)", Enabled = false }) - ), new TableRow( new TableCell(new Button(openFilePatcher) { Text = "File Patch (PS3/RPCS3)" }) ), diff --git a/UnionPatcher.Gui/Forms/RemotePatchForm.cs b/UnionPatcher.Gui/Forms/RemotePatchForm.cs index 7354ea9..58d49a9 100644 --- a/UnionPatcher.Gui/Forms/RemotePatchForm.cs +++ b/UnionPatcher.Gui/Forms/RemotePatchForm.cs @@ -1,5 +1,6 @@ using System; using System.Diagnostics; +using System.Threading.Tasks; using Eto.Drawing; using Eto.Forms; @@ -31,7 +32,7 @@ public class RemotePatchForm : Form Width = 200, }; - control.Click += delegate { + control.Click += async delegate { if (string.IsNullOrEmpty(this.ps3LocalIP.Text)) { Gui.CreateOkDialog("Error", "No PS3 IP address specified!"); @@ -56,24 +57,33 @@ public class RemotePatchForm : Form return; } - try + Task patchTask = null; + + if (this.lbpGameID.Text.ToUpper().StartsWith('B')) { - if (this.lbpGameID.Text.ToUpper().StartsWith('B')) - { - this.RemotePatcher.DiscEBOOTRemotePatch(this.ps3LocalIP.Text, this.lbpGameID.Text, this.serverUrl.Text, this.ftpUser.Text, this.ftpPass.Text); - } - else - { - this.RemotePatcher.PSNEBOOTRemotePatch(this.ps3LocalIP.Text, this.lbpGameID.Text, this.serverUrl.Text, this.ftpUser.Text, this.ftpPass.Text); - } + patchTask = this.RemotePatcher.DiscEBOOTRemotePatch(this.ps3LocalIP.Text, this.lbpGameID.Text, this.serverUrl.Text, this.ftpUser.Text, this.ftpPass.Text); + } + else + { + patchTask = this.RemotePatcher.PSNEBOOTRemotePatch(this.ps3LocalIP.Text, this.lbpGameID.Text, this.serverUrl.Text, this.ftpUser.Text, this.ftpPass.Text); + } + + // Something went horribly wrong, this should be impossible to encounter. + if (patchTask == null) return; + + Control revertButton = this.FindChild("revert"); + foreach (Control control in this.Controls) control.Enabled = false; + Gui.CreateOkDialog("Sit Tight!", $"We're patching your title for {this.ps3LocalIP.Text}! Maybe grab some tea?"); + try + { + await patchTask; + Gui.CreateOkDialog("Have fun!", $"The Server URL for {this.lbpGameID.Text} on the PS3 at {this.ps3LocalIP.Text} has been patched to {this.serverUrl.Text}"); } catch (Exception e) { - Gui.CreateOkDialog("Error occurred while patching", "An error occured while patching:\n" + e); - return; + Gui.CreateOkDialog("Error occurred while patching", "An error occured while patching:\n" + e.Message); } - - Gui.CreateOkDialog("Success!", $"The Server URL for {this.lbpGameID.Text} on the PS3 at {this.ps3LocalIP.Text} has been patched to {this.serverUrl.Text}"); + foreach (Control control in this.Controls) control.Enabled = true; }; return control; @@ -85,10 +95,10 @@ public class RemotePatchForm : Form { Text = "Revert EBOOT", TabIndex = tabIndex, - Width = 200, + Width = 50, }; - control.Click += delegate { + control.Click += async delegate { if (string.IsNullOrEmpty(this.ps3LocalIP.Text)) { Gui.CreateOkDialog("Form Error", "No PS3 IP address specified!"); @@ -100,37 +110,20 @@ public class RemotePatchForm : Form Gui.CreateOkDialog("Form Error", "No game ID specified!"); return; } - - try + + foreach (Control control in this.Controls) control.Enabled = false; + Task revertTask = this.RemotePatcher.RevertEBOOT(this.ps3LocalIP.Text, this.lbpGameID.Text, this.serverUrl.Text, this.ftpUser.Text, this.ftpPass.Text); + + try { - this.RemotePatcher.RevertEBOOT(this.ps3LocalIP.Text, this.lbpGameID.Text, this.serverUrl.Text, this.ftpUser.Text, this.ftpPass.Text); + await revertTask; + Gui.CreateOkDialog("Success!", $"UnionPatcher reverted your the EBOOT for {this.lbpGameID.Text} to stock. You're ready to patch your EBOOT again."); } catch (Exception e) { - Gui.CreateOkDialog("Error occurred while reverting EBOOT", "An error occured while patching:\n" + e); - return; + Gui.CreateOkDialog("Error occurred while reverting EBOOT", "An error occured while patching:\n" + e.Message); } - - Gui.CreateOkDialog("Success!", $"UnionRemotePatcher reverted your the EBOOT for {this.lbpGameID.Text} to stock. You're ready to patch your EBOOT again."); - }; - - return control; - } - - public Control CreateHelpButton(int tabIndex = 0) - { - Button control = new() - { - Text = "Help", - TabIndex = tabIndex, - }; - - control.Click += delegate { - Process process = new(); - - process.StartInfo.UseShellExecute = true; - process.StartInfo.FileName = "https://www.lbpunion.com"; - process.Start(); + foreach (Control control in this.Controls) control.Enabled = true; }; return control; @@ -138,7 +131,7 @@ public class RemotePatchForm : Form void InitializeComponent() { - this.Title = "UnionPatcher - Remote Patch"; + this.Title = "Remote Patcher"; this.MinimumSize = new Size(450, 200); this.Resizable = false; this.Padding = 10; @@ -169,11 +162,8 @@ public class RemotePatchForm : Form new TableCell(this.ftpPass = new TextBox { TabIndex = 4 }) ), new TableRow( - new TableCell(this.CreateHelpButton(7)), - new TableRow( - new TableCell(this.CreatePatchButton(5)), - new TableCell(this.CreateRevertEBOOTButton(6)) - ) + new TableCell(this.CreateRevertEBOOTButton(6)), + new TableCell(this.CreatePatchButton(5)) ), }, }; diff --git a/UnionPatcher/RemotePatch.cs b/UnionPatcher/RemotePatch.cs index 08817b1..830b965 100644 --- a/UnionPatcher/RemotePatch.cs +++ b/UnionPatcher/RemotePatch.cs @@ -14,7 +14,7 @@ public class RemotePatch { private readonly PS3MAPI _ps3Mapi = new(); - private static Dictionary GetUsersAsync(string ps3Ip, string user, string pass) + private static Dictionary GetUsers(string ps3Ip, string user, string pass) { Console.WriteLine("Getting users..."); @@ -95,11 +95,11 @@ public class RemotePatch Console.WriteLine("\n===== END SCETOOL =====\n\n"); } - public void RevertEBOOT(string ps3ip, string gameID, string serverURL, string user, string pass) + public Task RevertEBOOT(string ps3ip, string gameID, string serverURL, string user, string pass) { Console.WriteLine("Restoring original EBOOT.BIN from EBOOT.BIN.BAK"); - Task.Run(() => + return Task.Run(() => { // Create a simple directory structure Directory.CreateDirectory(@"eboot"); @@ -118,15 +118,15 @@ public class RemotePatch { throw new WebException("Could not find EBOOT.BIN.BAK on server."); } - }).Wait(); + }); } - public void PSNEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass) + public Task PSNEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass) { Console.WriteLine("Detected Digital Copy - Running in Full Mode"); // Create a new thread so we don't occupy the UI thread. - Task.Run(() => + return Task.Run(() => { string idps = ""; string contentID = ""; @@ -158,7 +158,7 @@ public class RemotePatch File.WriteAllBytes(@"data/idps", IDPSHelper.StringToByteArray(idps)); // Scan the users on the system - users = GetUsersAsync(ps3ip, user, pass); + users = GetUsers(ps3ip, user, pass); // Scan the system for a license for the game foreach (string currentUser in users.Keys.ToArray()) @@ -216,12 +216,12 @@ public class RemotePatch } // Cut-down version that only patches disc copies - public void DiscEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass) + public Task DiscEBOOTRemotePatch(string ps3ip, string gameID, string serverURL, string user, string pass) { Console.WriteLine("Detected Disc Copy - Running in Simplified Mode"); // Create a new thread so we don't occupy the UI thread. - Task.Run(() => + return Task.Run(() => { // Create a simple directory structure Directory.CreateDirectory(@"eboot");