Skip to content

Commit d42b3f3

Browse files
committed
refactoring
1 parent 3ad652c commit d42b3f3

22 files changed

+410
-367
lines changed

SmartImage.Lib/Engines/Impl/Search/ArchiveMoeEngine.cs

Lines changed: 39 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,14 @@ protected override Url GetRawUrl(SearchQuery query)
3535
// return (BaseUrl.AppendPathSegments("image").AppendPathSegment(Base64Hash));
3636
}
3737

38-
protected override ValueTask<SearchResultItem> ParseResultItem(INode n, SearchResult r)
39-
{
40-
// ReSharper disable PossibleNullReferenceException
41-
42-
var p = ChanPost.Parse(n);
43-
return p.ToItem(r);
44-
45-
// ReSharper restore PossibleNullReferenceException
46-
}
38+
4739

4840
protected static string GetHash(SearchQuery q)
4941
{
5042
//var digestBase64URL = digestBase64.replace('==', '').replace(/\//g, '_').replace(/\+/g, '-');
5143
using Stream stream = q.Source.Image.ToStream();
52-
var data = MD5.HashData(stream);
53-
var b64 = Convert.ToBase64String(data).Replace("==", "");
44+
var data = MD5.HashData(stream);
45+
var b64 = Convert.ToBase64String(data).Replace("==", "");
5446
b64 = Regex.Replace(b64, @"\//", "_");
5547
b64 = Regex.Replace(b64, @"\+", "-");
5648

@@ -72,25 +64,35 @@ public override void Dispose()
7264

7365
}
7466

75-
public record ChanPost : ISearchResultItemConverter<ChanPost>
67+
public record ChanPost : SearchResultItem, INodeResultParse<ChanPost>
7668
{
7769

78-
public string Author;
79-
public string Board;
80-
public Url File;
81-
public string Filename;
82-
public int Height;
83-
84-
public long Id;
85-
public string Size;
86-
public string Text;
87-
public string Time1;
88-
public DateTime Time2;
89-
public string Title;
90-
public string Tripcode;
91-
public int Width;
92-
93-
public static ChanPost Parse(INode n)
70+
public string Board { get; private set; }
71+
72+
public Url File { get; private set; }
73+
74+
public string Filename { get; private set; }
75+
76+
public long Id { get; private set; }
77+
78+
public string Size { get; private set; }
79+
80+
public string Text { get; private set; }
81+
82+
// public string Time1 { get; private set; }
83+
84+
// public DateTime Time2 { get; private set; }
85+
86+
public string Tripcode { get; private set; }
87+
88+
89+
90+
91+
private ChanPost(SearchResult r) : base(r) { }
92+
93+
#region Implementation of IResultParse<in INode,ChanPost>
94+
95+
public static ValueTask<ChanPost> ParseResultItem(INode n, SearchResult r)
9496
{
9597
var e = n as HtmlElement;
9698

@@ -107,42 +109,28 @@ public static ChanPost Parse(INode n)
107109

108110
var wh = pfm[1].Split('x');
109111

110-
var p = new ChanPost
112+
var file = Flurl.Url.Parse(pff.GetAttribute("href"));
113+
114+
var p = new ChanPost(r)
111115
{
112116
Id = Int64.Parse(e.GetAttribute("id")),
113117
Board = e.GetAttribute("data-board"),
114118
Filename = pff.TextContent,
115-
File = pff.GetAttribute("href"),
119+
File = file,
116120
Width = Int32.Parse(wh[0]),
117121
Height = Int32.Parse(wh[1]),
118122
Size = pfm[0],
119123
Title = pt,
120-
Author = pa,
124+
Artist = pa,
125+
Site = file.Host,
121126
Tripcode = ptc,
122-
Time1 = time,
123-
Time2 = time2,
127+
Time = time2,
124128
Text = text
125129
};
126130

127-
return p;
131+
return ValueTask.FromResult(p);
128132
}
129133

130-
public ValueTask<SearchResultItem> ToItem(SearchResult sr)
131-
{
132-
133-
var sri = new SearchResultItem(sr)
134-
{
135-
Url = File,
136-
Width = Width,
137-
Height = Height,
138-
Artist = Author,
139-
Description = Title,
140-
Time = Time2,
141-
Site = File.Host,
142-
Metadata = this
143-
};
144-
145-
return ValueTask.FromResult(sri);
146-
}
134+
#endregion
147135

148136
}

SmartImage.Lib/Engines/Impl/Search/EHentaiEngine.cs

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -335,13 +335,15 @@ public override ValueTask<bool> ApplyConfigAsync(SearchConfig cfg, CancellationT
335335

336336
#endregion
337337

338-
protected override ValueTask<SearchResultItem> ParseResultItem(INode n, SearchResult r)
338+
#region Overrides of WebSearchEngine
339+
340+
protected override async ValueTask<IEnumerable<SearchResultItem>> GetItems(IEnumerable<INode> n, SearchResult r)
339341
{
340-
var eh = EhResult.Parse(n);
341-
var sri = eh.ToItem(r);
342-
return sri;
342+
343343
}
344344

345+
#endregion
346+
345347
public override void Dispose()
346348
{
347349
// m_client.Dispose();
@@ -370,47 +372,33 @@ private bool SetField<T>(ref T field, T value, [CallerMemberName] string propert
370372

371373
}
372374

373-
public sealed record EhResult : ISearchResultItemConvertable
375+
public sealed record EhResult : SearchResultItem, INodeResultParse<EhResult>
374376
{
375377

376-
public string Type { get; internal set; }
377-
378-
public string Pages { get; internal set; }
378+
public string Type { get; private set; }
379379

380-
public string Title { get; internal set; }
380+
public string Pages { get; private set; }
381381

382-
public string Author { get; internal set; }
383382

384-
public string AuthorUrl { get; internal set; }
383+
public string Author { get; private set; }
385384

386-
public Url Url { get; internal set; }
385+
public string AuthorUrl { get; private set; }
387386

388-
public ConcurrentDictionary<string, ConcurrentBag<string>> Tags { get; } = new();
389387

388+
public Dictionary<string, string[]> Tags { get; }
390389

391-
#region Implementation of IResultConverter2<out EhResult,out SearchResultItem>
392-
393-
public ValueTask<SearchResultItem> ToItem(SearchResult sr)
390+
private EhResult(SearchResult r) : base(r)
394391
{
395-
var sb = Tags.Select(t => $"{t.Key}: {t.Value.QuickJoin()}").QuickJoin(" | ");
396-
397-
var sri = new SearchResultItem(sr)
398-
{
399-
Title = Title,
400-
Url = Url,
401-
Artist = Author,
402-
Description = $"{Pages} ({sb})"
403-
};
404-
405-
return ValueTask.FromResult(sri);
392+
Tags = [];
406393
}
407394

408-
public static EhResult Parse(INode n)
409-
{
410-
var item = new EhResult();
395+
#region Implementation of IResultConverter2<out EhResult,out SearchResultItem>
411396

397+
398+
public static ValueTask<EhResult> ParseResultItem(INode n, SearchResult sr)
399+
{
412400
// ReSharper disable InconsistentNaming
413-
var eh = new EhResult();
401+
var eh = new EhResult(sr);
414402

415403
var gl1c = n.ChildNodes.FirstOrDefaultElementByClassName("gl1c");
416404

@@ -480,20 +468,20 @@ public static EhResult Parse(INode n)
480468

481469

482470
if (eh.Tags.TryGetValue("artist", out var v)) {
483-
item.Author = v.FirstOrDefault();
471+
eh.Author = v.FirstOrDefault();
484472
}
485473

474+
var sb = eh.Tags.Select(t => $"{t.Key}: {t.Value.QuickJoin()}").QuickJoin(" | ");
486475

487-
item.Title = eh.Title;
488-
item.Url = eh.Url;
476+
eh.Description=sb;
489477

490478
/*var gl1c = n.ChildNodes[0];
491479
var gl2c = n.ChildNodes[1];
492480
var ehx_compact = n.ChildNodes[2];
493481
var gl3c = n.ChildNodes[3];
494482
var gl4c = n.ChildNodes[4];*/
495483

496-
return item;
484+
return ValueTask.FromResult(eh);
497485

498486
}
499487

SmartImage.Lib/Engines/Impl/Search/FluffleEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public class FluffleResultCredit
147147

148148
}
149149

150-
public class FluffleResult : ISearchResultItemConvertable
150+
public class FluffleResult : IToSearchResultItem
151151
{
152152

153153
[JsonPropertyName("id")]

SmartImage.Lib/Engines/Impl/Search/GoogleLensEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#pragma warning disable IDE0051
2222
namespace SmartImage.Lib.Engines.Impl.Search;
2323

24-
public class GoogleLensItem : ISearchResultItemConverter<GoogleLensItem>
24+
public class GoogleLensItem : INodeToSearchResultItemParseable<GoogleLensItem>
2525
{
2626

2727
public string Title { get; private set; }

SmartImage.Lib/Engines/Impl/Search/RepostSleuthEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public override async Task<SearchResult> GetResultAsync(SearchQuery query, Cance
105105

106106
#region API Objects
107107

108-
private class RepostSleuthMatch : ISearchResultItemConvertable
108+
private class RepostSleuthMatch : IToSearchResultItem
109109
{
110110

111111
public int hamming_distance;

SmartImage.Lib/Engines/Impl/Search/SauceNaoEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ public static bool IsLookupUrl(Url url)
326326
/// <summary>
327327
/// Origin result
328328
/// </summary>
329-
public sealed class SauceNaoDataResult : IItemConverter<SauceNaoDataResult, IEnumerable<SearchResultItem>>
329+
public sealed class SauceNaoDataResult : INodeParseable<SauceNaoDataResult>
330330
{
331331

332332
/// <summary>

SmartImage.Lib/Engines/Impl/Search/TraceMoeEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public class TraceMoeQuotaObject
150150
}
151151

152152
[UsedImplicitly(ImplicitUseTargetFlags.WithMembers)]
153-
public class TraceMoeDoc : ISearchResultItemConvertable
153+
public class TraceMoeDoc : IToSearchResultItem
154154
{
155155

156156
public double From { get; set; }

0 commit comments

Comments
 (0)