Skip to content

Commit f0f3955

Browse files
committed
Update readme; update examples; change auto result algorithm
1 parent de57f00 commit f0f3955

File tree

7 files changed

+90
-57
lines changed

7 files changed

+90
-57
lines changed

Examples/Rdx help.png

42 KB
Loading

README.md

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
<p align="center"><b>SmartImage</b> features context menu integration, which allows you to right click on an image to immediately run a search!</p>
4747
</p>
4848

49+
<p align="center"><b>SmartImage</b> has two forms: GUI (Windows) and Rdx (cross-platform).</p>
50+
4951
</p>
5052

5153
<!-- ... -->
@@ -71,11 +73,11 @@ Supported search engines:
7173

7274
<!-- ... -->
7375

74-
## Getting Started 1️⃣
76+
## Getting Started (GUI) 1️⃣
7577

7678
**SmartImage** is designed to be intuitive and agile. There are multiple ways of running the program, and you can use 2 different forms of input: direct image links or files.
7779

78-
See [Usage »](https://github.com/Decimation/SmartImage/wiki#usage)
80+
See [Usage »](https://github.com/Decimation/SmartImage/wiki/(GUI)-Usage)
7981

8082
### 1. Input Field
8183

@@ -111,9 +113,4 @@ applications.
111113

112114
## Wiki 📕
113115

114-
**See the _[Wiki »](https://github.com/Decimation/SmartImage/wiki)_ for documentation.**
115-
116-
Wiki pages useful for getting started:
117-
118-
- Usage: _[Usage »](https://github.com/Decimation/SmartImage/wiki/Usage)_
119-
- Search engines and config: _[Engines »](https://github.com/Decimation/SmartImage/wiki/Engines)_
116+
**See the _[Wiki »](https://github.com/Decimation/SmartImage/wiki)_ for documentation.**

SmartImage.Lib 3/SearchClient.cs

Lines changed: 53 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,14 @@ public static void Init()
8686

8787
public delegate void SearchCompleteCallback(object sender, SearchResult[] e);
8888

89+
public delegate void ResultOpenCallback(object sender, SearchResultItem e);
90+
8991
public event ResultCompleteCallback OnResult;
9092

9193
public event SearchCompleteCallback OnComplete;
9294

95+
public event ResultOpenCallback OnOpen;
96+
9397
public Channel<SearchResult> ResultChannel { get; private set; }
9498

9599
public void OpenChannel()
@@ -145,14 +149,15 @@ public async Task<SearchResult[]> RunSearchAsync(SearchQuery query, bool reload
145149

146150
Debugger.Break();
147151
Logger.LogWarning("Cancellation requested");
148-
ResultChannel.Writer.Complete();
152+
ResultChannel?.Writer.Complete();
149153
IsComplete = true;
150154
IsRunning = false;
151155
return results;
152156
}
153157

154158
Task<SearchResult> task = await Task.WhenAny(tasks);
155159
tasks.Remove(task);
160+
156161
// Debug.WriteLine($"{task.Id} {task.Status}");
157162
SearchResult result = await task;
158163

@@ -164,7 +169,7 @@ public async Task<SearchResult[]> RunSearchAsync(SearchQuery query, bool reload
164169
// results.Add(result);
165170
}
166171

167-
ResultChannel.Writer.Complete();
172+
ResultChannel?.Writer.Complete();
168173
OnComplete?.Invoke(this, results);
169174
IsRunning = false;
170175
IsComplete = true;
@@ -174,7 +179,31 @@ public async Task<SearchResult[]> RunSearchAsync(SearchQuery query, bool reload
174179
// var sri = results.SelectMany(r => r.Results).ToArray();
175180
// var result = Optimize(sri).FirstOrDefault() ?? sri.FirstOrDefault();
176181
//todo
182+
177183
try {
184+
185+
var ordered = results.Select(x => x.GetBestResult())
186+
.Where(x => x != null)
187+
.OrderByDescending(x => x.Similarity);
188+
189+
var item = ordered.First();
190+
191+
if (Config.OpenRaw) {
192+
OpenResult(item.Root.AsRawResultItem());
193+
}
194+
195+
OpenResult(item);
196+
}
197+
catch (Exception e) {
198+
Debug.WriteLine($"{e.Message}");
199+
200+
SearchResult result = results.FirstOrDefault(f => f.Status.IsSuccessful()) ?? results.First();
201+
var item = result.GetBestResult();
202+
203+
OpenResult(item);
204+
}
205+
206+
/*try {
178207
IOrderedEnumerable<SearchResultItem> rr = results.SelectMany(rr => rr.Results)
179208
.OrderByDescending(rr => rr.Score);
180209
@@ -191,7 +220,7 @@ public async Task<SearchResult[]> RunSearchAsync(SearchQuery query, bool reload
191220
192221
SearchResult result = results.FirstOrDefault(f => f.Status.IsSuccessful()) ?? results.First();
193222
OpenResult(result);
194-
}
223+
}*/
195224
}
196225

197226
IsRunning = false;
@@ -202,24 +231,29 @@ public async Task<SearchResult[]> RunSearchAsync(SearchQuery query, bool reload
202231
private void ProcessResult(SearchResult result)
203232
{
204233
OnResult?.Invoke(this, result);
205-
ResultChannel.Writer.TryWrite(result);
234+
235+
if (!ResultChannel.Writer.TryWrite(result)) {
236+
Debug.WriteLine($"Could not write {result}");
237+
}
206238

207239
if (Config.PriorityEngines.HasFlag(result.Engine.EngineOption)) {
208-
OpenResult(result);
240+
OpenResult(result.GetBestResult());
209241
}
210242
}
211243

212244
private static void OpenResult(Url url1)
213245
{
214-
#if DEBUG && !TEST
246+
// #if DEBUG && !TEST
247+
/*
215248
#pragma warning disable CA1822
216249
217250
// ReSharper disable once MemberCanBeMadeStatic.Local
218251
Logger.LogDebug("Not opening {url}", url1);
219252
return;
220253
221254
#pragma warning restore CA1822
222-
#else
255+
*/
256+
// #else
223257
Logger.LogInformation("Opening {Url}", url1);
224258

225259
var b = FileSystem.Open(url1, out var proc);
@@ -237,38 +271,32 @@ private static void OpenResult(Url url1)
237271

238272
// Process.Start(url1);
239273
// HttpUtilities.TryOpenUrl(url1);
240-
#endif
274+
// #endif
241275

242276
}
243277

244-
private void OpenResult(SearchResult result)
278+
private void OpenResult(SearchResultItem result)
245279
{
246-
#if DEBUG && !TEST
247-
#pragma warning disable CA1822
280+
// #if DEBUG && !TEST
281+
/*#pragma warning disable CA1822
248282
249283
// ReSharper disable once MemberCanBeMadeStatic.Local
250284
Logger.LogDebug("Not opening result {result}", result);
251285
return;
252286
253-
#pragma warning restore CA1822
254-
#else
255-
Url url1;
256-
257-
if (Config.OpenRaw) {
258-
url1 = result.RawUrl;
259-
}
260-
else {
261-
url1 = result.GetBestResult()?.Url ?? result.RawUrl;
262-
}
287+
#pragma warning restore CA1822*/
288+
// #else
289+
290+
OnOpen?.Invoke(this, result);
263291

264-
OpenResult(url1);
265-
#endif
292+
OpenResult(result.Url);
293+
// #endif
266294

267295
}
268296

269297
public List<Task<SearchResult>> GetSearchTasks(SearchQuery query, TaskScheduler scheduler, CancellationToken token)
270298
{
271-
299+
272300
List<Task<SearchResult>> tasks = Engines.Select(e =>
273301
{
274302
try {
@@ -290,6 +318,7 @@ public List<Task<SearchResult>> GetSearchTasks(SearchQuery query, TaskScheduler
290318
catch (Exception exception) {
291319
Debugger.Break();
292320
Trace.WriteLine($"{exception}");
321+
293322
// return Task.FromException(exception);
294323
}
295324

SmartImage.Lib 3/Utilities/HttpLoggingHandler.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,22 @@ namespace SmartImage.Lib.Utilities;
88

99
internal class HttpLoggingHandler : DelegatingHandler
1010
{
11+
1112
public HttpLoggingHandler(ILogger l)
1213
{
1314
m_logger = l;
1415
}
1516

16-
public HttpLoggingHandler([NotNull] HttpMessageHandler innerHandler) : base(innerHandler)
17-
{
18-
}
17+
public HttpLoggingHandler([NotNull] HttpMessageHandler innerHandler) : base(innerHandler) { }
1918

2019
private readonly ILogger m_logger;
2120

2221
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
23-
CancellationToken cancellationToken)
22+
CancellationToken cancellationToken)
2423
{
2524
m_logger.LogDebug("Request {Request}", request.RequestUri);
2625

2726
return base.SendAsync(request, cancellationToken);
2827
}
29-
}
28+
29+
}

SmartImage.Rdx/Program.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ public static async Task<int> Main(string[] args)
4040
Debug.WriteLine(Console.BufferHeight);
4141

4242
#if DEBUG
43-
4443
Debugger.Launch();
4544
#endif
4645

SmartImage.Rdx/SearchCommand.cs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,17 @@ public SearchCommand()
7373
// Client.OnComplete += OnComplete;
7474

7575
// Client.OnResult += OnResult;
76-
m_cts = new CancellationTokenSource();
77-
m_results = new ConcurrentBag<SearchResult>();
78-
m_scs = null;
79-
m_table = CreateResultTable();
80-
Query = SearchQuery.Null;
76+
m_cts = new CancellationTokenSource();
77+
m_results = new ConcurrentBag<SearchResult>();
78+
m_scs = null;
79+
m_table = CreateResultTable();
80+
81+
Client.OnOpen += (sender, item) =>
82+
{
83+
Debug.WriteLine($"Opening {item}");
84+
};
85+
86+
Query = SearchQuery.Null;
8187
}
8288

8389
#region
@@ -89,6 +95,10 @@ private async Task SetupSearchAsync(ProgressContext ctx)
8995

9096
Query = await SearchQuery.TryCreateAsync(m_scs.Query);
9197

98+
if (Query == SearchQuery.Null) {
99+
throw new SmartImageException($"Could not create query"); //todo
100+
101+
}
92102
p.Increment(COMPLETE / 2);
93103

94104
// ctx.Refresh();
@@ -97,7 +107,7 @@ private async Task SetupSearchAsync(ProgressContext ctx)
97107
var url = await Query.UploadAsync();
98108

99109
if (url == null) {
100-
throw new SmartImageException(); //todo
110+
throw new SmartImageException("Could not upload query"); //todo
101111
}
102112

103113
p.Increment(COMPLETE / 2);
@@ -158,7 +168,7 @@ private async Task RunSearchWithProgressAsync(ProgressContext c)
158168

159169
m_results.Add(result);
160170

161-
pt.Description = $"{result.Engine.Name} {m_results.Count} / {cnt}";
171+
pt.Description = $"{Strings.Constants.CHECK_MARK} {result.Engine.Name} - {result.Results.Count} ({m_results.Count} / {cnt})";
162172
pt.Increment(1);
163173
c.Refresh();
164174

@@ -176,7 +186,13 @@ public override async Task<int> ExecuteAsync(CommandContext context, SearchComma
176186
.StartAsync(SetupSearchAsync)
177187
.ContinueWith(InitConfigAsync);
178188

179-
await task;
189+
try {
190+
await task;
191+
}
192+
catch (Exception e) {
193+
AConsole.WriteException(e);
194+
return EC_ERROR;
195+
}
180196

181197
var gr = CreateInfoGrid();
182198
AConsole.Write(gr);
@@ -302,14 +318,6 @@ private async Task RunCompletionCommandAsync([CBN] object o)
302318
var stdOutBuffer = new StringBuilder();
303319
var stdErrBuffer = new StringBuilder();
304320

305-
/*var buf1 = new StringBuilder();
306-
307-
foreach (ResultModel model in m_results) {
308-
foreach (SearchResultItem item in model.Result.Results) {
309-
buf1.AppendLine(item.Url);
310-
}
311-
}*/
312-
313321
if (!String.IsNullOrWhiteSpace(cmdArgs)) {
314322

315323
// cmdArgs = cmdArgs.Replace(SearchCommandSettings.PROP_ARG_RESULTS, buf1.ToString());
@@ -323,11 +331,11 @@ private async Task RunCompletionCommandAsync([CBN] object o)
323331

324332
var commandTask = command.ExecuteAsync(m_cts.Token);
325333

326-
AConsole.WriteLine($"Process: {commandTask.ProcessId}");
334+
AConsole.WriteLine($"Process id: {commandTask.ProcessId}");
327335

328336
var result = await commandTask;
329337

330-
AConsole.WriteLine($"Process: {result.IsSuccess}");
338+
AConsole.WriteLine($"Process successful: {result.IsSuccess}");
331339
}
332340

333341
[ContractAnnotation("=> halt")]

SmartImage.Rdx/SmartImage.Rdx.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</PropertyGroup>
1717
<PropertyGroup>
1818
<SatelliteResourceLanguages>en-US;en</SatelliteResourceLanguages>
19-
<Version>1.0.4</Version>
19+
<Version>1.0.5</Version>
2020
</PropertyGroup>
2121
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
2222
<DefineConstants>DEBUG;TRACE;JETBRAINS_ANNOTATIONS</DefineConstants>

0 commit comments

Comments
 (0)