Skip to content

Commit 90a3d25

Browse files
committed
Finishing touches to Rdx 1.2.0
1 parent 7060df2 commit 90a3d25

11 files changed

Lines changed: 190 additions & 77 deletions

File tree

SmartImage.Lib/Cookies/BrowserCookiesSource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class BrowserCookiesSource : ICookiesSource
3333

3434
}
3535

36-
return null;
36+
return ListCookiesSource.Default;
3737
});
3838

3939
internal BrowserCookiesSource(BaseCookiesDatabaseReader reader)

SmartImage.Lib/Engines/BaseSearchEngine.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using System.Runtime.CompilerServices;
66
using Flurl.Http;
7+
using Flurl.Http.Configuration;
78
using Kantan.Net.Utilities;
89
using Microsoft.Extensions.Logging;
910
using Microsoft.Net.Http.Headers;
@@ -46,11 +47,12 @@ public abstract class BaseSearchEngine : IDisposable, IEquatable<BaseSearchEngin
4647
[JI]
4748
protected virtual string[] ErrorBodyMessages { get; }
4849

49-
protected static FlurlClient Client { get; }
50+
protected static IFlurlClient Client {get;}
51+
5052

5153
static BaseSearchEngine()
5254
{
53-
Client = (FlurlClient) FlurlHttp.Clients.GetOrAdd(nameof(BaseSearchEngine), null, static builder =>
55+
Client = FlurlHttp.Clients.GetOrAdd(nameof(BaseSearchEngine), null, static builder =>
5456
{
5557
builder.Headers.AddOrReplace(HeaderNames.UserAgent, R1.UserAgent1);
5658

@@ -67,18 +69,18 @@ static BaseSearchEngine()
6769

6870
});
6971

70-
builder.AddMiddleware(static () => new HttpLoggingHandler(Logger));
72+
// builder.AddMiddleware(static () => new HttpLoggingHandler(Logger));
7173

7274
});
7375
}
7476

7577
protected BaseSearchEngine([NN] Url url)
7678
{
77-
Url = url;
79+
Url = url;
7880
Timeout = TimeSpan.FromSeconds(30);
7981
ErrorBodyMessages = [];
80-
MaxLength = null;
81-
82+
MaxLength = null;
83+
8284
}
8385

8486

SmartImage.Lib/Engines/Search/Ascii2DEngine.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public Ascii2DEngine() : base(MAIN_URL)
5252
MaxLength = 10_000_000;
5353
Jar = new CookieJar();
5454
m_fsClient = new FlareSolverrClient();
55+
5556
}
5657

5758

@@ -148,7 +149,7 @@ protected override async Task<IDocument> GetSourceAsync(SearchResult sr, SearchQ
148149

149150
try {
150151
var msg = new HttpRequestMessage(HttpMethod.Get, origin);
151-
152+
152153
var fsr = await m_fsClient.Clearance.Solverr.SolveAsync(msg).ConfigureAwait(false);
153154
var cookies = fsr.Solution.Cookies;
154155
var newUrl = fsr.Solution.Url;

SmartImage.Lib/Images/ImageScanner.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,7 @@ public static async ValueTask<IFlurlResponse> GetResponseAsync(Url value, Cancel
292292
request = new FlurlRequest(value) { };
293293
}
294294

295-
var response = await request
296-
.OnError(act => { act.ExceptionHandled = true; })
295+
var response = await request.OnError(act => { act.ExceptionHandled = true; })
297296
.GetAsync(cancellationToken: ct);
298297

299298
return response;

SmartImage.Lib/SearchClient.cs

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public SearchClient(SearchConfig cfg)
5959
Config = cfg;
6060
ConfigApplied = false;
6161
IsRunning = false;
62-
Engines = Config.GetSelectedEngines();
62+
Engines = SearchConfig.GetSelectedEngines(Config.SearchEngines);
6363
}
6464

6565
static SearchClient() { }
@@ -132,6 +132,7 @@ public async Task<bool> RunSearchAsync(SearchQuery query, CancellationToken toke
132132
if (Config.PriorityEngines == SearchEngineOptions.Auto) {
133133
var best = GetBest(results);
134134
s_logger.LogInformation("Best: {Sr}", best);
135+
135136
if (best != null) {
136137
OpenResult(best.Url);
137138
}
@@ -143,24 +144,9 @@ public async Task<bool> RunSearchAsync(SearchQuery query, CancellationToken toke
143144
/// <inheritdoc />
144145
public async ValueTask<bool> ApplyConfigAsync(SearchConfig cfg, CancellationToken ct = default)
145146
{
146-
Config = cfg;
147-
Engines = Config.GetSelectedEngines();
148-
147+
Config = cfg;
149148
s_logger.LogTrace("Loading engines");
150-
151-
foreach (var engine in Engines) {
152-
153-
if (engine is ISearchConfigReceiver rcvr) {
154-
s_logger.LogTrace("Applying config to {Engine}", engine.Name);
155-
await rcvr.ApplyConfigAsync(Config, ct);
156-
157-
}
158-
159-
if (engine is ICookiesReceiver ck) {
160-
s_logger.LogTrace("Applying cookies to {Engine}", engine.Name);
161-
await ck.ApplyCookiesAsync(Config.GetCookiesSource(), ct);
162-
}
163-
}
149+
await Config.LoadEngines(Engines, ct);
164150

165151
s_logger.LogDebug("Loaded engines");
166152

SmartImage.Lib/SearchConfig.cs

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,25 @@ public string FlareSolverrApiUrl
209209
set => Set(value);
210210
}
211211

212-
213212
#endregion
214213

215-
public IEnumerable<BaseSearchEngine> GetSelectedEngines() => GetSelectedEngines(SearchEngines);
214+
215+
216+
public async ValueTask LoadEngines(IEnumerable<BaseSearchEngine> engines2, CancellationToken ct)
217+
{
218+
foreach (BaseSearchEngine engine in engines2) {
219+
if (engine is ISearchConfigReceiver rcvr) {
220+
s_logger.LogTrace("Applying config to {Engine}", engine.Name);
221+
await rcvr.ApplyConfigAsync(this, ct);
222+
223+
}
224+
225+
if (engine is ICookiesReceiver ck) {
226+
s_logger.LogTrace("Applying cookies to {Engine}", engine.Name);
227+
await ck.ApplyCookiesAsync(GetCookiesSource(), ct);
228+
}
229+
}
230+
}
216231

217232
public static IEnumerable<BaseSearchEngine> GetSelectedEngines(SearchEngineOptions options)
218233
{
@@ -321,20 +336,14 @@ public string HydrusKey
321336
*/
322337

323338

324-
public SearchConfig()
325-
{
326-
PropertyChanged += static (sender, args) =>
327-
{
328-
//
329-
s_logger.LogTrace("{Sender} Changed {PropName}", sender, args.PropertyName);
330-
};
331-
}
339+
public SearchConfig() { }
332340

333341

334342
public event PropertyChangedEventHandler PropertyChanged;
335343

336344
private void OnPropertyChanged([CMN] string propertyName = null)
337345
{
346+
s_logger.LogTrace("Changed {PropName}", propertyName);
338347
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
339348
}
340349

@@ -343,4 +352,31 @@ public override string ToString()
343352
return $"{SearchEngines}\n{PriorityEngines}";
344353
}
345354

355+
356+
/*public static IConfigurationRoot GetConfig()
357+
{
358+
// TODO
359+
/*var bldr2 = new ConfigurationBuilder();
360+
var host = Host.CreateDefaultBuilder();
361+
var bldr = host.ConfigureServices((ctx, svc) => { svc.AddSingleton<SearchConfig>(); });
362+
363+
bldr2.SetBasePath(Directory.GetCurrentDirectory())
364+
.AddJsonFile("smartimage.json", optional: false, reloadOnChange: true);
365+
#1#
366+
367+
// TODO
368+
369+
var currentDirectory = BaseOSIntegration.ExecutableDirectory;
370+
var configFileName = $"{R1.Name}.json";
371+
372+
// var configFilePath = Path.Combine(currentDirectory, configFileName);
373+
374+
var cfg = new ConfigurationBuilder()
375+
.SetBasePath(currentDirectory)
376+
.AddJsonFile(configFileName, optional: false, reloadOnChange: true)
377+
.Build();
378+
379+
return cfg;
380+
}*/
381+
346382
}

SmartImage.Rdx/Commands/Search/SearchCommand.cs

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

SmartImage.Rdx/Commands/Search/SearchCommandSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public sealed class SearchCommandSettings : CommonCommandSettings
8585
// public const string PROP_ARG_RESULTS = "$all_results";
8686

8787
[CommandOption("--interactive")]
88-
[DefaultValue(false)]
88+
[DefaultValue(true)]
8989
[Description("Interactive results")]
9090
public bool Interactive { get; private set; }
9191

SmartImage.Rdx/Program.cs

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ public static async Task<int> Main(string[] args)
7878
c.AddCommand<IntegrationCommand>("integrate")
7979
.WithDescription("Configure system integration such as context menu");
8080

81-
c.AddCommand<ServerCommand>("server")
82-
.WithDescription("Start listen server (experimental)");
81+
/*c.AddCommand<ServerCommand>("server")
82+
.WithDescription("Start listen server (experimental)");*/
8383
});
8484

8585
int x = BaseOSIntegration.EC_OK;
@@ -168,6 +168,8 @@ private static void HandleArgs(ref string[] args)
168168
args = [sz];
169169
}*/
170170

171+
#if !DEBUG
172+
171173

172174
if (Console.IsInputRedirected) {
173175
Trace.WriteLine("Input redirected");
@@ -182,33 +184,7 @@ private static void HandleArgs(ref string[] args)
182184

183185
AnsiConsole.WriteLine($"Received input from stdin");
184186
}
187+
#endif
185188

186189
}
187-
188-
/*public static IConfigurationRoot GetConfig()
189-
{
190-
// TODO
191-
/*var bldr2 = new ConfigurationBuilder();
192-
var host = Host.CreateDefaultBuilder();
193-
var bldr = host.ConfigureServices((ctx, svc) => { svc.AddSingleton<SearchConfig>(); });
194-
195-
bldr2.SetBasePath(Directory.GetCurrentDirectory())
196-
.AddJsonFile("smartimage.json", optional: false, reloadOnChange: true);
197-
#1#
198-
199-
// TODO
200-
201-
var currentDirectory = BaseOSIntegration.ExecutableDirectory;
202-
var configFileName = $"{R1.Name}.json";
203-
204-
// var configFilePath = Path.Combine(currentDirectory, configFileName);
205-
206-
var cfg = new ConfigurationBuilder()
207-
.SetBasePath(currentDirectory)
208-
.AddJsonFile(configFileName, optional: false, reloadOnChange: true)
209-
.Build();
210-
211-
return cfg;
212-
}*/
213-
214190
}

0 commit comments

Comments
 (0)