Skip to content

Commit 9ba92e8

Browse files
committed
fix: cli 的一些问题
1 parent 85e8c12 commit 9ba92e8

4 files changed

Lines changed: 64 additions & 8 deletions

File tree

AquaMai

MaiChartManager.CLI/Commands/MakeMp4Command.cs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ public class Settings : CommandSettings
1818
[Description("输出文件路径(仅单文件时可用)")]
1919
public string? Output { get; set; }
2020

21+
[CommandOption("-f|--force")]
22+
[Description("覆盖已存在的输出文件")]
23+
[DefaultValue(false)]
24+
public bool Force { get; set; }
25+
2126
public override ValidationResult Validate()
2227
{
2328
if (Sources.Length == 0)
@@ -50,11 +55,23 @@ public override async Task<int> ExecuteAsync(CommandContext context, Settings se
5055
{
5156
var source = settings.Sources[0];
5257
var output = settings.Output ?? Path.ChangeExtension(source, ".mp4");
58+
59+
if (!settings.Force && File.Exists(output))
60+
{
61+
AnsiConsole.MarkupLine($"[red]✗ 输出文件已存在: {output}(使用 --force 覆盖)[/]");
62+
return 1;
63+
}
64+
5365
await ConvertSingleFile(source, output);
5466
}
5567
else
5668
{
57-
await ConvertMultipleFiles(settings);
69+
var errorCount = await ConvertMultipleFiles(settings);
70+
if (errorCount > 0)
71+
{
72+
AnsiConsole.MarkupLine($"[yellow]⚠ 转换完成,{errorCount} 个文件失败(使用 --force 覆盖已存在的文件)[/]");
73+
return 1;
74+
}
5875
}
5976

6077
AnsiConsole.MarkupLine("[green]✓ 所有转换已成功完成![/]");
@@ -101,10 +118,11 @@ await VideoConvert.ConvertUsmToMp4(
101118
AnsiConsole.MarkupLine($"[green]✓ 已保存到: {output}[/]");
102119
}
103120

104-
private async Task ConvertMultipleFiles(Settings settings)
121+
private async Task<int> ConvertMultipleFiles(Settings settings)
105122
{
106123
AnsiConsole.MarkupLine($"[yellow]正在转换 {settings.Sources.Length} 个文件...[/]");
107124

125+
int doneCount = 0, errorCount = 0;
108126
await AnsiConsole.Progress()
109127
.AutoClear(false)
110128
.Columns(
@@ -114,13 +132,21 @@ await AnsiConsole.Progress()
114132
new SpinnerColumn())
115133
.StartAsync(async ctx =>
116134
{
117-
int doneCount = 0, errorCount = 0;
118135
foreach (var source in settings.Sources)
119136
{
120137
var output = Path.ChangeExtension(source, ".mp4");
121138
var task = ctx.AddTask($"[green]{Path.GetFileName(source)}[/]");
122139
task.MaxValue = 100;
123140

141+
if (!settings.Force && File.Exists(output))
142+
{
143+
errorCount++;
144+
task.Description = $"[red]{Path.GetFileName(source)} - 输出文件已存在[/]";
145+
task.Value = 100;
146+
task.StopTask();
147+
continue;
148+
}
149+
124150
if (errorCount > 0)
125151
{
126152
TerminalProgress.Set(TerminalProgress.Status.Warning, (errorCount + doneCount) * 100 / settings.Sources.Length);
@@ -152,5 +178,7 @@ await VideoConvert.ConvertUsmToMp4(
152178
}
153179
TerminalProgress.Clear();
154180
});
181+
182+
return errorCount;
155183
}
156184
}

MaiChartManager.CLI/Commands/MakeUsmCommand.cs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,11 @@ public class Settings : CommandSettings
2828
[DefaultValue(false)]
2929
public bool UseYuv420p { get; set; }
3030

31+
[CommandOption("-f|--force")]
32+
[Description("覆盖已存在的输出文件")]
33+
[DefaultValue(false)]
34+
public bool Force { get; set; }
35+
3136
public override ValidationResult Validate()
3237
{
3338
if (Sources.Length == 0)
@@ -72,11 +77,23 @@ await AnsiConsole.Status()
7277
{
7378
var source = settings.Sources[0];
7479
var output = settings.Output ?? Path.ChangeExtension(source, ".dat");
80+
81+
if (!settings.Force && File.Exists(output))
82+
{
83+
AnsiConsole.MarkupLine($"[red]✗ 输出文件已存在: {output}(使用 --force 覆盖)[/]");
84+
return 1;
85+
}
86+
7587
await ConvertSingleFile(source, output, settings);
7688
}
7789
else
7890
{
79-
await ConvertMultipleFiles(settings);
91+
var errorCount = await ConvertMultipleFiles(settings);
92+
if (errorCount > 0)
93+
{
94+
AnsiConsole.MarkupLine($"[yellow]⚠ 转换完成,{errorCount} 个文件失败(使用 --force 覆盖已存在的文件)[/]");
95+
return 1;
96+
}
8097
}
8198

8299
AnsiConsole.MarkupLine("[green]✓ 所有转换已成功完成![/]");
@@ -125,10 +142,11 @@ await VideoConvert.ConvertVideoToUsm(
125142
AnsiConsole.MarkupLine($"[green]✓ 已保存到: {output}[/]");
126143
}
127144

128-
private async Task ConvertMultipleFiles(Settings settings)
145+
private async Task<int> ConvertMultipleFiles(Settings settings)
129146
{
130147
AnsiConsole.MarkupLine($"[yellow]正在转换 {settings.Sources.Length} 个文件...[/]");
131148

149+
int doneCount = 0, errorCount = 0;
132150
await AnsiConsole.Progress()
133151
.AutoClear(false)
134152
.Columns(
@@ -138,13 +156,21 @@ await AnsiConsole.Progress()
138156
new SpinnerColumn())
139157
.StartAsync(async ctx =>
140158
{
141-
int doneCount = 0, errorCount = 0;
142159
foreach (var source in settings.Sources)
143160
{
144161
var output = Path.ChangeExtension(source, ".dat");
145162
var task = ctx.AddTask($"[green]{Path.GetFileName(source)}[/]");
146163
task.MaxValue = 100;
147164

165+
if (!settings.Force && File.Exists(output))
166+
{
167+
errorCount++;
168+
task.Description = $"[red]{Path.GetFileName(source)} - 输出文件已存在[/]";
169+
task.Value = 100;
170+
task.StopTask();
171+
continue;
172+
}
173+
148174
if (errorCount > 0)
149175
{
150176
TerminalProgress.Set(TerminalProgress.Status.Warning, (errorCount + doneCount) * 100 / settings.Sources.Length);
@@ -178,5 +204,7 @@ await VideoConvert.ConvertVideoToUsm(
178204
}
179205
TerminalProgress.Clear();
180206
});
207+
208+
return errorCount;
181209
}
182210
}

MaiLib

0 commit comments

Comments
 (0)