Skip to content

Commit 0f1719c

Browse files
committed
使用带 Verb 的方式做命令行
1 parent fa3637a commit 0f1719c

3 files changed

Lines changed: 34 additions & 24 deletions

File tree

src/MediaConverters/MediaConverters.Tests/Tool/MediaConverterTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Text.Json;
22
using System.Text.Json.Serialization;
3-
3+
using DotNetCampus.MediaConverters.CommandLineHandlers;
44
using DotNetCampus.MediaConverters.Contexts;
55
using DotNetCampus.MediaConverters.Imaging.Effects;
66
using DotNetCampus.MediaConverters.Imaging.Effects.Colors;
@@ -253,9 +253,9 @@ public async Task ReplaceColorTask3()
253253
TestHelper.OpenFileInExplorer(new FileInfo(options.OutputFile));
254254
}
255255

256-
private void AssertReplaceColor(Options options)
256+
private void AssertReplaceColor(ConvertHandler convertHandler)
257257
{
258-
var inputFile = options.InputFile;
258+
var inputFile = convertHandler.InputFile;
259259
using var image = Image.Load<Rgba32>(inputFile);
260260

261261
var list = image.GetColorCountList();
@@ -270,14 +270,14 @@ private void AssertReplaceColor(Options options)
270270

271271
image.ReplaceColor(replaceList);
272272

273-
var tempFile = Path.Join(options.WorkingFolder, $"Assert_{Path.GetRandomFileName()}.png");
273+
var tempFile = Path.Join(convertHandler.WorkingFolder, $"Assert_{Path.GetRandomFileName()}.png");
274274
image.SaveAsPng(tempFile, new PngEncoder()
275275
{
276276
ColorType = PngColorType.RgbWithAlpha
277277
});
278278

279279
var visionComparer = new VisionComparer();
280-
var visionCompareResult = visionComparer.Compare(new FileInfo(tempFile), new FileInfo(options.OutputFile));
280+
var visionCompareResult = visionComparer.Compare(new FileInfo(tempFile), new FileInfo(convertHandler.OutputFile));
281281
Assert.IsTrue(visionCompareResult.IsSimilar());
282282
}
283283

@@ -336,7 +336,7 @@ public async Task OptimizeImageFile5()
336336
TestHelper.OpenFileInExplorer(new FileInfo(options.OutputFile));
337337
}
338338

339-
private Options ToOptions(string fileName, ImageConvertContext imageConvertContext)
339+
private ConvertHandler ToOptions(string fileName, ImageConvertContext imageConvertContext)
340340
{
341341
var testFolder = Path.Join(TestHelper.WorkingDirectory.FullName, Path.GetRandomFileName());
342342
Directory.CreateDirectory(testFolder);
@@ -353,7 +353,7 @@ private Options ToOptions(string fileName, ImageConvertContext imageConvertConte
353353
});
354354
File.WriteAllText(configFile, jsonText);
355355

356-
return new Options()
356+
return new ConvertHandler()
357357
{
358358
WorkingFolder = workingFolder,
359359
InputFile = inputFile.FullName,
@@ -380,7 +380,7 @@ public async Task CustomTest()
380380
var workingFolder = Path.Join(testFolder, "Working");
381381
var outputFile = Path.Join(testFolder, "Output.png");
382382

383-
var options = new Options()
383+
var options = new ConvertHandler()
384384
{
385385
WorkingFolder = workingFolder,
386386
InputFile = imageFile,

src/MediaConverters/MediaConverters.Tool/Contexts/Options.cs renamed to src/MediaConverters/MediaConverters.Tool/CommandLineHandlers/ConvertHandler.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
using DotNetCampus.Cli.Compiler;
1+
using System.Threading.Tasks;
2+
using DotNetCampus.Cli;
3+
using DotNetCampus.Cli.Compiler;
24

3-
namespace DotNetCampus.MediaConverters.Contexts;
5+
namespace DotNetCampus.MediaConverters.CommandLineHandlers;
46

5-
public class Options
7+
[Verb("convert")]
8+
public class ConvertHandler : ICommandHandler
69
{
710
[Option]
811
public required string WorkingFolder { get; init; }
@@ -18,4 +21,8 @@ public class Options
1821

1922
public bool? ShouldLogToConsole { get; init; }
2023
public bool? ShouldLogToFile { get; init; }
24+
public async Task<int> RunAsync()
25+
{
26+
return await Program.RunAsync(this);
27+
}
2128
}

src/MediaConverters/MediaConverters.Tool/Program.cs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
using System.IO;
1212
using System.Text.Json;
1313
using System.Threading.Tasks;
14+
using DotNetCampus.Cli;
15+
using DotNetCampus.MediaConverters.CommandLineHandlers;
1416
using SixLabors.ImageSharp.Formats.Png;
1517
using ErrorCode = DotNetCampus.MediaConverters.Contexts.MediaConverterErrorCode;
1618

@@ -42,7 +44,7 @@ static async Task<int> Main(string[] args)
4244
await File.WriteAllTextAsync(configurationFile, jsonText);
4345
var outputFile = Path.Join(testFolder.FullName, "1.png");
4446

45-
return await RunAsync(new Options()
47+
return await RunAsync(new ConvertHandler()
4648
{
4749
InputFile = inputFile,
4850
ConvertConfigurationFile = configurationFile,
@@ -54,16 +56,17 @@ static async Task<int> Main(string[] args)
5456
});
5557
}
5658

57-
var options = DotNetCampus.Cli.CommandLine.Parse(args).As<Options>();
58-
59-
return await RunAsync(options);
59+
return await DotNetCampus.Cli.CommandLine.Parse(args)
60+
.AddHandler<ConvertHandler>()
61+
.RunAsync()
62+
;
6063
}
6164

62-
internal static async Task<ErrorCode> RunAsync(Options options)
65+
internal static async Task<ErrorCode> RunAsync(ConvertHandler convertHandler)
6366
{
6467
var stopwatch = Stopwatch.StartNew();
6568

66-
var jsonText = await File.ReadAllTextAsync(options.ConvertConfigurationFile);
69+
var jsonText = await File.ReadAllTextAsync(convertHandler.ConvertConfigurationFile);
6770

6871
var imageConvertContext = ImageConvertContext.FromJsonText(jsonText);
6972

@@ -73,18 +76,18 @@ internal static async Task<ErrorCode> RunAsync(Options options)
7376
return ErrorCode.UnknownError;
7477
}
7578

76-
var inputFile = new FileInfo(options.InputFile);
79+
var inputFile = new FileInfo(convertHandler.InputFile);
7780

78-
var workingFolder = Directory.CreateDirectory(options.WorkingFolder);
81+
var workingFolder = Directory.CreateDirectory(convertHandler.WorkingFolder);
7982

8083
var useAreaSizeLimit = imageConvertContext.UseAreaSizeLimit ?? true;
8184
var copyNewFile = imageConvertContext.ShouldCopyNewFile ?? true;
8285

8386
var context = new ImageFileOptimizationContext(inputFile, workingFolder, imageConvertContext.MaxImageWidth,
8487
imageConvertContext.MaxImageHeight)
8588
{
86-
ShouldLogToConsole = options.ShouldLogToConsole ?? false,
87-
ShouldLogToFile = options.ShouldLogToFile ?? false,
89+
ShouldLogToConsole = convertHandler.ShouldLogToConsole ?? false,
90+
ShouldLogToFile = convertHandler.ShouldLogToFile ?? false,
8891
};
8992
using var imageFileOptimizationResult = await ImageFileOptimization.OptimizeImageFileAsync(context, useAreaSizeLimit, copyNewFile);
9093

@@ -134,19 +137,19 @@ internal static async Task<ErrorCode> RunAsync(Options options)
134137
workerProvider.Run(image, imageConvertTask);
135138
}
136139

137-
await image.SaveAsPngAsync(options.OutputFile, new PngEncoder()
140+
await image.SaveAsPngAsync(convertHandler.OutputFile, new PngEncoder()
138141
{
139142
ColorType = PngColorType.RgbWithAlpha,
140143
BitDepth = PngBitDepth.Bit8,
141144
});
142145
}
143146
else
144147
{
145-
optimizedImageFile.CopyTo(options.OutputFile, overwrite: true);
148+
optimizedImageFile.CopyTo(convertHandler.OutputFile, overwrite: true);
146149
}
147150

148151
stopwatch.Stop();
149-
context.LogMessage($"Success converted image. Cost {stopwatch.ElapsedMilliseconds}ms. OutputFile:'{options.OutputFile}'");
152+
context.LogMessage($"Success converted image. Cost {stopwatch.ElapsedMilliseconds}ms. OutputFile:'{convertHandler.OutputFile}'");
150153

151154
return ErrorCode.Success;
152155
}

0 commit comments

Comments
 (0)