Skip to content

Commit 400f64f

Browse files
committed
2.2.0
1 parent 2c8e902 commit 400f64f

File tree

14 files changed

+230
-99
lines changed

14 files changed

+230
-99
lines changed

SmartImage.Lib/DirectImage.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Drawing;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
using RestSharp;
9+
10+
namespace SmartImage.Lib
11+
{
12+
public class DirectImage : IDisposable
13+
{
14+
public Uri Url { get; internal set; }
15+
16+
public Stream Stream { get; internal set; }
17+
18+
public IRestResponse Response { get; internal set; }
19+
20+
public bool Equals(DirectImage other)
21+
{
22+
23+
return Url == other?.Url && Equals(Stream, other?.Stream)
24+
&& Equals(Response, other?.Response);
25+
}
26+
27+
public override bool Equals(object obj)
28+
{
29+
return obj is DirectImage other && Equals(other);
30+
}
31+
32+
public override int GetHashCode()
33+
{
34+
return HashCode.Combine(Stream, Response, Url);
35+
}
36+
37+
public static bool operator ==(DirectImage left, DirectImage right) => left.Equals(right);
38+
39+
public static bool operator !=(DirectImage left, DirectImage right) => !left.Equals(right);
40+
41+
public void Dispose()
42+
{
43+
// Stream?.Dispose();
44+
}
45+
46+
public override string ToString()
47+
{
48+
return $"{Url}";
49+
}
50+
}
51+
}

SmartImage.Lib/SearchClient.cs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -214,19 +214,17 @@ public async void FindDirectResults(SearchResult result)
214214
{
215215
Debug.WriteLine($"searching within {result.Engine.Name}");
216216

217-
for (int i = 0; i < result.AllResults.Count; i++) {
218-
var ir = result.AllResults[i];
219-
220-
var b = await ir.FindDirectImages();
217+
foreach (ImageResult ir in result.AllResults) {
218+
var b = await ir.TryScanForDirectImages();
221219

222220
if (b && !DirectResults.Contains(ir)) {
223-
ir.Direct = new Uri(UriUtilities.NormalizeUrl(ir.Direct));
221+
ir.Direct.Url = new Uri(UriUtilities.NormalizeUrl(ir.Direct.Url));
224222

225-
Debug.WriteLine($"{ir.Direct}");
223+
Debug.WriteLine($"{nameof(SearchClient)}: Found direct result {ir.Direct.Url}");
226224

227225
DirectResults.Add(ir);
228226

229-
result.PrimaryResult.Direct ??= ir.Direct;
227+
result.PrimaryResult.Direct.Url ??= ir.Direct.Url;
230228

231229
DirectFound?.Invoke(null, new DirectResultsFoundEventArgs
232230
{
@@ -240,13 +238,12 @@ public async void FindDirectResults(SearchResult result)
240238

241239
private void FindDirectResults(object state, SearchResult value, int take1 = 10, int take2 = 5)
242240
{
243-
244241
var imageResults = value.AllResults;
245242

246243
var images = imageResults.AsParallel()
247-
.Where(x => x.CheckDirect(DirectImageCriterion.Regex))
248-
.Take(take1)
249-
.Where(x => x.CheckDirect(DirectImageCriterion.Binary))
244+
/*.Where(x => x.CheckDirect(DirectImageCriterion.Regex))
245+
.Take(take1)*/
246+
.Where(x => x.IsAlreadyDirect(DirectImageCriterion.Binary))
250247
.Take(take2)
251248
.ToList();
252249

@@ -269,22 +266,27 @@ private void FindDirectResults(object state, SearchResult value, int take1 = 10,
269266
/// Waits until <see cref="DirectResults"/> contains any elements
270267
/// </summary>
271268
/// <returns><see cref="DirectResults"/></returns>
272-
public Task<List<ImageResult>> WaitForDirectResults()
269+
public Task<bool> WaitForDirectResults()
273270
{
274271
return Task.Run(() =>
275272
{
276273
while (Results.Any() && !DirectResults.Any()) {
277274
if (IsComplete) {
278-
var b = Results.SelectMany(x => x.AllResults.Where(x2 => x2.Direct != null))
275+
276+
/*var imageResults = Results.SelectMany(x =>
277+
{
278+
return x.AllResults.Where(x2 => x2.Direct != null);
279+
})
279280
.OrderByDescending(x => x.PixelResolution)
280281
.ToList();
281-
DirectResults.AddRange(b);
282+
283+
DirectResults.AddRange(imageResults);*/
282284

283285
break;
284286
}
285287
}
286288

287-
return DirectResults;
289+
return true;
288290
});
289291
}
290292

@@ -307,7 +309,7 @@ public async Task RefineSearchAsync()
307309
// return;
308310
}
309311

310-
var direct = directResult.Direct;
312+
var direct = directResult.Direct.Url;
311313

312314
Debug.WriteLine($"{nameof(SearchClient)}: Refining by {direct}", C_DEBUG);
313315

SmartImage.Lib/Searching/ImageQuery.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
using SmartImage.Lib.Upload;
1212
using SmartImage.Lib.Utilities;
1313
using static Kantan.Diagnostics.LogCategories;
14+
1415
#pragma warning disable CA1416
1516
namespace SmartImage.Lib.Searching;
1617

@@ -84,25 +85,31 @@ public ImageQuery([NotNull] string value, [CanBeNull] BaseUploadEngine engine =
8485

8586
public static (bool IsUri, bool IsFile) IsUriOrFile(string x)
8687
{
87-
return (ImageHelper.IsImage(x), File.Exists(x));
88+
var isUriOrFile = (ImageHelper.IsImage(x, out var di), File.Exists(x));
89+
90+
return isUriOrFile;
8891
}
8992

9093
public ImageResult GetImageResult()
9194
{
9295

9396
var result = new ImageResult
9497
{
95-
Url = UploadUri,
96-
Direct = UploadUri,
97-
Image = Image.FromStream(Stream)
98+
Url = UploadUri,
99+
Image = Image.FromStream(Stream),
100+
Direct =
101+
{
102+
Stream = Stream,
103+
Url = UploadUri
104+
}
98105
};
99106

100107
result.OtherMetadata.Add("Upload engine", UploadEngine.Name);
101108
result.OtherMetadata.Add("Input type", IsUri ? "URI" : "File");
102109
result.OtherMetadata.Add("Input value", Value);
103110
result.OtherMetadata.Add("Time", $"(upload: {UploadTime.TotalSeconds:F3})");
104111

105-
result.UpdateImageData();
112+
result.ReloadImageData();
106113

107114
return result;
108115
}

SmartImage.Lib/Searching/ImageResult.cs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ public sealed class ImageResult : IOutline
3737
[MaybeNull]
3838
public Uri Url { get; set; }
3939

40-
/// <summary>
41-
/// Direct image link of <see cref="Url"/>
42-
/// </summary>
43-
[CanBeNull]
44-
public Uri Direct { get; set; }
45-
4640
/// <summary>
4741
/// Similarity
4842
/// </summary>
@@ -196,7 +190,7 @@ private static List<FieldInfo> GetDetailFields()
196190
public void UpdateFrom(ImageResult result)
197191
{
198192
Url = result.Url;
199-
Direct = result.Direct;
193+
Direct.Url = result.Direct.Url;
200194
Similarity = result.Similarity;
201195
Width = result.Width;
202196
Height = result.Height;
@@ -207,25 +201,30 @@ public void UpdateFrom(ImageResult result)
207201
Description = result.Description;
208202
Date = result.Date;
209203

210-
UpdateImageData();
204+
ReloadImageData();
211205

212206
}
213207

214-
public async Task<bool> FindDirectImages()
208+
public DirectImage Direct { get; internal set; } = new();
209+
210+
public async Task<bool> TryScanForDirectImages()
215211
{
216-
if (Url == null || Direct != null) {
212+
if (Url == null || Direct.Url != null) {
217213
return true;
218214
}
219215

220216
try {
221217

222218
var directImages = await ImageHelper.ScanForImages(Url.ToString());
223219

220+
Debug.WriteLine($"{nameof(ImageResult)}: Found {directImages.Count} direct images");
221+
224222
var direct = directImages.FirstOrDefault();
225223

226224
if (direct != null) {
227-
Direct = new Uri((direct));
228-
UpdateImageData();
225+
Direct = direct;
226+
Direct.Url = ((Direct.Url));
227+
ReloadImageData();
229228
return true;
230229
}
231230
}
@@ -236,30 +235,31 @@ public async Task<bool> FindDirectImages()
236235
return false;
237236
}
238237

239-
public bool CheckDirect(DirectImageCriterion d)
238+
239+
public bool IsAlreadyDirect(DirectImageCriterion d)
240240
{
241241
if (Url is not { }) {
242242
return false;
243243
}
244244

245245
var s = Url.ToString();
246246

247-
var b = ImageHelper.IsImage(s, d);
247+
var b = ImageHelper.IsImage(s, out var di, d);
248248

249249
if (b) {
250-
Direct = Url;
250+
Image = Image.FromStream(di.Stream);
251+
252+
Direct.Url = Url;
251253
}
252254

253255
return b;
254256
}
255257

256-
public void UpdateImageData()
258+
public void ReloadImageData()
257259
{
258260
if (Image is { }) {
259-
260261
Width = Image.Width;
261262
Height = Image.Height;
262-
263263
}
264264
}
265265

@@ -274,7 +274,7 @@ public Dictionary<string, object> Outline
274274
var map = new Dictionary<string, object>
275275
{
276276
{ nameof(Url), Url },
277-
{ nameof(Direct), Direct }
277+
{ "Direct Url",Direct.Url }
278278
};
279279

280280
if (Similarity.HasValue) {

0 commit comments

Comments
 (0)