@@ -73,6 +73,8 @@ public sealed partial class SearchCommand : CommonAsyncCommand<SearchCommandSett
7373
7474 private SpcTable m_mainTable ;
7575
76+ // private readonly ConcurrentDictionary<SearchResult, SelectionPrompt<SearchResultItem>> m_prompts = new();
77+
7678 private Layout m_layout ;
7779
7880 private static readonly ILogger s_logger = AppSupport . Factory . CreateLogger ( nameof ( SearchCommand ) ) ;
@@ -167,6 +169,7 @@ public override async Task<int> ExecuteAsync(CommandContext context, SearchComma
167169 // AnsiConsole.Write(m_layout);
168170
169171 try {
172+
170173 IRenderable elem = CommandSettings . Interactive ? m_layout : m_mainTable ;
171174
172175 Task main = AnsiConsole . Live ( elem )
@@ -234,6 +237,20 @@ private async Task RunSearchLiveAsync(LiveDisplayContext c, CancellationToken ct
234237 }
235238
236239 m_resultTables . TryAdd ( result , table ) ;
240+
241+ /*var prompt = new SelectionPrompt<SearchResultItem>()
242+ {
243+ Converter = static r =>
244+ {
245+ return r.Url;
246+ },
247+ Mode = SelectionMode.Independent,
248+ SearchEnabled = true,
249+ };
250+ prompt.AddChoices(result.Results);
251+
252+ m_prompts.TryAdd(result, prompt);*/
253+
237254 m_mainTable . AddRow ( result . GetMainRows ( ) ) ;
238255 Elements . Prm_SearchResult . AddChoice ( result ) ;
239256 }
@@ -284,6 +301,8 @@ private async Task RunInteractiveAsync(CancellationToken ct = default)
284301 break ;
285302 }
286303
304+ // var selx = AC.Prompt(m_prompts[sr]);
305+
287306 var sel = ShellSelection . GetSelectionChoice ( sr ) ;
288307 var sri = sel . Item ;
289308 var selIdx = sel . Index ( ) ;
@@ -297,7 +316,7 @@ private async Task RunInteractiveAsync(CancellationToken ct = default)
297316 continue ;
298317 }
299318
300- if ( cmd == R2 . Chc_Scan ) {
319+ if ( cmd == R2 . Chc_Scan && ! sel . IsScannedItem ) {
301320 await AnsiConsole . Live ( srTable ) . StartAsync ( async ( f ) =>
302321 {
303322 s_logger . LogTrace ( "Scanning {Item}" , sri ) ;
@@ -316,6 +335,7 @@ await AnsiConsole.Live(srTable).StartAsync(async (f) =>
316335 srTable . InsertRow ( selIdx + i + 1 , scnRow ) ;
317336 }
318337
338+ // m_prompts[sr].AddChoiceGroup(sri, sri.ScannedItems);
319339
320340 f . Refresh ( ) ;
321341
@@ -357,9 +377,9 @@ await AnsiConsole.Live(srTable).StartAsync(async (f) =>
357377 }
358378
359379
360- } while ( cmd != R2 . Chc_Back ) ;
380+ } while ( cmd != R2 . Chc_Back && ! ct . IsCancellationRequested ) ;
361381
362- } while ( cmd != R2 . Chc_Exit ) ;
382+ } while ( cmd != R2 . Chc_Exit && ! ct . IsCancellationRequested ) ;
363383 }
364384
365385#endregion
@@ -426,7 +446,18 @@ private void ShowPreview(CanvasImage ci, SearchResultItem sri)
426446 {
427447 var ( w , h ) = ( AnsiConsole . Profile . Width , AC . Profile . Height ) ;
428448
429- var pnl = new Panel ( ci ) { Expand = true , Border = BoxBorder . None } ;
449+ var pnl = new Panel ( ci ) { Expand = true , Border = BoxBorder . None , Header = new PanelHeader ( $ "{ sri . Value } ") } ;
450+ /*var sriLayout = new Layout("Info");
451+
452+ sriLayout.SplitColumns(
453+ new Layout("Metadata"),
454+ new Layout("Image")
455+ );
456+
457+
458+ var grid = sri.GetInfoGrid();
459+ sriLayout["Metadata"].Update(grid);
460+ sriLayout["Image"].Update(ci);*/
430461
431462 AnsiConsole . Live ( pnl ) . Start ( ldc =>
432463 {
@@ -516,8 +547,10 @@ private void OnCancelKeyPress(object sender, ConsoleCancelEventArgs args)
516547
517548 // AnsiConsole.Clear();
518549
519- // m_cts.Cancel();
520550 m_ctsRun . Cancel ( ) ;
551+ m_cts . Cancel ( ) ;
552+ m_cts . TryReset ( ) ;
553+ m_ctsRun . TryReset ( ) ;
521554
522555 args . Cancel = true ;
523556
0 commit comments