66using System . Diagnostics . CodeAnalysis ;
77using JetBrains . Annotations ;
88using SmartImage . Lib ;
9- using SmartImage . Lib . Engines ;
109using SmartImage . Lib . Results ;
1110using Spectre . Console ;
1211using Spectre . Console . Rendering ;
13- using AConsole = Spectre . Console . AnsiConsole ;
12+ using AConsole = Spectre . Console . AnsiConsole ;
13+
1414// ReSharper disable InconsistentNaming
1515
1616namespace SmartImage . Mode ;
1717
1818public sealed class CliMode : IDisposable , IMode , IProgress < int >
1919{
20+ private const int COMPLETE = 100 ;
21+
2022 #region
2123
2224 static CliMode ( )
@@ -49,14 +51,26 @@ public CliMode()
4951
5052 public async Task < object ? > RunAsync ( object ? c )
5153 {
54+ await AConsole . Progress ( ) . AutoRefresh ( true ) . StartAsync ( async ctx =>
55+ {
56+ var p = ctx . AddTask ( "Creating query" ) ;
57+ p . IsIndeterminate = true ;
58+ m_query = await SearchQuery . TryCreateAsync ( ( string ) c ! ) ;
59+ p . Increment ( COMPLETE ) ;
60+ ctx . Refresh ( ) ;
61+ } ) ;
62+
63+ AConsole . WriteLine ( $ "Input: { m_query } ") ;
64+
65+ await AConsole . Progress ( ) . AutoRefresh ( true ) . StartAsync ( async ctx =>
66+ {
67+ var p = ctx . AddTask ( "Uploading" ) ;
68+ p . IsIndeterminate = true ;
69+ var url = await m_query . UploadAsync ( ) ;
5270
53- // await Prg_1.StartAsync(ctx => ValidateInputAsync(ctx, c as string));
54- await ValidateInputAsync ( ( string ) c ! ) ;
55- AConsole . WriteLine ( $ "{ m_query } ") ;
56-
57- // var url = await Prg_1.StartAsync(UploadInputAsync);
58-
59- var url = await UploadInputAsync ( ) ;
71+ p . Increment ( COMPLETE ) ;
72+ ctx . Refresh ( ) ;
73+ } ) ;
6074
6175 AConsole . MarkupLine ( $ "[green]{ m_query . Upload } [/]") ;
6276
@@ -66,7 +80,8 @@ public CliMode()
6680 {
6781 args . Cancel = false ;
6882 m_cts . Cancel ( ) ;
69- AConsole . MarkupLine ( $ "[red]Cancellation requested { args } [/]") ;
83+ AConsole . MarkupLine ( $ "[red]Cancellation requested[/]") ;
84+ Environment . Exit ( - 1 ) ;
7085 } ;
7186
7287 // await Prg_1.StartAsync(RunSearchAsync);
@@ -77,39 +92,8 @@ public CliMode()
7792
7893 }
7994
80- private async Task ValidateInputAsync ( string c )
81- {
82- // var t = ctx.AddTask("Validating input");
83- // t.IsIndeterminate = true;
84-
85- m_query = await SearchQuery . TryCreateAsync ( c ) ;
86-
87- // t.Increment(COMPLETE);
88- }
89-
90- private async Task < Url > UploadInputAsync ( )
91- {
92- // var pt = p.AddTask($"Upload");
93- // pt.IsIndeterminate = true;
94- var urlInner = await m_query . UploadAsync ( ) ;
95- // pt.Increment(COMPLETE);
96- return urlInner ;
97-
98- }
99-
10095 private async Task RunSearchAsync ( )
10196 {
102- /*var ptMap = new Dictionary<BaseSearchEngine, (ProgressTask, Table)>();
103-
104- foreach (var e in m_client.Engines) {
105- var t = ctx.AddTask($"{e}");
106- var tt = get_table(e);
107- t.IsIndeterminate = true;
108- ptMap.Add(e, (t, tt));
109- }
110-
111- var pt1 = ctx.AddTask("[yellow]Searching[/]");
112- pt1.IsIndeterminate = false;*/
11397
11498 void OnComplete ( object sender , SearchResult [ ] searchResults )
11599 {
@@ -126,7 +110,13 @@ void OnComplete(object sender, SearchResult[] searchResults)
126110 ShowHeaders = true ,
127111 } ;
128112
129- mt . AddColumns ( new TableColumn ( "#" ) , new TableColumn ( "Link" ) ) ;
113+ mt . AddColumns ( new TableColumn ( "#" ) ,
114+ new TableColumn ( "Name" ) ,
115+ new TableColumn ( "Similarity" ) ,
116+ new TableColumn ( "Artist" ) ,
117+ new TableColumn ( "Description" ) ,
118+ new TableColumn ( "Character" )
119+ ) ;
130120
131121 // pt1.MaxValue = m_client.Engines.Length;
132122
@@ -143,8 +133,11 @@ void OnResult(object sender, SearchResult sr)
143133 mt . Rows . Add ( new IRenderable [ ]
144134 {
145135 new Text ( $ "{ i + 1 } ") ,
146- Markup . FromInterpolated ( $ "[link={ sri . Url } ]{ sr . Engine . Name } #{ i + 1 } [/]")
147-
136+ Markup . FromInterpolated ( $ "[link={ sri . Url } ]{ sr . Engine . Name } #{ i + 1 } [/]") ,
137+ Markup . FromInterpolated ( $ "{ sri . Similarity } ") ,
138+ Markup . FromInterpolated ( $ "{ sri . Artist } ") ,
139+ Markup . FromInterpolated ( $ "{ sri . Description } ") ,
140+ Markup . FromInterpolated ( $ "{ sri . Character } ") ,
148141 } ) ;
149142
150143 i ++ ;
@@ -155,58 +148,27 @@ void OnResult(object sender, SearchResult sr)
155148
156149 m_client . OnResult += OnResult ;
157150
158- var ttt = m_client . RunSearchAsync ( m_query , m_cts . Token ) ;
151+ var run = m_client . RunSearchAsync ( m_query , m_cts . Token ) ;
159152
160- /*
161- while (!pt1.IsFinished) { }*/
162153 var sw = Stopwatch . StartNew ( ) ;
163154
164- var sp = AConsole . Live ( mt )
155+ var live = AConsole . Live ( mt )
165156 . AutoClear ( false )
166157 . Overflow ( VerticalOverflow . Ellipsis )
167158 . StartAsync ( async ( ctx ) =>
168159 {
169- while ( ! ttt . IsCompleted ) {
160+ while ( ! run . IsCompleted ) {
170161 ctx . Refresh ( ) ;
171162 mt . Caption = new TableTitle ( $ "{ sw . Elapsed . TotalSeconds : F3} ") ;
172163 // await Task.Delay(1000);
173164 }
174165
175166 } ) ;
176167
177- await ttt ;
178-
179- /*var ld = AnsiConsole.Live(new Table()
180- { });
181- ld.StartAsync(async (x) =>
182- {
183- return;
184- });*/
185- // pt1.StopTask();
186-
187- /*while (!pt1.IsFinished || ptMap.Any(s => !s.Value.Item1.IsFinished)) {
188- await Task.Delay(TimeSpan.FromMilliseconds(100));
189- }*/
190-
191- // AnsiConsole.Clear();
192-
193- await sp ;
194-
195- }
196-
197- private static Table get_table ( BaseSearchEngine bse )
198- {
199- var tt = new Table ( )
200- {
201- Border = TableBorder . Heavy ,
202- Title = new ( $ "{ bse . Name } ") ,
203- ShowFooters = true ,
204- ShowHeaders = true ,
205- } ;
168+ await run ;
206169
207- tt . AddColumns ( new TableColumn ( "#" ) , new TableColumn ( "Link" ) ) ;
170+ await live ;
208171
209- return tt ;
210172 }
211173
212174 public void Dispose ( )
0 commit comments