Skip to content

Commit 9f2fc50

Browse files
committed
Work on cli
1 parent 3477ea5 commit 9f2fc50

File tree

1 file changed

+42
-80
lines changed

1 file changed

+42
-80
lines changed

SmartImage 3/Mode/CliMode.cs

Lines changed: 42 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@
66
using System.Diagnostics.CodeAnalysis;
77
using JetBrains.Annotations;
88
using SmartImage.Lib;
9-
using SmartImage.Lib.Engines;
109
using SmartImage.Lib.Results;
1110
using Spectre.Console;
1211
using Spectre.Console.Rendering;
13-
using AConsole=Spectre.Console.AnsiConsole;
12+
using AConsole = Spectre.Console.AnsiConsole;
13+
1414
// ReSharper disable InconsistentNaming
1515

1616
namespace SmartImage.Mode;
1717

1818
public 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

Comments
 (0)