Skip to content

Commit 13f2f3a

Browse files
committed
Fixes; updates; refactoring
1 parent 92cbb05 commit 13f2f3a

File tree

13 files changed

+175
-116
lines changed

13 files changed

+175
-116
lines changed

SmartImage.Lib/Engines/BaseSearchEngine.cs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,15 @@ public async Task<SearchResult> GetResultAsync(ImageQuery query)
4444
var task = Task.Run(delegate
4545
{
4646
Debug.WriteLine($"{Name}: getting result async",C_INFO);
47-
var sw = Stopwatch.StartNew();
48-
49-
var res = GetResult(query);
5047

51-
sw.Stop();
48+
var res = GetResult(query);
5249

53-
Debug.WriteLine($"{Name}: result done {sw.Elapsed.TotalSeconds}",C_SUCCESS);
50+
Debug.WriteLine($"{Name}: result done",C_SUCCESS);
5451

5552
return res;
5653
});
5754

5855
return await task;
59-
60-
//if (!task.Wait(span)) TokenSource.Cancel();
61-
62-
//await task.AwaitWithTimeout(10, () => { }, () => { Debug.WriteLine($"cancel {Name}"); });
63-
64-
//return task.Result;
6556
}
6657

6758
public Uri GetRawResultUrl(ImageQuery query)

SmartImage.Lib/Engines/Impl/IqdbEngine.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,19 @@ private static ImageResult ParseResult(IHtmlCollection<IElement> tr)
3131

3232
string url = null!;
3333

34+
//img.ChildNodes[0].ChildNodes[0].TryGetAttribute("href")
3435

35-
try {
36-
url = src.FirstChild.ChildNodes[2].ChildNodes[0].TryGetAttribute("href");
36+
37+
try
38+
{
39+
//url = src.FirstChild.ChildNodes[2].ChildNodes[0].TryGetAttribute("href");
40+
41+
url = img.ChildNodes[0].ChildNodes[0].TryGetAttribute("href");
3742

3843
// Links must begin with http:// in order to work with "start"
39-
if (url.StartsWith("//")) {
40-
url = "http:" + url;
41-
}
44+
//if (url.StartsWith("//")) {
45+
// url = "http:" + url;
46+
//}
4247
}
4348
catch {
4449
// ignored

SmartImage.Lib/Engines/InterpretedSearchEngine.cs

Lines changed: 26 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@
1010
using SimpleCore.Net;
1111
using SmartImage.Lib.Searching;
1212
using SmartImage.Lib.Utilities;
13+
using static SimpleCore.Diagnostics.LogCategories;
1314

1415
namespace SmartImage.Lib.Engines
1516
{
17+
/// <summary>
18+
/// Represents a search engine whose results are parsed.
19+
/// </summary>
1620
public abstract class InterpretedSearchEngine : BaseSearchEngine
1721
{
1822
public abstract override SearchEngineOptions Engine { get; }
@@ -22,63 +26,46 @@ public abstract class InterpretedSearchEngine : BaseSearchEngine
2226
protected InterpretedSearchEngine(string baseUrl) : base(baseUrl) { }
2327

2428

25-
protected virtual IDocument GetDocument(SearchResult sr)
26-
{
27-
/*if (!Network.TryGetString(sr.RawUri.ToString()!, out var html))
28-
{
29-
sr.RawUri = null;
30-
sr.PrimaryResult.Url = null;
31-
32-
//sr.AddErrorMessage("Unavailable");
33-
throw new SmartImageException();
34-
}*/
35-
36-
37-
string response = Network.GetString(sr.RawUri.ToString()!);
38-
39-
//var doc = new HtmlWeb().Load(sr.RawUri);
40-
var p = new HtmlParser();
41-
return p.ParseDocument(response);
42-
43-
//var response = Network.GetSimpleResponse(sr.RawUri.ToString()!);
44-
45-
//var req = new RestRequest(BaseUrl);
46-
//req.AddQueryParameter("url", sr.RawUri.ToString());
47-
//var rc = new RestClient();
48-
//var res =rc.Execute(req);
49-
//var response = res.Content;
50-
51-
//var doc = new HtmlDocument();
52-
//doc.LoadHtml(response.Content);
53-
//doc.LoadHtml(response);
54-
55-
56-
}
57-
58-
protected abstract SearchResult Process(IDocument doc, SearchResult sr);
59-
6029
[DebuggerHidden]
6130
public override SearchResult GetResult(ImageQuery query)
6231
{
63-
6432
var sr = base.GetResult(query);
6533

6634
if (!sr.IsSuccessful) {
6735
return sr;
6836
}
6937

7038
try {
71-
7239
var doc = GetDocument(sr);
40+
7341
sr = Process(doc, sr);
7442
}
7543
catch (Exception e) {
7644
sr.Status = ResultStatus.Failure;
77-
Trace.WriteLine($"{Name}: {e.Message} {e.Source} {e.StackTrace}");
78-
45+
Trace.WriteLine($"{Name}: {e.Message} {e.Source} {e.StackTrace}", C_ERROR);
7946
}
8047

8148
return sr;
8249
}
50+
51+
protected virtual IDocument GetDocument(SearchResult sr)
52+
{
53+
/*if (!Network.TryGetString(sr.RawUri.ToString()!, out var html))
54+
{
55+
sr.RawUri = null;
56+
sr.PrimaryResult.Url = null;
57+
58+
//sr.AddErrorMessage("Unavailable");
59+
throw new SmartImageException();
60+
}*/
61+
62+
63+
string response = Network.GetString(sr.RawUri.ToString()!);
64+
65+
var parser = new HtmlParser();
66+
return parser.ParseDocument(response);
67+
}
68+
69+
protected abstract SearchResult Process(IDocument doc, SearchResult sr);
8370
}
8471
}

SmartImage.Lib/SearchClient.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public ImageResult[] FindBestResults(int n)
5151
//todo: WIP
5252
Debug.WriteLine($"Finding best results");
5353

54-
var best = Results.Where(r => r.Status != ResultStatus.Extraneous && !r.IsPrimitive)
54+
var best = Results.Where(r => r.IsNonPrimitive)
5555
.SelectMany(r =>
5656
{
5757
var x = r.OtherResults;
@@ -87,7 +87,7 @@ public List<SearchResult> MaximizeResults<T>(Func<SearchResult, T> property)
8787

8888
var res = Results.OrderByDescending(property).ToList();
8989

90-
res.RemoveAll(r => r.IsPrimitive);
90+
res.RemoveAll(r => !r.IsNonPrimitive);
9191

9292
return res;
9393
}
@@ -130,12 +130,15 @@ public async Task RunSearchAsync()
130130
var value = await finished;
131131

132132
tasks.Remove(finished);
133-
134-
Results.Add(value);
135-
136-
// Call event
137-
ResultCompleted?.Invoke(null, new SearchResultEventArgs(value));
138-
133+
134+
if (!(Config.Filter && !value.IsNonPrimitive)) {
135+
Results.Add(value);
136+
137+
// Call event
138+
ResultCompleted?.Invoke(null, new SearchResultEventArgs(value));
139+
}
140+
141+
139142
IsComplete = !tasks.Any();
140143
}
141144

SmartImage.Lib/SearchConfig.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@
99

1010
namespace SmartImage.Lib
1111
{
12+
/// <summary>
13+
/// Contains configuration for <see cref="SearchClient"/>
14+
/// </summary>
1215
public sealed class SearchConfig
1316
{
1417
public ImageQuery Query { get; set; }
1518

1619
public SearchEngineOptions SearchEngines { get; set; } = SearchEngineOptions.All;
1720

18-
public SearchEngineOptions PriorityEngines { get; set; } //todo
21+
public SearchEngineOptions PriorityEngines { get; set; }
22+
23+
public bool Filter { get; set; } = true;
24+
1925
}
2026
}

SmartImage.Lib/Searching/ImageResult.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,11 @@ public void UpdateFrom(ImageResult result)
177177
Description = result.Description;
178178
Date = result.Date;
179179
}
180-
181-
public override string ToString()
180+
181+
public string ToString(bool indent)
182182
{
183-
var sb = new ExtendedStringBuilder() {};
183+
184+
var sb = new ExtendedStringBuilder() { };
184185

185186
sb.Append(nameof(Url), Url);
186187

@@ -189,7 +190,7 @@ public override string ToString()
189190
}
190191

191192
if (HasImageDimensions) {
192-
string? val = $"{Width}x{Height} ({MegapixelResolution:F} MP)";
193+
string val = $"{Width}x{Height} ({MegapixelResolution:F} MP)";
193194

194195

195196
var resType = DisplayResolution;
@@ -215,7 +216,11 @@ public override string ToString()
215216

216217
sb.Append($"Detail score", $"{DetailScore}/{DetailFields.Count} ({(IsDetailed ? "Y" : "N")})");
217218

218-
return sb.ToString().RemoveLastOccurrence("\n");
219+
var xs = sb.ToString().RemoveLastOccurrence("\n");
220+
221+
return indent ? Strings.IndentFields(xs) : xs;
219222
}
223+
224+
public override string ToString() => ToString(false);
220225
}
221226
}

SmartImage.Lib/Searching/SearchResult.cs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,8 @@ public class SearchResult
4242
[CanBeNull]
4343
public string ErrorMessage { get; set; }
4444

45-
public bool IsPrimitive
46-
{
47-
get
48-
{
49-
//todo: WIP
50-
return PrimaryResult.Url == null;
51-
}
52-
}
45+
public bool IsNonPrimitive => Status != ResultStatus.Extraneous && (PrimaryResult.Url != null);
46+
5347

5448
public bool IsSuccessful
5549
{
@@ -85,11 +79,13 @@ public override string ToString()
8579

8680
var name = $"[{Engine.Name}]";
8781

88-
sb.AppendLine($"{name} :: ({Status}; {(IsPrimitive ? RANK_P : RANK_S)})");
82+
sb.AppendLine($"{name} :: ({Status}; {(!IsNonPrimitive ? RANK_P : RANK_S)})");
8983

9084
if (PrimaryResult.Url != null) {
91-
var resStr = sb.IndentFields(PrimaryResult.ToString());
92-
string separator = sb.Indent + new string('-', 20);
85+
//var resStr = sb.IndentFields(PrimaryResult.ToString());
86+
87+
var resStr = PrimaryResult.ToString(true);
88+
string separator = Strings.Indent + new string('-', 20);
9389

9490
sb.Append($"{resStr}\n{separator}\n");
9591
}

SmartImage.Lib/Utilities/ImageHelper.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ public static DisplayResolutionType GetDisplayResolution(int w, int h)
9292

9393
public static string[] Scan(string s)
9494
{
95+
96+
// TODO: WIP
97+
9598
//<img.*?src="(.*?)"
9699
//href\s*=\s*"(.+?)"
97100

@@ -130,7 +133,7 @@ public static string[] Scan(string s)
130133
}
131134

132135

133-
public static string ResolveDirectLink(string s)
136+
/*public static string ResolveDirectLink(string s)
134137
{
135138
//todo: WIP
136139
string d = "";
@@ -178,7 +181,7 @@ public static string ResolveDirectLink(string s)
178181
179182
180183
return d;
181-
}
184+
}*/
182185
}
183186

184187
public enum DisplayResolutionType

SmartImage.UI/Form.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private void HandleResult(object o, SearchResultEventArgs args)
7575
{
7676
var searchResult = args.Result;
7777

78-
if (searchResult.IsPrimitive && filterCheckBox.Checked) {
78+
if (!searchResult.IsNonPrimitive && filterCheckBox.Checked) {
7979
searchProgressBar.PerformStep();
8080
return;
8181
}
@@ -146,7 +146,7 @@ private void AddSearchResult(SearchResult searchResult, ListViewGroup listViewGr
146146
var imageResult = searchResult.PrimaryResult;
147147

148148
if (searchResult.IsSuccessful) {
149-
listViewItem.SubItems.Add(searchResult.IsPrimitive
149+
listViewItem.SubItems.Add(!searchResult.IsNonPrimitive
150150
? searchResult.RawUri.ToString()
151151
: imageResult.Url?.ToString());
152152
}

0 commit comments

Comments
 (0)