|
26 | 26 | using Attribute = Terminal.Gui.Attribute; |
27 | 27 | using Clipboard = Novus.Win32.Clipboard; |
28 | 28 | using Window = Terminal.Gui.Window; |
| 29 | +using Kantan.Monad; |
29 | 30 |
|
30 | 31 | // ReSharper disable IdentifierTypo |
31 | 32 |
|
@@ -237,6 +238,16 @@ static ShellMode() { } |
237 | 238 |
|
238 | 239 | }; |
239 | 240 |
|
| 241 | + private static readonly Button Btn_Filter = new("Filter") |
| 242 | + { |
| 243 | + X = Pos.Right(Btn_Queue), |
| 244 | + Y = Pos.Y(Btn_Queue), |
| 245 | + |
| 246 | + Height = Dim.Height(Btn_Run), |
| 247 | + ColorScheme = UI.Cs_Btn1 |
| 248 | + |
| 249 | + }; |
| 250 | + |
240 | 251 | private static readonly Button Btn_Delete = new("Delete") |
241 | 252 | { |
242 | 253 | X = Pos.X(Btn_Cancel), |
@@ -304,15 +315,15 @@ public bool UseClipboard |
304 | 315 | } |
305 | 316 | else { |
306 | 317 | m_cbCallbackTok = Application.MainLoop.RemoveTimeout(m_cbCallbackTok); |
307 | | - m_clipboard?.Clear(); |
| 318 | + m_clipboard.Clear(); |
308 | 319 | } |
309 | 320 |
|
310 | 321 | } |
311 | 322 | } |
312 | 323 |
|
313 | 324 | public bool QueueMode { get; private set; } |
314 | 325 |
|
315 | | - public readonly ConcurrentQueue<string> Queue; |
| 326 | + internal readonly ConcurrentQueue<string> Queue; |
316 | 327 |
|
317 | 328 | public SearchQuery Query { get; internal set; } |
318 | 329 |
|
@@ -505,10 +516,12 @@ public ShellMode(string[] args) |
505 | 516 | Cb_Queue.Checked = QueueMode; |
506 | 517 | Btn_Next.Enabled = QueueMode; |
507 | 518 |
|
| 519 | + Btn_Filter.Clicked += Filter_Clicked; |
| 520 | + |
508 | 521 | Win.Add(Lbl_Input, Tf_Input, Btn_Run, Lbl_InputOk, |
509 | 522 | Btn_Clear, Tv_Results, Pbr_Status, Lbl_InputInfo, Lbl_QueryUpload, |
510 | 523 | Btn_Restart, Btn_Config, Lbl_InputInfo2, Btn_Cancel, Lbl_Status, Btn_Browse, |
511 | | - Lbl_Status2, Btn_Delete, Btn_Queue, Cb_Queue, Btn_Next |
| 524 | + Lbl_Status2, Btn_Delete, Btn_Queue, Cb_Queue, Btn_Next, Btn_Filter |
512 | 525 | ); |
513 | 526 |
|
514 | 527 | Top.Add(Win); |
@@ -573,52 +586,67 @@ private void OnResult(object o, SearchResult result) |
573 | 586 |
|
574 | 587 | Application.MainLoop.Invoke(() => |
575 | 588 | { |
576 | | - int st = Dt_Results.Rows.Count; |
| 589 | + AddResultToTable(result); |
| 590 | + }); |
577 | 591 |
|
578 | | - IndexColors[st] = GetColor(result.Engine); |
| 592 | + } |
579 | 593 |
|
580 | | - Dt_Results.Rows.Add($"{result.Engine.Name} (Raw)", string.Empty, |
581 | | - result.RawUrl, 0, null, null, $"{result.Status}", |
582 | | - null, null, null, null, null, null); |
583 | | - // Message[result.RawUrl] = "?"; |
| 594 | + private void AddResultToTable(SearchResult result) |
| 595 | + { |
| 596 | + int st = Dt_Results.Rows.Count; |
584 | 597 |
|
585 | | - for (int i = 0; i < result.Results.Count; i++) { |
586 | | - SearchResultItem sri = result.Results[i]; |
| 598 | + var cs = GetColor(result.Engine); |
587 | 599 |
|
588 | | - object? meta = sri.Metadata switch |
589 | | - { |
590 | | - string[] rg => rg.QuickJoin(), |
591 | | - Array rg => rg.QuickJoin(), |
592 | | - ICollection c => c.QuickJoin(), |
593 | | - string s => s, |
594 | | - ExpandoObject eo => eo.QuickJoin(), |
595 | | - _ => null, |
| 600 | + IndexColors[st] = cs; |
596 | 601 |
|
597 | | - }; |
| 602 | + Dt_Results.Rows.Add($"{result.Engine.Name} (Raw)", string.Empty, |
| 603 | + result.RawUrl, 0, null, null, $"{result.Status}", |
| 604 | + null, null, null, null, null, null); |
| 605 | + // Message[result.RawUrl] = "?"; |
| 606 | + // var rawSri = new SearchResultItem(result) { Url = result.RawUrl, Similarity = null }; |
598 | 607 |
|
599 | | - // object? meta = sri.Metadata; |
| 608 | + for (int i = 0; i < result.Results.Count; i++) { |
| 609 | + SearchResultItem sri = result.Results[i]; |
| 610 | + add(sri, i); |
600 | 611 |
|
601 | | - if (sri.Similarity is { } and 0) { |
602 | | - sri.Similarity = null; |
603 | | - } |
| 612 | + } |
604 | 613 |
|
605 | | - st = Dt_Results.Rows.Count; |
| 614 | + // Interlocked.Increment(ref ResultCount); |
| 615 | + Pbr_Status.Fraction = (float) m_results.Count / (Client.Engines.Length); |
606 | 616 |
|
607 | | - IndexColors[st] = GetColor(result.Engine); |
| 617 | + // Pbr_Status.Fraction = (float) ++ResultCount / (Client.Engines.Length); |
| 618 | + Tv_Results.SetNeedsDisplay(); |
| 619 | + Pbr_Status.SetNeedsDisplay(); |
608 | 620 |
|
609 | | - Dt_Results.Rows.Add($"{result.Engine.Name} #{i + 1}", "", |
610 | | - sri.Url, sri.Score, sri.Similarity, sri.Artist, sri.Description, sri.Source, |
611 | | - sri.Title, sri.Site, sri.Width, sri.Height, meta); |
612 | | - } |
| 621 | + } |
613 | 622 |
|
614 | | - // Interlocked.Increment(ref ResultCount); |
615 | | - Pbr_Status.Fraction = (float) m_results.Count / (Client.Engines.Length); |
| 623 | + void add(SearchResultItem sri, int i) |
| 624 | + { |
| 625 | + object? meta = sri.Metadata switch |
| 626 | + { |
| 627 | + string[] rg => rg.QuickJoin(), |
| 628 | + Array rg => rg.QuickJoin(), |
| 629 | + ICollection c => c.QuickJoin(), |
| 630 | + string s => s, |
| 631 | + ExpandoObject eo => eo.QuickJoin(), |
| 632 | + _ => null, |
616 | 633 |
|
617 | | - // Pbr_Status.Fraction = (float) ++ResultCount / (Client.Engines.Length); |
618 | | - Tv_Results.SetNeedsDisplay(); |
619 | | - Pbr_Status.SetNeedsDisplay(); |
620 | | - }); |
| 634 | + }; |
| 635 | + |
| 636 | + // object? meta = sri.Metadata; |
| 637 | + |
| 638 | + if (sri.Similarity is { } and 0) { |
| 639 | + sri.Similarity = null; |
| 640 | + } |
| 641 | + |
| 642 | + var cs = GetColor(sri.Root.Engine); |
| 643 | + var st = Dt_Results.Rows.Count; |
| 644 | + |
| 645 | + IndexColors[st] = cs; |
621 | 646 |
|
| 647 | + Dt_Results.Rows.Add($"{sri.Root.Engine.Name} #{i + 1}", "", |
| 648 | + sri.Url, sri.Score, sri.Similarity, sri.Artist, sri.Description, sri.Source, |
| 649 | + sri.Title, sri.Site, sri.Width, sri.Height, meta); |
622 | 650 | } |
623 | 651 |
|
624 | 652 | private void OnComplete(object sender, SearchResult[] results) |
@@ -694,7 +722,7 @@ private void ProcessArgs() |
694 | 722 |
|
695 | 723 | else if (s == R2.Arg_Queue) { |
696 | 724 | while (e.MoveNext()) { |
697 | | - Queue.Enqueue(e.Current?.ToString()); |
| 725 | + Queue.Enqueue(e.Current.ToString()); |
698 | 726 | } |
699 | 727 |
|
700 | 728 | QueueMode = true; |
|
0 commit comments