Skip to content

Commit 930fdf1

Browse files
committed
adjust indexing; preview changes
1 parent e07400c commit 930fdf1

8 files changed

Lines changed: 41 additions & 147 deletions

File tree

SmartImage.Lib/Engines/Results/SearchResultItem.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,11 @@ public async ValueTask<bool> ScanAsync(CancellationToken ct = default)
319319

320320
var cw = Channel.CreateUnbounded<SearchResultItem>();
321321

322-
var task = ScanAsync(cw.Writer, s => { return CloneWithUrl(s); }, ct);
322+
var task = ScanAsync(cw.Writer, s =>
323+
{
324+
var obj= CloneWithUrl(s);
325+
return obj;
326+
}, ct);
323327

324328
while (await cw.Reader.WaitToReadAsync(ct)) {
325329
var val = await cw.Reader.ReadAsync(ct);

SmartImage.Lib/Images/SizeTN.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Author: Deci | Project: SmartImage.Lib | Name: SizeTN.cs
33
// Date: 2025/08/21 @ 00:08:17
44

5-
#region Aliasses
5+
#region Aliases
66

77
global using SizeS2N = SmartImage.Lib.Images.SizeTN<short>;
88
global using SizeS4N = SmartImage.Lib.Images.SizeTN<int>;

SmartImage.Lib/Images/Uni/UniImage.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,6 @@ public virtual async ValueTask<bool> AllocImageAsync(CancellationToken ct = defa
199199
Image = await ISImage.LoadAsync(stream, ct);
200200
stream.Rewind();
201201
Hash = ImageUtilities.Hasher.Hash(stream);
202-
CalculateSimilarity(this);
203-
204202
}
205203
catch (Exception exception) {
206204
s_logger.LogError(exception, "{Value} failed to allocate image", Value);

SmartImage.Lib/Images/Uni/UniImageUrl.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ public async ValueTask<bool> ScanAsync<TUni>(ChannelWriter<TUni> cw, Func<string
5656
await Parallel.ForEachAsync(urls, ct, async (s, token) =>
5757
{
5858
var item = newItem(s);
59-
6059
var allocImgOk = await item.AllocImageAsync(token);
6160

6261
if (allocImgOk) {

SmartImage.Rdx/Commands/Search/SearchCommand.UI.cs

Lines changed: 0 additions & 46 deletions
This file was deleted.

SmartImage.Rdx/Commands/Search/SearchCommand.cs

Lines changed: 24 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
using System.Diagnostics;
2525
using System.Runtime.Caching;
2626
using System.Runtime.CompilerServices;
27+
using Kantan.Text;
2728
using Microsoft.Extensions.Logging;
2829
using SixLabors.ImageSharp.Processing;
2930
using SmartImage.Lib;
@@ -283,15 +284,13 @@ private async Task RunInteractiveAsync(CancellationToken ct = default)
283284
break;
284285
}
285286

286-
var sel = ShellSelection.GetSelectionChoice(sr);
287-
var sri = sel.Item;
288-
var selIdx = sel.Index();
287+
var sel = ShellSelection.GetSelectionChoice(sr);
288+
var sri = sel.Item;
289+
var selIdx = sel.Index();
289290
var selIdx2 = sel.Index2();
290291

291292
s_logger.LogDebug("Selected {Item} {Scn} | {Idx1}, {Idx2}", sel.Item, sel.IsScannedItem, selIdx, selIdx2);
292293

293-
// s_logger.LogTrace("Interactive: {ResItem}", sri);
294-
295294
if (cmd == R2.Chc_Open) {
296295
SearchClient.OpenResult(sri.Url);
297296
clrWrite = false;
@@ -305,45 +304,18 @@ await AnsiConsole.Live(srTable).StartAsync(async (f) =>
305304
bool scannedOk = false;
306305
scannedOk = await sri.ScanAsync(m_ctsRun.Token);
307306

308-
309307
if (!scannedOk) {
310308
return;
311309
}
312310

313-
/*if (!tbl.TryGetValue(sel.Item, out var idx)) {
314-
for (int j = 0; j < sel.Item.ScannedItems.Count; j++) {
315-
tbl[sel.Item.ScannedItems[j]] = j;
316-
}
317-
}*/
318-
319-
// var idx = tbl[sel.Item.Parent];
320-
321-
322311
for (int i = 0; i < sri.ScannedItems.Count; i++) {
323312
SearchResultItem scnItm = sri.ScannedItems[i];
324-
var scnRow = scnItm.GetItemRow(sel.ItemIdx, i);
325-
srTable.InsertRow(selIdx2 + i + 1, scnRow);
326-
}
327-
328-
329-
// row = idx;
330-
// row = GetRowForItem(sri);
331-
// row = sr.Index(sel.Item, sel.Scanned);
332-
333-
// row = sr.Index(sri);
334-
335-
// var row2 = sriPak;
336-
// row = row2.RootIdx + (row2.ScnIdx == -1 ? 0 : (row2.ScnIdx + 1));
337-
338-
if (sri.HasImage) {
339-
srTable.Rows.Update(selIdx2, (int) ResultRowIndex.ROW_WH, sri.GetResolution());
313+
scnItm.CalculateSimilarity(Query.Source);
340314

315+
var scnRow = scnItm.GetItemRow(sel.ItemIdx, i);
316+
srTable.InsertRow(selIdx + i + 1, scnRow);
341317
}
342318

343-
if (sri.HasHash && !sri.Similarity.HasValue) {
344-
sri.CalculateSimilarity(Query.Source);
345-
srTable.Rows.Update(selIdx2, (int) ResultRowIndex.ROW_SIMILARITY, sri.GetSimilarity());
346-
}
347319

348320
f.Refresh();
349321

@@ -364,7 +336,7 @@ await AnsiConsole.Live(srTable).StartAsync(async (f) =>
364336
});
365337

366338

367-
clrWrite = false;
339+
clrWrite = true;
368340
continue;
369341
}
370342

@@ -375,7 +347,7 @@ await AnsiConsole.Live(srTable).StartAsync(async (f) =>
375347

376348
var ci = GetPreview(sri);
377349

378-
ShowPreview(ci, sri);
350+
AnsiConsole.AlternateScreen(() => { ShowPreview(ci, sri); });
379351
clrWrite = true;
380352
}
381353

@@ -385,20 +357,9 @@ await AnsiConsole.Live(srTable).StartAsync(async (f) =>
385357

386358
}
387359

388-
if (cmd == "expand") {
389-
var si = sri.ScannedItems;
390-
var scnTbl = new ConcurrentDictionary<SearchResultItem, SpcTable>();
391-
392-
var table = Elements.CreateFullResultTable();
393-
scnTbl[sri] = table;
394-
395-
for (int i = 0; i < si.Count; i++) {
396-
SearchResultItem scnI = si[i];
397-
var row = scnI.GetFullResultRow(i, new Style(link: scnI.Url));
398-
scnTbl[sri].AddRow(row);
399-
}
400-
}
360+
if (cmd == "expand") { }
401361

362+
if (cmd == "retry") { }
402363

403364
} while (cmd != R2.Chc_Back);
404365

@@ -453,7 +414,7 @@ private CanvasImage GetPreview(SearchResultItem sri)
453414

454415
if (ci is null) {
455416
str = sri.GetStream();
456-
ci = new CanvasImage(str);
417+
ci = new CanvasImage(str) { };
457418

458419

459420
m_previewCanvasCache.Set(key, ci, cip);
@@ -462,32 +423,19 @@ private CanvasImage GetPreview(SearchResultItem sri)
462423

463424
Trace.Assert(ci != null);
464425

465-
// var ci = new CanvasImage(str);
466-
467426
return ci;
468427
}
469428

470429
private void ShowPreview(CanvasImage ci, SearchResultItem ui)
471430
{
472-
// AnsiConsole.Clear();
473-
474-
// (AnsiConsole.Profile.Width, AC.Profile.Height) = (ui.Image.Width, ui.Image.Height);
475-
// ci.MaxWidth = AnsiConsole.Profile.Width;
476-
477-
// Console.SetWindowSize(ui.Image.Width, ui.Image.Height);
478-
// ci.MaxWidth ??= ci.Width;
479-
// ci.MaxWidth ??= ui.Image.Width;
431+
var (w, h) = (AnsiConsole.Profile.Width, AC.Profile.Height);
480432

481-
// var panel = new Panel(ci) { Expand = true, };
433+
var pnl = new Panel(ci) { Expand = true, Border = BoxBorder.None };
482434

483-
var (w, h) = (AnsiConsole.Profile.Width, AC.Profile.Height);
484-
var (mwO, pwO) = (ci.MaxWidth, ci.PixelWidth);
485-
var (mw, pw) = (mwO ?? ci.Width, pwO);
486-
487-
AnsiConsole.Live(ci).Start(ldc =>
435+
AnsiConsole.Live(pnl).Start(ldc =>
488436
{
489437
while (true) {
490-
438+
// ci.MaxWidth = mw < 0 ? null : mw;
491439
ldc.Refresh();
492440
var cki = AnsiConsole.Console.Input.ReadKey(true);
493441

@@ -496,50 +444,32 @@ private void ShowPreview(CanvasImage ci, SearchResultItem ui)
496444
}
497445

498446
switch (cki.Value.Key) {
499-
case ConsoleKey.DownArrow:
500-
pw--;
501-
break;
502447

503-
case ConsoleKey.LeftArrow:
504-
mw--;
505-
break;
506448

507-
case ConsoleKey.UpArrow:
508-
pw++;
449+
case ConsoleKey.S:
450+
ci.Mutate(act => { act.Resize(ui.Image.Width, ui.Image.Height); });
509451
break;
510452

511-
case ConsoleKey.RightArrow:
512-
mw++;
453+
case ConsoleKey.M:
454+
ci.MaxWidth = w;
513455
break;
514456

515-
case ConsoleKey.Escape:
516-
return;
517-
518457
case ConsoleKey.R:
519458
ci.Mutate(act =>
520459
{
521460
var cs = act.GetCurrentSize();
522461

523-
act.Resize(cs.ResizeByFactor(new Size(w, h)));
462+
var cs2 = cs.ResizeByFactor(new Size(w, h));
463+
act.Resize(cs2);
524464
});
525-
pw = 1;
526465

527-
// mw = 0;
528466
ci.MaxWidth = null;
529467
continue;
530468

531-
case ConsoleKey.A:
532-
ci.MaxWidth = mwO;
533-
pw = 0;
534-
break;
469+
case ConsoleKey.Escape:
470+
return;
535471

536-
case ConsoleKey.C:
537-
AnsiConsole.Clear();
538-
break;
539472
}
540-
541-
ci.MaxWidth = mw < 0 ? null : mw;
542-
ci.PixelWidth = Math.Clamp(pw, 0, 10);
543473
}
544474
});
545475

SmartImage.Rdx/Shell/Elements.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
using System.Data;
1+
#region Aliases
2+
3+
global using SizeIS = SixLabors.ImageSharp.Size;
4+
5+
#endregion
6+
7+
using System.Data;
28
using System.Data.SqlTypes;
39
using Kantan.Text;
410
using Novus.OS;

SmartImage.Rdx/Shell/Renderables.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Date: 2025/12/27 @ 22:12:49
33

44
#nullable disable
5+
using Kantan.Text;
56
using SmartImage;
67
using SmartImage.Lib.Engines.Results;
78
using Spectre.Console;
@@ -36,10 +37,12 @@ public IEnumerable<IRenderable[]> GetFullResultRows()
3637

3738
}
3839

40+
public static IRenderable GetResolution(SizeIS sz) => new Text($"{sz.Width}{Strings.Constants.MUL_SIGN}{sz.Height}");
41+
3942
extension(SearchResultItem sri)
4043
{
4144

42-
public IRenderable GetResolution() => (sri.HasDimensions) ? new Text($"{sri.Width}x{sri.Height}") : Elements.Txt_NA;
45+
public IRenderable GetResolution() => (sri.HasDimensions) ? GetResolution(new SizeIS(sri.Width.Value, sri.Height.Value)) : Elements.Txt_NA;
4346

4447
public IRenderable GetSimilarity() => AsRenderable(sri.Similarity);
4548

0 commit comments

Comments
 (0)