diff --git a/OpenRA.Launcher/Download.cs b/OpenRA.Launcher/Download.cs index c926b86cc0..36dbc7f1f5 100644 --- a/OpenRA.Launcher/Download.cs +++ b/OpenRA.Launcher/Download.cs @@ -101,7 +101,7 @@ namespace OpenRA.Launcher string[] args = e.Argument as string[]; string url = args[0]; string dest = args[1]; - var p = UtilityProgram.CallWithAdmin("--download-url", url, dest); + var p = UtilityProgram.Call("--download-url", url, dest); Regex r = new Regex(@"(\d{1,3})% (\d+)/(\d+) bytes"); NamedPipeClientStream pipe = new NamedPipeClientStream(".", "OpenRA.Utility", PipeDirection.In); diff --git a/OpenRA.Launcher/Launcher.Designer.cs b/OpenRA.Launcher/Launcher.Designer.cs index 60997d8203..89d88ea070 100644 --- a/OpenRA.Launcher/Launcher.Designer.cs +++ b/OpenRA.Launcher/Launcher.Designer.cs @@ -29,7 +29,6 @@ private void InitializeComponent() { System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Mods", -2, -2); - System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Broken Mods"); this.installButton = new System.Windows.Forms.Button(); this.installModDialog = new System.Windows.Forms.OpenFileDialog(); this.treeView = new System.Windows.Forms.TreeView(); @@ -67,11 +66,8 @@ treeNode1.Name = "ModsNode"; treeNode1.SelectedImageIndex = -2; treeNode1.Text = "Mods"; - treeNode2.Name = "BrokenModsNode"; - treeNode2.Text = "Broken Mods"; this.treeView.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { - treeNode1, - treeNode2}); + treeNode1}); this.treeView.ShowLines = false; this.treeView.Size = new System.Drawing.Size(160, 465); this.treeView.TabIndex = 3; diff --git a/OpenRA.Launcher/Launcher.cs b/OpenRA.Launcher/Launcher.cs index 3dde52d980..b1dbed671a 100644 --- a/OpenRA.Launcher/Launcher.cs +++ b/OpenRA.Launcher/Launcher.cs @@ -27,8 +27,6 @@ namespace OpenRA.Launcher Util.UacShield(installButton); - //treeView.Nodes["ModsNode"].ImageIndex = 1; - //treeView.Nodes["ModsNode"].SelectedImageIndex = 1; webBrowser.ObjectForScripting = new JSBridge(); webBrowser.DocumentCompleted += (o, e) => { @@ -40,12 +38,8 @@ namespace OpenRA.Launcher Mod GetMetadata(string mod) { - string responseString; - using (var response = UtilityProgram.Call("-i", mod)) - { - responseString = response.ReadToEnd(); - } - + string responseString = UtilityProgram.CallSimpleResponse("-i", mod); + if (Util.IsError(ref responseString)) return null; string[] lines = responseString.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < lines.Length; i++) @@ -89,11 +83,7 @@ namespace OpenRA.Launcher void RefreshMods() { - string responseString; - using (var response = UtilityProgram.Call("--list-mods")) - { - responseString = response.ReadToEnd(); - } + string responseString = UtilityProgram.CallSimpleResponse("--list-mods"); string[] mods; if (!Util.IsError(ref responseString)) @@ -167,12 +157,23 @@ namespace OpenRA.Launcher missing.Nodes.Add(new TreeNode(allMods[s].Title) { ForeColor = SystemColors.GrayText, Name = s }); } - - treeView.Nodes["BrokenModsNode"].Nodes.Add(unspecified); - treeView.Nodes["BrokenModsNode"].Nodes.Add(missing); + string brokenKey = "BrokenModsNode"; + if (treeView.Nodes[brokenKey] != null) + treeView.Nodes.RemoveByKey(brokenKey); + treeView.Nodes.Add(brokenKey, "Broken Mods"); + treeView.Nodes[brokenKey].Nodes.Add(unspecified); + treeView.Nodes[brokenKey].Nodes.Add(missing); } treeView.Nodes["ModsNode"].ExpandAll(); treeView.Invalidate(); + + string responseString = UtilityProgram.CallSimpleResponse("--settings-value", + Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + Path.DirectorySeparatorChar + "OpenRA", "Game.Mods"); + + if (Util.IsError(ref responseString)) + treeView.SelectedNode = treeView.Nodes["ModsNode"].Nodes["ra"]; + else + treeView.SelectedNode = treeView.Nodes["ModsNode"].Nodes[responseString]; } void treeView_AfterSelect(object sender, TreeViewEventArgs e) diff --git a/OpenRA.Launcher/UtilityProgram.cs b/OpenRA.Launcher/UtilityProgram.cs index b1b0f486f0..b4326e83a3 100644 --- a/OpenRA.Launcher/UtilityProgram.cs +++ b/OpenRA.Launcher/UtilityProgram.cs @@ -66,7 +66,7 @@ namespace OpenRA.Launcher return arguments.ToString(); } - public static StreamReader Call(string command, params string[] args) + public static Process Call(string command, params string[] args) { Process p = new Process(); p.StartInfo.FileName = "OpenRA.Utility.exe"; @@ -76,9 +76,21 @@ namespace OpenRA.Launcher p.Start(); + return p; + } + + public static string CallSimpleResponse(string command, params string[] args) + { + var p = Call(command, args); + string responseString; NamedPipeClientStream pipe = new NamedPipeClientStream(".", "OpenRA.Utility", PipeDirection.In); pipe.Connect(); - return new StreamReader(pipe); + using (var response = new StreamReader(pipe)) + { + responseString = response.ReadToEnd(); + } + + return responseString; } public static Process CallWithAdmin(string command, params string[] args)