1919using SmartImage . Lib . Utilities ;
2020using Spectre . Console . Rendering ;
2121using System . Collections . Concurrent ;
22+ using System . Collections . Specialized ;
2223using System . Diagnostics ;
2324using Flurl ;
2425using JetBrains . Annotations ;
2526using Kantan . Diagnostics ;
2627using Kantan . Model . MemberIndex ;
2728using Kantan . Utilities ;
2829using Novus . Streams ;
30+ using Novus . Utilities ;
2931using SixLabors . ImageSharp . Processing ;
3032using SmartImage . Rdx . Cli ;
3133
@@ -175,22 +177,35 @@ private async Task<int> RunSimpleAsync()
175177 . AutoRefresh ( false )
176178 . StartAsync ( async c =>
177179 {
178- var p = c . AddTask ( "Running search" ) ;
179- p . IsIndeterminate = true ;
180180 var cnt = ( double ) Client . Engines . Length ;
181- var p2 = c . AddTask ( "Engines" , maxValue : cnt ) ;
181+ var p = c . AddTask ( "Running search" , maxValue : cnt ) ;
182+ p . IsIndeterminate = true ;
183+ // var p2 = c.AddTask("Engines", maxValue: cnt);
182184
183- Client . OnResult += OnResultComplete ;
185+ // Client.OnResult += OnResultComplete;
184186
185187 var run = Client . RunSearchAsync ( Query , token : m_cts . Token ) ;
186188
189+ while ( await Client . ResultChannel . Reader . WaitToReadAsync ( ) ) {
190+ var x = await Client . ResultChannel . Reader . ReadAsync ( ) ;
191+ int i = 0 ;
192+
193+ var rm = new ResultModel ( x )
194+ { } ;
195+
196+ m_results . Add ( rm ) ;
197+ p . Description = $ "{ rm . Result . Engine . Name } { m_results . Count } / { cnt } ";
198+ p . Increment ( 1 ) ;
199+ c . Refresh ( ) ;
200+ }
201+
187202 await run ;
188203
189- Client . OnResult -= OnResultComplete ;
204+ // Client.OnResult -= OnResultComplete;
190205
191206 return ;
192207
193- void OnResultComplete ( object sender , SearchResult sr )
208+ /* void OnResultComplete(object sender, SearchResult sr)
194209 {
195210 int i = 0;
196211
@@ -201,7 +216,7 @@ void OnResultComplete(object sender, SearchResult sr)
201216 p2.Description = $"{rm.Result.Engine.Name} {m_results.Count} / {cnt}";
202217 p2.Increment(1);
203218 c.Refresh();
204- }
219+ }*/
205220 } ) ;
206221
207222 await prog ;
@@ -218,15 +233,44 @@ private async Task<int> RunTableAsync()
218233 . StartAsync ( async ( l ) =>
219234 {
220235
221- Client . OnResult += OnResultComplete ;
236+ // Client.OnResult += OnResultComplete;
222237
223238 var run = Client . RunSearchAsync ( Query , token : m_cts . Token ) ;
224239
240+ while ( await Client . ResultChannel . Reader . WaitToReadAsync ( ) ) {
241+ var sr = await Client . ResultChannel . Reader . ReadAsync ( ) ;
242+ int i = 0 ;
243+
244+ var rm = new ResultModel ( sr )
245+ { } ;
246+
247+ m_results . Add ( rm ) ;
248+
249+ if ( ! sr . IsStatusSuccessful ) {
250+ // Debugger.Break();
251+ var rows = rm . GetRowsForFormat ( format ) ;
252+ table . AddRow ( rows ) ;
253+ }
254+ else {
255+ var results = rm . GetRowsForFormat2 ( format ) ;
256+
257+ foreach ( IRenderable [ ] allResult in results ) {
258+ table . AddRow ( allResult ) ;
259+
260+ }
261+ }
262+
263+ rm . UpdateGrid ( ) ;
264+
265+ l . Refresh ( ) ;
266+ }
267+
225268 await run ;
226269
227- Client . OnResult -= OnResultComplete ;
270+ // Client.OnResult -= OnResultComplete;
228271 return ;
229272
273+ /*
230274 void OnResultComplete(object sender, SearchResult sr)
231275 {
232276 int i = 0;
@@ -255,13 +299,100 @@ void OnResultComplete(object sender, SearchResult sr)
255299 l.Refresh();
256300
257301 }
302+ */
258303 } ) ;
259304
260305 await live ;
261306
262307 return EC_OK ;
263308 }
264309
310+ public override ValidationResult Validate ( CommandContext context , SearchCommandSettings settings )
311+ {
312+ var r = base . Validate ( context , settings ) ;
313+ return r ;
314+
315+ // var v= base.Validate(context, settings);
316+ // return v;
317+ }
318+
319+ private void OnComplete ( object sender , SearchResult [ ] searchResults )
320+ {
321+ // pt1.Increment(COMPLETE);
322+ if ( ! String . IsNullOrWhiteSpace ( m_scs . CompletionCommand ) ) {
323+ var proc = new Process ( )
324+ {
325+ StartInfo =
326+ {
327+ FileName = m_scs . CompletionExecutable ,
328+ Arguments = m_scs . CompletionCommand ,
329+ UseShellExecute = false ,
330+ CreateNoWindow = true ,
331+ RedirectStandardError = true ,
332+ RedirectStandardOutput = true
333+ }
334+ } ;
335+ proc . Start ( ) ;
336+
337+ Debug . WriteLine ( $ "starting { proc . Id } ") ;
338+
339+ // proc.WaitForExit(TimeSpan.FromSeconds(3));
340+ // proc.Dispose();
341+ }
342+
343+ switch ( m_scs . OutputFormat ) {
344+
345+ case ResultFileFormat . None :
346+ break ;
347+
348+ case ResultFileFormat . Delimited :
349+ var fw = File . OpenWrite ( m_scs . OutputFile ) ;
350+
351+ var sw = new StreamWriter ( fw )
352+ {
353+ AutoFlush = true
354+ } ;
355+ var res = m_results . ToArray ( ) ;
356+ var fields = m_scs . OutputFields ;
357+
358+ for ( int i = 0 ; i < res . Length ; i ++ ) {
359+ var sr = res [ i ] . Result ;
360+
361+ for ( int j = 0 ; j < sr . Results . Count ; j ++ ) {
362+ var sri = sr . Results [ j ] ;
363+
364+ var rg = new List < string > ( ) ;
365+
366+ if ( fields . HasFlag ( OutputFields . Name ) ) {
367+ rg . Add ( $ "{ sr . Engine . Name } #{ j + 1 } ") ;
368+ }
369+
370+ if ( fields . HasFlag ( OutputFields . Url ) ) {
371+ rg . Add ( sri . Url ) ;
372+ }
373+
374+ if ( fields . HasFlag ( OutputFields . Similarity ) ) {
375+ rg . Add ( $ "{ sri . Similarity } ") ;
376+ }
377+
378+ // string[] items = [$"{sr.Engine.Name} #{j + 1}", sri.Url?.ToString()];
379+ sw . WriteLine ( String . Join ( m_scs . OutputFileDelimiter , rg ) ) ;
380+ }
381+
382+ }
383+
384+ sw . Dispose ( ) ;
385+ fw . Dispose ( ) ;
386+
387+ AConsole . WriteLine ( $ "Wrote to { m_scs . OutputFile } ") ;
388+ break ;
389+
390+ default :
391+ throw new ArgumentOutOfRangeException ( ) ;
392+ }
393+
394+ }
395+
265396 public async Task < int > RunInteractiveAsync ( )
266397 {
267398
@@ -367,77 +498,6 @@ public async Task<int> RunInteractiveAsync()
367498 return EC_OK ;
368499 }
369500
370- public override ValidationResult Validate ( CommandContext context , SearchCommandSettings settings )
371- {
372- var r = base . Validate ( context , settings ) ;
373- return r ;
374-
375- // var v= base.Validate(context, settings);
376- // return v;
377- }
378-
379- private void OnComplete ( object sender , SearchResult [ ] searchResults )
380- {
381- // pt1.Increment(COMPLETE);
382- if ( ! String . IsNullOrWhiteSpace ( m_scs . CompletionCommand ) ) {
383- var proc = new Process ( )
384- {
385- StartInfo =
386- {
387- FileName = m_scs . CompletionExecutable ,
388- Arguments = m_scs . CompletionCommand ,
389- UseShellExecute = false ,
390- CreateNoWindow = true ,
391- RedirectStandardError = true ,
392- RedirectStandardOutput = true
393- }
394- } ;
395- proc . Start ( ) ;
396-
397- Debug . WriteLine ( $ "starting { proc . Id } ") ;
398-
399- // proc.WaitForExit(TimeSpan.FromSeconds(3));
400- // proc.Dispose();
401- }
402-
403- switch ( m_scs . OutputFormat ) {
404-
405- case ResultFileFormat . None :
406- break ;
407-
408- case ResultFileFormat . Delimited :
409- var fw = File . OpenWrite ( m_scs . OutputFile ) ;
410-
411- var sw = new StreamWriter ( fw )
412- {
413- AutoFlush = true
414- } ;
415- var res = m_results . ToArray ( ) ;
416-
417- for ( int i = 0 ; i < res . Length ; i ++ ) {
418- var sr = res [ i ] . Result ;
419-
420- for ( int j = 0 ; j < sr . Results . Count ; j ++ ) {
421- var sri = sr . Results [ j ] ;
422-
423- string [ ] items = [ $ "{ sr . Engine . Name } #{ j + 1 } ", sri . Url ? . ToString ( ) ] ;
424- sw . WriteLine ( String . Join ( m_scs . OutputFileDelimiter , items ) ) ;
425- }
426-
427- }
428-
429- sw . Dispose ( ) ;
430- fw . Dispose ( ) ;
431-
432- AConsole . WriteLine ( $ "Wrote to { m_scs . OutputFile } ") ;
433- break ;
434-
435- default :
436- throw new ArgumentOutOfRangeException ( ) ;
437- }
438-
439- }
440-
441501 public void Dispose ( )
442502 {
443503 foreach ( var sr in m_results ) {
0 commit comments