Skip to content

Commit 56faab7

Browse files
committed
Update TACTTool's System.CommandLine
1 parent d5284aa commit 56faab7

File tree

2 files changed

+63
-64
lines changed

2 files changed

+63
-64
lines changed

TACTTool/Program.cs

Lines changed: 62 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Collections.Concurrent;
22
using System.CommandLine;
3-
using System.CommandLine.Invocation;
43
using System.Diagnostics;
54
using TACTSharp;
65

@@ -29,54 +28,54 @@ static async Task Main(string[] args)
2928
#region CLI switches
3029
var rootCommand = new RootCommand("TACTTool - Extraction tool using the TACTSharp library");
3130

32-
var buildConfigOption = new Option<string?>(name: "--buildconfig", description: "Build config to load (hex or file on disk)");
33-
buildConfigOption.AddAlias("-b");
34-
rootCommand.AddOption(buildConfigOption);
31+
var buildConfigOption = new Option<string?>("--buildconfig") { Description = "Build config to load (hex or file on disk)" };
32+
buildConfigOption.Aliases.Add("-b");
33+
rootCommand.Options.Add(buildConfigOption);
3534

36-
var cdnConfigOption = new Option<string?>(name: "--cdnconfig", description: "CDN config to load (hex or file on disk)");
37-
cdnConfigOption.AddAlias("-c");
38-
rootCommand.AddOption(cdnConfigOption);
35+
var cdnConfigOption = new Option<string?>("--cdnconfig") { Description = "CDN config to load (hex or file on disk)" };
36+
cdnConfigOption.Aliases.Add("-c");
37+
rootCommand.Options.Add(cdnConfigOption);
3938

40-
var productOption = new Option<string?>(name: "--product", () => "wow", description: "TACT product to load");
41-
productOption.AddAlias("-p");
42-
rootCommand.AddOption(productOption);
39+
var productOption = new Option<string?>(name: "--product") { Description = "TACT product to load", DefaultValueFactory = _ => "wow" };
40+
productOption.Aliases.Add("-p");
41+
rootCommand.Options.Add(productOption);
4342

44-
var regionOption = new Option<string?>(name: "--region", () => "us", description: "Region to use for patch service/build selection/CDNs");
45-
regionOption.AddAlias("-r");
46-
rootCommand.AddOption(regionOption);
43+
var regionOption = new Option<string?>("--region") { Description = "Region to use for patch service/build selection/CDNs", DefaultValueFactory = _ => "us" };
44+
regionOption.Aliases.Add("-r");
45+
rootCommand.Options.Add(regionOption);
4746

48-
var localeOption = new Option<string?>(name: "--locale", () => "enUS", description: "Locale to use for file retrieval");
49-
localeOption.AddAlias("-l");
50-
rootCommand.AddOption(localeOption);
47+
var localeOption = new Option<string?>(name: "--locale") { Description = "Locale to use for file retrieval", DefaultValueFactory = _ => "enUS" };
48+
localeOption.Aliases.Add("-l");
49+
rootCommand.Options.Add(localeOption);
5150

52-
var inputModeOption = new Option<string>("--mode", "Input mode: list, ekey (or ehash), ckey (or chash), id (or fdid), name (or filename)");
53-
inputModeOption.AddAlias("-m");
54-
rootCommand.AddOption(inputModeOption);
51+
var inputModeOption = new Option<string>("--mode") { Description = "Input mode: list, ekey (or ehash), ckey (or chash), id (or fdid), name (or filename)" };
52+
inputModeOption.Aliases.Add("-m");
53+
rootCommand.Options.Add(inputModeOption);
5554

56-
var inputValueOption = new Option<string>("--inputvalue", "Input value for extraction");
57-
inputValueOption.AddAlias("-i");
58-
rootCommand.AddOption(inputValueOption);
55+
var inputValueOption = new Option<string>("--inputvalue") { Description = "Input value for extraction" };
56+
inputValueOption.Aliases.Add("-i");
57+
rootCommand.Options.Add(inputValueOption);
5958

60-
var outputDirOption = new Option<string>("--output", "Output path for extracted files, folder for list mode (defaults to 'extract' folder), output filename for other input modes (defaults to input value as filename)");
61-
outputDirOption.AddAlias("-o");
62-
rootCommand.AddOption(outputDirOption);
59+
var outputDirOption = new Option<string>("--output") { Description = "Output path for extracted files, folder for list mode (defaults to 'extract' folder), output filename for other input modes (defaults to input value as filename)" };
60+
outputDirOption.Aliases.Add("-o");
61+
rootCommand.Options.Add(outputDirOption);
6362

64-
var baseDirOption = new Option<string?>(name: "--basedir", description: "WoW installation folder to use as source for build info and read-only file cache (if available)");
65-
baseDirOption.AddAlias("-d");
66-
rootCommand.AddOption(baseDirOption);
63+
var baseDirOption = new Option<string?>("--basedir") { Description = "WoW installation folder to use as source for build info and read-only file cache (if available)" };
64+
baseDirOption.Aliases.Add("-d");
65+
rootCommand.Options.Add(baseDirOption);
6766

68-
var cdnDirOption = new Option<string?>(name: "--cdndir", description: "CDN folder to use as read-only file cache (if available)");
69-
cdnDirOption.AddAlias("-cd");
70-
rootCommand.AddOption(cdnDirOption);
67+
var cdnDirOption = new Option<string?>("--cdndir") { Description = "CDN folder to use as read-only file cache (if available)" };
68+
cdnDirOption.Aliases.Add("-cd");
69+
rootCommand.Options.Add(cdnDirOption);
7170

72-
var additionalCDNsOption = new Option<string?>(name: "--cdns", description: "Additional CDN hostnames to use, separated by commas (only specify hostnames)");
73-
rootCommand.AddOption(additionalCDNsOption);
71+
var additionalCDNsOption = new Option<string?>("--cdns") { Description = "Additional CDN hostnames to use, separated by commas (only specify hostnames)" };
72+
rootCommand.Options.Add(additionalCDNsOption);
7473

75-
rootCommand.SetHandler(CommandLineArgHandler);
74+
rootCommand.SetAction(CommandLineArgHandler);
7675

7776
build = new BuildInstance();
7877

79-
await rootCommand.InvokeAsync(args);
78+
await rootCommand.Parse(args).InvokeAsync();
8079

8180
if (build.Settings.BuildConfig == null || build.Settings.CDNConfig == null)
8281
{
@@ -172,32 +171,32 @@ static async Task Main(string[] args)
172171
Console.WriteLine("Total time: " + totalTimer.Elapsed.TotalMilliseconds + "ms");
173172
}
174173

175-
private static async Task CommandLineArgHandler(InvocationContext context)
174+
private static async Task CommandLineArgHandler(ParseResult result)
176175
{
177-
var command = context.ParseResult.CommandResult;
176+
var command = result.CommandResult;
178177
var modeOption = command.Command.Options.FirstOrDefault(option => option.Name == "mode");
179178
foreach (var option in command.Command.Options)
180179
{
181-
var optionValue = command.GetValueForOption(option);
180+
var optionValue = result.GetValue<string>(option.Name);
182181
if (optionValue == null)
183182
continue;
184183

185184
switch (option.Name)
186185
{
187-
case "buildconfig":
188-
build!.Settings.BuildConfig = (string)optionValue;
186+
case "--buildconfig":
187+
build!.Settings.BuildConfig = optionValue;
189188
break;
190-
case "cdnconfig":
191-
build!.Settings.CDNConfig = (string)optionValue;
189+
case "--cdnconfig":
190+
build!.Settings.CDNConfig = optionValue;
192191
break;
193-
case "region":
194-
build!.Settings.Region = (string)optionValue;
192+
case "--region":
193+
build!.Settings.Region = optionValue;
195194
break;
196-
case "product":
197-
build!.Settings.Product = (string)optionValue;
195+
case "--product":
196+
build!.Settings.Product = optionValue;
198197
break;
199-
case "locale":
200-
build!.Settings.Locale = ((string)optionValue).ToLower() switch
198+
case "--locale":
199+
build!.Settings.Locale = (optionValue).ToLower() switch
201200
{
202201
"dede" => RootInstance.LocaleFlags.deDE,
203202
"enus" => RootInstance.LocaleFlags.enUS,
@@ -216,17 +215,17 @@ private static async Task CommandLineArgHandler(InvocationContext context)
216215
_ => throw new Exception("Invalid locale. Available locales: deDE, enUS, enGB, ruRU, zhCN, zhTW, enTW, esES, esMX, frFR, itIT, koKR, ptBR, ptPT"),
217216
};
218217
break;
219-
case "basedir":
220-
build!.Settings.BaseDir = (string)optionValue;
218+
case "--basedir":
219+
build!.Settings.BaseDir = optionValue;
221220
break;
222-
case "inputvalue":
223-
Input = (string)optionValue;
221+
case "--inputvalue":
222+
Input = optionValue;
224223
break;
225-
case "output":
226-
Output = (string)optionValue;
224+
case "--output":
225+
Output = optionValue;
227226
break;
228-
case "mode":
229-
Mode = ((string)optionValue).ToLower() switch
227+
case "--mode":
228+
Mode = (optionValue).ToLower() switch
230229
{
231230
"list" => InputMode.List,
232231
"ehash" => InputMode.EKey,
@@ -241,14 +240,14 @@ private static async Task CommandLineArgHandler(InvocationContext context)
241240
_ => throw new Exception("Invalid input mode. Available modes: list, ekey/ehash, ckey/chash, fdid/id, filename/name"),
242241
};
243242
break;
244-
case "cdndir":
245-
build!.Settings.CDNDir = (string)optionValue;
243+
case "--cdndir":
244+
build!.Settings.CDNDir = optionValue;
246245
break;
247-
case "cdns":
248-
build!.Settings.AdditionalCDNs.AddRange(((string)optionValue).Split(","));
246+
case "--cdns":
247+
build!.Settings.AdditionalCDNs.AddRange((optionValue).Split(","));
249248
break;
250-
case "version":
251-
case "help":
249+
case "--version":
250+
case "--help":
252251
break;
253252
default:
254253
Console.WriteLine("Unhandled command line option " + option.Name);
@@ -282,7 +281,7 @@ private static async Task CommandLineArgHandler(InvocationContext context)
282281
build.Settings.BuildConfig ??= buildInfoEntry.BuildConfig;
283282
build.Settings.CDNConfig ??= buildInfoEntry.CDNConfig;
284283

285-
if(string.IsNullOrEmpty(build.cdn.ProductDirectory))
284+
if (string.IsNullOrEmpty(build.cdn.ProductDirectory))
286285
build.cdn.ProductDirectory = buildInfoEntry.CDNPath;
287286
}
288287
else

TACTTool/TACTTool.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
</PropertyGroup>
1414

1515
<ItemGroup>
16-
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
16+
<PackageReference Include="System.CommandLine" Version="2.0.0" />
1717
</ItemGroup>
1818

1919
<ItemGroup>

0 commit comments

Comments
 (0)