@@ -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 \n Errors 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 \n Errors 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
0 commit comments