Skip to content

Commit ea8689c

Browse files
committed
fix: CLI error reporting when parsing fails
1 parent 9456c95 commit ea8689c

2 files changed

Lines changed: 34 additions & 46 deletions

File tree

AutoTag.CLI/CLIInterface.cs

Lines changed: 33 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ public class CLIInterface(IServiceProvider serviceProvider, IAnsiConsole console
99
{
1010
private AutoTagConfig Config = null!;
1111
private TaggingFile CurrentFile = null!;
12-
private List<TaggingFile> Files = null!;
13-
14-
private bool Success = true;
15-
private int Warnings;
1612

1713
public void DisplayMessage(string message, MessageType type)
1814
{
@@ -46,19 +42,13 @@ public void SetStatus(string status, MessageType type)
4642
{
4743
CurrentFile.Status = status;
4844
}
49-
50-
Success = false;
51-
CurrentFile.Success = false;
5245
}
5346
else if (CurrentFile.Success)
5447
{
5548
CurrentFile.Status = status;
5649
}
5750

58-
if (type.IsWarning())
59-
{
60-
Warnings++;
61-
}
51+
CurrentFile.HasWarnings |= type.IsWarning();
6252

6353
DisplayMessage($" {status}", type);
6454
}
@@ -76,19 +66,19 @@ public void SetStatus(string status, MessageType type, Exception ex)
7666
public int? SelectOption(string message, List<string> options)
7767
{
7868
var choice = console.Prompt(
79-
new SelectionPrompt<(int?, string)>()
69+
new SelectionPrompt<(int? Index, string Value)>()
8070
.Title($" [yellow]{Markup.Escape(message)}[/]")
8171
.PageSize(10)
8272
.AddChoices([
8373
..options.Select((o, i) => (i, Markup.Escape(o))),
8474
(null, "(Skip file)")
8575
])
86-
.UseConverter(o => $" {o.Item2}")
76+
.UseConverter(o => $" {o.Value}")
8777
.WrapAround()
8878
.HighlightStyle(new Style(Color.Aqua))
8979
);
9080

91-
return choice.Item1;
81+
return choice.Index;
9282
}
9383

9484
public void SetFilePath(string path)
@@ -105,67 +95,64 @@ public async Task<int> RunAsync(IEnumerable<FileSystemInfo> entries)
10595
console.WriteLine($"AutoTag v{GetVersion()}");
10696
console.MarkupLine("[link]https://jtattersall.net[/]");
10797

108-
Files = fileFinder.FindFilesToProcess(entries);
98+
var files = fileFinder.FindFilesToProcess(entries);
10999

110-
if (Files.Count == 0)
100+
if (files.Count == 0)
111101
{
112102
DisplayMessage("No files found", MessageType.Error);
113103
return 1;
114104
}
115105

116-
foreach (var file in Files)
106+
foreach (var file in files)
117107
{
118108
CurrentFile = file;
119109
console.MarkupLineInterpolated($"[fuchsia]\n{file.Path}:[/]");
120110

121-
Success &= (await ProcessWithFallbackAsync(file, movieProcessor, tvProcessor)).IsSuccess();
111+
file.Success = (await ProcessWithFallbackAsync(file, movieProcessor, tvProcessor)).IsSuccess();
122112
}
123113

124-
return ReportResults(Files.Count);
114+
return ReportResults(files);
125115
}
126116

127-
private int ReportResults(int fileCount)
117+
private int ReportResults(List<TaggingFile> files)
128118
{
129-
if (Success)
119+
var succeeded = files.Count(f => f.Success);
120+
var warnings = files.Count(f => f.HasWarnings);
121+
var failed = files.Count - succeeded;
122+
123+
if (succeeded == 0)
130124
{
131-
if (Warnings == 0)
125+
console.MarkupLine("[maroon]\n\nErrors encountered for all files:[/]");
126+
}
127+
else
128+
{
129+
var succeededFiles = $"{succeeded} files";
130+
if (failed == 0)
132131
{
133-
console.MarkupLineInterpolated(
134-
$"\n\n[green]{(fileCount > 1 ? $"All {fileCount} files" : "File")} successfully processed.[/]");
132+
succeededFiles = files.Count == 1 ? "File" : "All files";
135133
}
136-
else
137-
{
138-
console.MarkupLineInterpolated(
139-
$"[yellow]\n\n{(fileCount > 1 ? $"All {fileCount} files" : "File")} successfully processed with {Warnings} warning{(Warnings > 1 ? "s" : "")}.[/]");
140-
}
141-
142-
return 0;
143-
}
144134

145-
var failedFiles = Files.Count(f => !f.Success);
146-
147-
if (failedFiles < fileCount)
148-
{
149-
if (Warnings == 0)
135+
if (warnings == 0)
150136
{
151137
console.MarkupLineInterpolated(
152-
$"[green]\n\n{fileCount - failedFiles} file{(fileCount - failedFiles > 1 ? "s" : "")} successfully processed.[/]");
138+
$"[green]\n\n{succeededFiles} successfully processed.[/]");
153139
}
154140
else
155141
{
156142
console.MarkupLineInterpolated(
157-
$"[yellow]\n\n{fileCount - failedFiles} file{(fileCount - failedFiles > 1 ? "s" : "")} successfully processed with {Warnings} warning{(Warnings > 1 ? "s" : "")}.[/]");
143+
$"[yellow]\n\n{succeededFiles} successfully processed with {warnings} warning{(warnings > 1 ? "s" : "")}.[/]");
144+
}
145+
146+
if (failed == 0)
147+
{
148+
return 0;
158149
}
159150

160151
console.MarkupLineInterpolated(
161-
$"[maroon]Errors encountered for {failedFiles} file{(failedFiles > 1 ? "s" : "")}:[/]");
162-
}
163-
else
164-
{
165-
console.MarkupLine("[maroon]\n\nErrors encountered for all files:[/]");
152+
$"[maroon]Errors encountered for {failed} file{(failed > 1 ? "s" : "")}:[/]");
166153
}
167154

168-
foreach (var file in Files.Where(f => !f.Success))
155+
foreach (var file in files.Where(f => !f.Success))
169156
{
170157
console.MarkupLineInterpolated($"[magenta]{file.Path}:[/]");
171158
console.MarkupLineInterpolated($"[red] {file.Status}\n[/]");
@@ -181,7 +168,7 @@ private async Task<ProcessResult> ProcessWithFallbackAsync(TaggingFile file, IPr
181168
{
182169
if (file is { TVDetails: null, MovieDetails: null })
183170
{
184-
DisplayMessage("Error: Unable to parse required information from filename", MessageType.Error);
171+
SetStatus("Error: Unable to parse required information from filename", MessageType.Error);
185172
return ProcessResult.ParseFailure;
186173
}
187174

AutoTag.Core/Files/TaggingFile.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public record TaggingFile
99
public bool Taggable { get; init; } = true;
1010
public string Status { get; set; } = "";
1111
public bool Success { get; set; } = true;
12+
public bool HasWarnings { get; set; }
1213

1314
public ParsedTVFileName? TVDetails { get; init; }
1415
public ParsedMovieFileName? MovieDetails { get; init; }

0 commit comments

Comments
 (0)