From 44d8e837736aa3b23b8b59893b9ba07d75d98b8a Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 22 Jan 2011 20:26:32 +1300 Subject: [PATCH] Rework OpenRA.Utility --- OpenRA.Game/Utilities.cs | 6 +- OpenRA.Launcher.Mac/Controller.h | 4 +- OpenRA.Launcher.Mac/Controller.m | 16 +- .../Release/OpenRA.app/Contents/MacOS/OpenRA | Bin 81740 -> 81728 bytes OpenRA.Utility/Command.cs | 171 ++++-------------- OpenRA.Utility/Program.cs | 38 ++-- mods/cnc/chrome/gameinit.yaml | 2 +- mods/ra/chrome/gameinit.yaml | 2 +- 8 files changed, 63 insertions(+), 176 deletions(-) diff --git a/OpenRA.Game/Utilities.cs b/OpenRA.Game/Utilities.cs index 8726bd2850..abe53dba8f 100644 --- a/OpenRA.Game/Utilities.cs +++ b/OpenRA.Game/Utilities.cs @@ -25,17 +25,17 @@ namespace OpenRA public void ExtractZipAsync(string zipFile, string path, Action parseOutput, Action onComplete) { - ExecuteUtilityAsync("\"--extract-zip {0} {1}\"".F(zipFile, path), parseOutput, onComplete); + ExecuteUtilityAsync("--extract-zip \"{0}\" \"{1}\"".F(zipFile, path), parseOutput, onComplete); } public void InstallRAFilesAsync(string cdPath, Action parseOutput, Action onComplete) { - ExecuteUtilityAsync("\"--install-ra-packages {0}\"".F(cdPath), parseOutput, onComplete); + ExecuteUtilityAsync("--install-ra-packages \"{0}\"".F(cdPath), parseOutput, onComplete); } public void PromptFilepathAsync(string title, string message, bool directory, Action withPath) { - ExecuteUtility("--display-filepicker --title \"{0}\" --message \"{1}\" {2} --button-text \"Select\"" + ExecuteUtility("--display-filepicker --title \"{0}\" --message \"{1}\" \"{2}\" --button-text \"Select\"" .F(title, message, directory ? "--require-directory" : ""), withPath); } diff --git a/OpenRA.Launcher.Mac/Controller.h b/OpenRA.Launcher.Mac/Controller.h index b4e5e30a68..e91b38eb2a 100644 --- a/OpenRA.Launcher.Mac/Controller.h +++ b/OpenRA.Launcher.Mac/Controller.h @@ -17,9 +17,9 @@ } - (void)launchFilePicker:(NSArray *)args; - (void)extractZip:(NSArray *)args; -- (void)installRaPackages:(NSArray *)args; +- (void)installRAPackages:(NSArray *)args; - (void)launchMod:(NSString *)mod; - (BOOL)initMono; -- (void)runUtilityWithArg:(NSString *)arg; +- (void)runUtilityWithArgs:(NSArray *)arg; - (void)utilityResponded:(NSNotification *)n; @end diff --git a/OpenRA.Launcher.Mac/Controller.m b/OpenRA.Launcher.Mac/Controller.m index 09d05c2bdd..025782a02a 100644 --- a/OpenRA.Launcher.Mac/Controller.m +++ b/OpenRA.Launcher.Mac/Controller.m @@ -48,7 +48,7 @@ // Install ra packages from cd if ([args containsObject:@"--install-ra-packages"]) - [self installRaPackages:args]; + [self installRAPackages:args]; [self launchMod:@"cnc"]; @@ -57,12 +57,16 @@ - (void)extractZip:(NSArray *)args { - [self runUtilityWithArg:[NSString stringWithFormat:@"--extract-zip=%@,%@",[args objectAtIndex:2],[args objectAtIndex:3]]]; + // Todo: check if we can write to the requested dir, escalate priviledges if required. + NSArray *a = [NSArray arrayWithObjects:@"--extract-zip", [args objectAtIndex:2], [args objectAtIndex:3], nil]; + [self runUtilityWithArgs:a]; } -- (void)installRaPackages:(NSArray *)args +- (void)installRAPackages:(NSArray *)args { - [self runUtilityWithArg:[NSString stringWithFormat:@"--install-ra-packages=%@",[args objectAtIndex:2]]]; + // Todo: check if we can write to the requested dir, escalate priviledges if required. + NSArray *a = [NSArray arrayWithObjects:@"--install-ra-packages", [args objectAtIndex:2], nil]; + [self runUtilityWithArgs:a]; } - (void)launchFilePicker:(NSArray *)args @@ -189,13 +193,13 @@ } -- (void)runUtilityWithArg:(NSString *)arg +- (void)runUtilityWithArgs:(NSArray *)args { NSTask *task = [[[NSTask alloc] init] autorelease]; NSPipe *pipe = [NSPipe pipe]; NSMutableArray *taskArgs = [NSMutableArray arrayWithObject:@"OpenRA.Utility.exe"]; - [taskArgs addObject:arg]; + [taskArgs addObjectsFromArray:args]; [task setCurrentDirectoryPath:gamePath]; [task setLaunchPath:monoPath]; diff --git a/OpenRA.Launcher.Mac/build/Release/OpenRA.app/Contents/MacOS/OpenRA b/OpenRA.Launcher.Mac/build/Release/OpenRA.app/Contents/MacOS/OpenRA index e1ee1c857162001fca19ac6d47dccc77b45247be..85bdff27b9941e0215736bc0a97a44d12627ef89 100755 GIT binary patch delta 17795 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 E500hcUH||9 delta 17977 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 diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index a47eaf4a45..c17902292f 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -22,81 +22,23 @@ namespace OpenRA.Utility { static class Command { - public static void ListMods(string _) + public static void ExtractZip(string[] args) { - var mods = Mod.AllMods; - List seen = new List(mods.Where(x => x.Value.Standalone).Select(x => x.Key)); - List remaining = new List(mods.Where(x => !x.Value.Standalone).Select(x => x.Key)); - foreach(var m in seen) - Console.WriteLine(m); - - int oldSeenSize = 0; - while (true) + if (args.Length < 3) { - foreach (var m in remaining) - { - if (seen.Contains(m)) continue; - - if (string.IsNullOrEmpty(mods[m].Requires)) - { - Console.WriteLine(m); - seen.Add(m); - continue; - } - if (seen.Contains(mods[m].Requires)) - { - Console.WriteLine(m); - seen.Add(m); - } - } - - if (oldSeenSize == seen.Count) break; - oldSeenSize = seen.Count; - } - - foreach(var m in remaining.Where(x => !seen.Contains(x))) - Console.WriteLine(m); - } - - public static void ListModInfo(string modList) - { - string[] mods = modList.Split(','); - foreach (var m in mods) - { - var mod = Mod.AllMods - .Where(x => x.Key.Equals(m)) - .Select(x => x.Value) - .FirstOrDefault(); - if (mod == null) - { - Console.WriteLine("Error: Mod `{0}` is not installed or could not be found.", m); - return; - } - - Console.WriteLine("Mod: {0}", m); - Console.WriteLine(" Title: {0}", mod.Title); - Console.WriteLine(" Version: {0}", mod.Version); - Console.WriteLine(" Author: {0}", mod.Author); - Console.WriteLine(" Description: {0}", mod.Description); - Console.WriteLine(" Requires: {0}", mod.Requires); - Console.WriteLine(" Standalone: {0}", mod.Standalone.ToString()); - } - } - - public static void ExtractZip(string argValue) - { - string[] args = argValue.Split(','); - - if (args.Length != 2) - { - Console.WriteLine("Error: invalid syntax"); + Console.WriteLine("Error: Invalid syntax"); + return; + } + + var zipFile = args[1]; + var dest = args[2]; + + if (!File.Exists(zipFile)) + { + Console.WriteLine("Error: Could not find {0}", zipFile); return; } - string zipFile = args[0]; - string path = args[1]; - if (!File.Exists(zipFile)) { Console.WriteLine("Error: Could not find {0}", zipFile); return; } - string dest = "mods{0}{1}".F(Path.DirectorySeparatorChar,path); List extracted = new List(); try { @@ -112,68 +54,15 @@ namespace OpenRA.Utility Console.WriteLine("Status: Completed"); } - public static void DownloadUrl(string argValue) + public static void InstallRAPackages(string[] args) { - string[] args = argValue.Split(','); - string url = args[0]; - WebClient wc = new WebClient(); - wc.Proxy = null; - - if (args.Length == 1) + if (args.Length < 2) { - wc.DownloadStringCompleted += DownloadStringCompleted; - wc.DownloadStringAsync(new Uri(url)); - } - else if (args.Length == 2) - { - string path = args[1].Replace("~",Environment.GetFolderPath(Environment.SpecialFolder.Personal)); - - wc.DownloadProgressChanged += DownloadProgressChanged; - wc.DownloadFileCompleted += DownloadFileCompleted; - - Console.WriteLine("Downloading {0} to {1}", url, path); - Console.WriteLine("Status: Initializing"); - - wc.DownloadFileAsync(new Uri(url), path); - } - else - { - Console.WriteLine("Error: invalid syntax"); + Console.WriteLine("Error: Invalid syntax"); return; } - - while (!completed) - Thread.Sleep(500); - } - static bool completed = false; - - static void DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) - { - if (e.Error != null) - Console.WriteLine("Error: {0}", e.Error.Message); - else - Console.WriteLine(e.Result); - completed = true; - } - - static void DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) - { - if (e.Error != null) - Console.WriteLine("Error: {0}", e.Error.Message); - else - Console.WriteLine("Status: Completed"); - completed = true; - } - - static void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) - { - Console.WriteLine("Status: {0}% {1}/{2} bytes", e.ProgressPercentage, e.BytesReceived, e.TotalBytesToReceive); - } - - public static void InstallRAPackages(string path) - { - var basePath = "{0}{1}".F(path, Path.DirectorySeparatorChar); + var basePath = "{0}{1}".F(args[1], Path.DirectorySeparatorChar); var toPath = "mods{0}ra{0}packages{0}".F(Path.DirectorySeparatorChar); var directCopy = new string[] {"INSTALL/REDALERT.MIX"}; var extract = new string[] {"conquer.mix", "russian.mix", "allies.mix", "sounds.mix", @@ -195,9 +84,15 @@ namespace OpenRA.Utility Console.WriteLine("Status: Completed"); } - public static void InstallCncPackages(string path) + public static void InstallCncPackages(string[] args) { - var basePath = "{0}{1}".F(path, Path.DirectorySeparatorChar); + if (args.Length < 2) + { + Console.WriteLine("Error: Invalid syntax"); + return; + } + + var basePath = "{0}{1}".F(args[1], Path.DirectorySeparatorChar); var toPath = "mods{0}cnc{0}packages{0}".F(Path.DirectorySeparatorChar); var directCopy = new string[] {"CONQUER.MIX", "DESERT.MIX", "GENERAL.MIX", "SCORES.MIX", "SOUNDS.MIX", "TEMPERAT.MIX", "WINTER.MIX"}; @@ -220,13 +115,15 @@ namespace OpenRA.Utility Console.WriteLine("Status: Completed"); } - public static void Settings(string argValue) + public static void Settings(string[] args) { - string[] args = argValue.Split(','); - - if (args.Length < 2) { return; } + if (args.Length < 3) + { + Console.WriteLine("Error: Invalid syntax"); + return; + } - string expandedPath = args[0].Replace("~", Environment.GetFolderPath(Environment.SpecialFolder.Personal)); + string expandedPath = args[1].Replace("~", Environment.GetFolderPath(Environment.SpecialFolder.Personal)); string settingsFile = expandedPath + Path.DirectorySeparatorChar + "settings.yaml"; if (!File.Exists(settingsFile)) @@ -236,14 +133,14 @@ namespace OpenRA.Utility } List settingsYaml = MiniYaml.FromFile(settingsFile); - Queue settingKey = new Queue(args[1].Split('.')); + Queue settingKey = new Queue(args[2].Split('.')); string s = settingKey.Dequeue(); MiniYaml n = settingsYaml.Where(x => x.Key == s).Select(x => x.Value).FirstOrDefault(); if (n == null) { - Console.WriteLine("Error: Could not find {0} in {1}", args[1], settingsFile); + Console.WriteLine("Error: Could not find {0} in {1}", args[2], settingsFile); return; } @@ -252,7 +149,7 @@ namespace OpenRA.Utility s = settingKey.Dequeue(); if (!n.NodesDict.TryGetValue(s, out n)) { - Console.WriteLine("Error: Could not find {0} in {1}", args[1], settingsFile); + Console.WriteLine("Error: Could not find {0} in {1}", args[2], settingsFile); return; } } diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index 8be5f62345..93e72739c2 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -9,6 +9,7 @@ #endregion using System; +using System.Linq; using System.Collections.Generic; using System.IO; using System.Security.Principal; @@ -19,38 +20,26 @@ namespace OpenRA.Utility { class Program { - static KeyValuePair SplitArgs(string arg) - { - int i = arg.IndexOf('='); - if (i < 0) return new KeyValuePair(arg, ""); - return new KeyValuePair(arg.Substring(0, i), arg.Substring(i + 1)); - } - - delegate void ArgCallback(string argValue); + delegate void ArgCallback(string[] args); static Dictionary argCallbacks; static void Main(string[] args) { argCallbacks = new Dictionary(); - argCallbacks.Add("--list-mods", Command.ListMods); - argCallbacks.Add("-l", Command.ListMods); - argCallbacks.Add("--mod-info", Command.ListModInfo); - argCallbacks.Add("-i", Command.ListModInfo); - argCallbacks.Add("--download-url", Command.DownloadUrl); argCallbacks.Add("--extract-zip", Command.ExtractZip); argCallbacks.Add("--install-ra-packages", Command.InstallRAPackages); argCallbacks.Add("--install-cnc-packages", Command.InstallCncPackages); argCallbacks.Add("--settings-value", Command.Settings); if (args.Length == 0) { PrintUsage(); return; } - var arg = SplitArgs(args[0]); bool piping = false; - if (args.Length > 1 && SplitArgs(args[1]).Key == "--pipe") + var i = Array.IndexOf(args, "--pipe"); + if (args.Length > 1 && i >= 0) { piping = true; - string pipename = SplitArgs(args[1]).Value; + string pipename = args[i+1]; NamedPipeServerStream pipe; var id = WindowsIdentity.GetCurrent(); var principal = new WindowsPrincipal(id); @@ -68,8 +57,8 @@ namespace OpenRA.Utility } ArgCallback callback; - if (argCallbacks.TryGetValue(arg.Key, out callback)) - callback(arg.Value); + if (argCallbacks.TryGetValue(args[0], out callback)) + callback(args); else PrintUsage(); @@ -79,15 +68,12 @@ namespace OpenRA.Utility static void PrintUsage() { - Console.WriteLine("Usage: OpenRA.Utility.exe [OPTION]"); + Console.WriteLine("Usage: OpenRA.Utility.exe [OPTION] [ARGS]"); Console.WriteLine(); - Console.WriteLine(" -l,--list-mods List currently installed mods"); - Console.WriteLine(" -i=MODS,--mod-info=MODS List metadata for MODS (comma separated list of mods)"); - Console.WriteLine(" --download-url=URL,DEST Download a file from URL to DEST (omit DEST to print to stdout)"); - Console.WriteLine(" --extract-zip=ZIPFILE,PATH Extract the zip ZIPFILE to DEST (relative to openra dir)"); - Console.WriteLine(" --install-ra-packages=PATH Install required packages for RA from CD to PATH"); - Console.WriteLine(" --install-cnc-packages=PATH Install required packages for C&C from CD to PATH"); - Console.WriteLine(" --settings-value=SUPPORTDIR,KEY Get value of KEY in SUPPORTDIR/settings.yaml"); + Console.WriteLine(" --extract-zip ZIPFILE PATH Extract the zip ZIPFILE to DEST (relative to openra dir)"); + Console.WriteLine(" --install-ra-packages PATH Install required packages for RA from CD to PATH"); + Console.WriteLine(" --install-cnc-packages PATH Install required packages for C&C from CD to PATH"); + Console.WriteLine(" --settings-value SUPPORTDIR KEY Get value of KEY in SUPPORTDIR/settings.yaml"); } } } diff --git a/mods/cnc/chrome/gameinit.yaml b/mods/cnc/chrome/gameinit.yaml index 4cca7d4c2a..d5c86dab89 100644 --- a/mods/cnc/chrome/gameinit.yaml +++ b/mods/cnc/chrome/gameinit.yaml @@ -3,7 +3,7 @@ GameInitInfo@INIT_SETUP: TestFile: conquer.mix GameTitle: Command & Conquer PackageURL:http://open-ra.org/get-dependency.php?file=cnc-packages - PackagePath:cnc/packages/ + PackagePath:mods/cnc/packages/ InstallMode:cnc Delegate:GameInitDelegate diff --git a/mods/ra/chrome/gameinit.yaml b/mods/ra/chrome/gameinit.yaml index 32feaff111..801d8753bc 100644 --- a/mods/ra/chrome/gameinit.yaml +++ b/mods/ra/chrome/gameinit.yaml @@ -3,7 +3,7 @@ GameInitInfo@INIT_SETUP: TestFile: redalert.mix GameTitle: Red Alert PackageURL:http://open-ra.org/get-dependency.php?file=ra-packages - PackagePath:ra/packages/ + PackagePath:mods/ra/packages/ InstallMode:ra Delegate:GameInitDelegate