Skip to content

Commit 318a676

Browse files
committed
Additional result info, SauceNao rework
1 parent e93810d commit 318a676

File tree

7 files changed

+151
-109
lines changed

7 files changed

+151
-109
lines changed

SmartImage/Engines/Other/IqdbEngine.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,31 @@ private struct IqdbResult : ISearchResult
3030

3131
public string? Caption { get; set; }
3232

33-
public string Source { get; }
33+
public string? Source { get; set; }
3434

3535
public int? Width { get; set; }
3636

3737
public int? Height { get; set; }
3838

3939
public string Url { get; set; }
4040

41-
public float? Similarity { get; set; }
41+
public float? Similarity { get; set; }
42+
public string? Artist { get; set; }
43+
public string? Characters { get; set; }
44+
public string? SiteName { get; set; }
4245

43-
public IqdbResult(string caption, string source, string url, int width, int height, float? similarity)
46+
public IqdbResult(string siteName, string source, string url, int width, int height, float? similarity)
4447
{
45-
Caption = caption;
48+
SiteName = siteName;
4649
Url = url;
4750
Source = source;
4851
Width = width;
4952
Height = height;
5053
Similarity = similarity;
5154
Filter = false; // set later
55+
Artist = null;
56+
Characters = null;
57+
Caption = null;
5258
}
5359
}
5460

@@ -105,7 +111,7 @@ private IqdbResult ParseResult(HtmlNodeCollection tr)
105111
}
106112

107113

108-
var i = new IqdbResult(caption.InnerText, src.InnerText, url, w, h, sim);
114+
var i = new IqdbResult(src.InnerText, null, url, w, h, sim);
109115
i.Filter = i.Similarity < FilterThreshold;
110116
return i;
111117
}
@@ -153,7 +159,8 @@ public override FullSearchResult GetResult(string url)
153159
sr.Url = best.Url;
154160
sr.Similarity = best.Similarity;
155161
sr.Filter = best.Filter;
156-
162+
sr.Source = best.Source;
163+
sr.SiteName = best.SiteName;
157164
sr.AddExtendedResults(images.ToArray());
158165

159166

SmartImage/Engines/Other/YandexEngine.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ private struct YandexResult : ISearchResult
3434

3535
public string Url { get; set; }
3636

37+
public string? Artist { get; set; }
38+
public string? Source { get; set; }
39+
public string? Characters { get; set; }
40+
public string? SiteName { get; set; }
3741

3842
internal YandexResult(int width, int height, string url)
3943
{
@@ -43,6 +47,10 @@ internal YandexResult(int width, int height, string url)
4347
Caption = null;
4448
Similarity = null;
4549
Filter = false;
50+
Artist = null;
51+
Source = null;
52+
Characters = null;
53+
SiteName=null;
4654
}
4755

4856
public override string ToString()

SmartImage/Engines/SauceNao/SauceNaoDataResult.cs

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,65 +5,36 @@
55

66
namespace SmartImage.Engines.SauceNao
77
{
8-
[DataContract]
98
public class SauceNaoDataResult
109
{
1110
/// <summary>
1211
/// The url(s) where the source is from. Multiple will be returned if the exact same image is found in multiple places
1312
/// </summary>
14-
[DataMember(Name = "ext_urls")]
15-
public string[] Url { get; internal set; }
13+
public string[] Urls { get; internal set; }
1614

1715
/// <summary>
1816
/// The search index of the image
1917
/// </summary>
20-
[DataMember(Name = "index_id")]
2118
public SauceNaoSiteIndex Index { get; internal set; }
2219

2320
/// <summary>
2421
/// How similar is the image to the one provided (Percentage)?
2522
/// </summary>
26-
[DataMember(Name = "similarity")]
2723
public float Similarity { get; internal set; }
2824

29-
/// <summary>
30-
/// A link to the thumbnail of the image
31-
/// </summary>
32-
[DataMember(Name = "thumbnail")]
33-
public string Thumbnail { get; internal set; }
34-
35-
/// <summary>
36-
/// The name of the website it came from
37-
/// </summary>
38-
[IgnoreDataMember]
39-
public string WebsiteName { get; internal set; }
40-
41-
/// <summary>
42-
/// How explicit is the image?
43-
/// </summary>
44-
[IgnoreDataMember]
45-
public float Rating { get; internal set; }
46-
47-
[IgnoreDataMember]
4825
public string WebsiteTitle { get; set; }
4926

50-
[IgnoreDataMember]
5127
public string Character { get; internal set; }
5228

53-
[IgnoreDataMember]
54-
5529
public string Material { get; internal set; }
5630

57-
[IgnoreDataMember]
58-
5931
public string Creator { get; internal set; }
6032

61-
6233
public override string ToString()
6334
{
64-
string firstUrl = Url != null ? Url[0] : "-";
35+
string firstUrl = Urls != null ? Urls[0] : "-";
6536

66-
return String.Format("{0} ({1}, {2})", firstUrl, Similarity, Index);
37+
return $"{firstUrl} ({Similarity}, {Index})";
6738
}
6839
}
6940
}

SmartImage/Engines/SauceNao/SauceNaoEngine.cs

Lines changed: 81 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,29 @@ private struct SauceNaoSimpleResult : ISearchResult
5151
public float? Similarity { get; set; }
5252
public int? Width { get; set; }
5353
public int? Height { get; set; }
54+
public string? Artist { get; set; }
55+
public string? Source { get; set; }
56+
public string? Characters { get; set; }
57+
public string? SiteName { get; set; }
5458

55-
56-
public SauceNaoSimpleResult(string? title, string url, float? similarity)
59+
public SauceNaoSimpleResult(string? title, string url, float? similarity, string? artist, string? source,
60+
string? characters, string? siteName)
5761
{
5862
Caption = title;
5963
Url = url;
6064
Similarity = similarity;
6165
Width = null;
6266
Height = null;
6367
Filter = false; //set later
64-
68+
Artist = artist;
69+
Source = source;
70+
Characters = characters;
71+
SiteName = siteName;
6572
}
6673

6774
public override string ToString()
6875
{
69-
return $"{Caption} {Url} {Similarity}";
76+
return $"{Url} {Similarity}";
7077
}
7178
}
7279

@@ -91,45 +98,23 @@ private ISearchResult[] ConvertResults(SauceNaoDataResult[] results)
9198
var rg = new List<ISearchResult>();
9299

93100
foreach (var sn in results) {
94-
if (sn.Url != null) {
95-
var url = sn.Url.FirstOrDefault(u => u != null);
96-
var x = new SauceNaoSimpleResult(sn.WebsiteTitle, url, sn.Similarity);
101+
if (sn.Urls != null) {
102+
var url = sn.Urls.FirstOrDefault(u => u != null);
103+
var name = sn.Index.ToString();
104+
105+
var x = new SauceNaoSimpleResult(sn.WebsiteTitle, url,
106+
sn.Similarity, sn.Creator, sn.Material, sn.Character,name);
107+
97108
x.Filter = x.Similarity < FilterThreshold;
98109

99110

100-
101-
x.Caption = AddCaption(sn);
102111
rg.Add(x);
103112
}
104113
}
105114

106115
return rg.ToArray();
107116
}
108117

109-
private static string? AddCaption(SauceNaoDataResult x)
110-
{
111-
var sb = new StringBuilder();
112-
113-
if (x.Character != null)
114-
{
115-
sb.Append($"Characters: {x.Character}");
116-
}
117-
if (x.Creator != null)
118-
{
119-
sb.Append($" Creator: {x.Creator}");
120-
}
121-
if (x.Material != null)
122-
{
123-
sb.Append($" Material: {x.Material}");
124-
}
125-
126-
if (sb.Length == 0) {
127-
return null;
128-
}
129-
130-
return sb.ToString();
131-
}
132-
133118

134119
public override FullSearchResult GetResult(string url)
135120
{
@@ -138,17 +123,19 @@ public override FullSearchResult GetResult(string url)
138123
try {
139124
var orig = GetResults(url);
140125

141-
// todo - aggregate all info for primary result
142-
143-
var character = orig.FirstOrDefault(o => o.Character != null)?.Character;
144-
var creator = orig.FirstOrDefault(o => o.Creator != null)?.Creator;
145-
var material = orig.FirstOrDefault(o => o.Material != null)?.Material;
126+
if (orig == null) {
127+
return result;
128+
}
146129

147-
// todo - bad practice
148-
var dummy = new SauceNaoDataResult() {Character = character, Creator = creator, Material = material};
130+
// todo - aggregate all info for primary result
149131

150-
result.Caption = AddCaption(dummy);
132+
var character = orig.FirstOrDefault(o => o.Character != null)?.Character;
133+
var creator = orig.FirstOrDefault(o => o.Creator != null)?.Creator;
134+
var material = orig.FirstOrDefault(o => o.Material != null)?.Material;
151135

136+
result.Characters = character;
137+
result.Artist = creator;
138+
result.Source = material;
152139

153140
var extended = ConvertResults(orig);
154141

@@ -162,7 +149,6 @@ public override FullSearchResult GetResult(string url)
162149
// Copy
163150
result.Url = best.Url;
164151
result.Similarity = best.Similarity;
165-
166152
result.Filter = best.Filter;
167153

168154

@@ -185,7 +171,7 @@ public override FullSearchResult GetResult(string url)
185171
}
186172

187173

188-
private SauceNaoDataResult[] GetResults(string url)
174+
private SauceNaoDataResult[]? GetResults(string url)
189175
{
190176

191177
var req = new RestRequest();
@@ -203,7 +189,7 @@ private SauceNaoDataResult[] GetResults(string url)
203189
}
204190

205191

206-
private static SauceNaoDataResult[] ReadResults(string js)
192+
private static SauceNaoDataResult[]? ReadResults(string js)
207193
{
208194
// todo: rewrite this using Newtonsoft
209195

@@ -224,30 +210,32 @@ private static SauceNaoDataResult[] ReadResults(string js)
224210
}
225211

226212
string json = jsonArray.ToString();
227-
var jsoncpy = json;
228-
229-
json = json.Insert(json.Length - 1, "}").Insert(0, "{\"results\":");
230-
231-
using var stream =
232-
JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(json),
233-
XmlDictionaryReaderQuotas.Max);
213+
var jsonCpy = json;
234214

215+
// json = json.Insert(json.Length - 1, "}").Insert(0, "{\"results\":");
216+
//
217+
// using var stream =
218+
// JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(json),
219+
// XmlDictionaryReaderQuotas.Max);
220+
//
221+
//
222+
// var serializer = new DataContractJsonSerializer(typeof(SauceNaoDataResponse));
223+
// var result = serializer.ReadObject(stream) as SauceNaoDataResponse;
235224

236-
var serializer = new DataContractJsonSerializer(typeof(SauceNaoDataResponse));
237-
var result = serializer.ReadObject(stream) as SauceNaoDataResponse;
225+
var buffer = new List<SauceNaoDataResult>();
238226

239227
// todo - crappy solution
240-
241-
var res2 = JsonArray.Parse(jsoncpy);
228+
229+
var res2 = JsonArray.Parse(jsonCpy);
242230
Debug.WriteLine(res2.Count);
243231

244232

245-
stream.Dispose();
233+
//stream.Dispose();
246234

247-
if (result is null)
248-
return null;
235+
//if (result is null)
236+
// return null;
249237

250-
for (int index = 0; index < result.Results.Length; index++) {
238+
/*for (int index = 0; index < result.Results.Length; index++) {
251239
var t = result.Results[index];
252240
var t2 = res2[index];
253241
t.WebsiteTitle = Strings.SplitPascalCase(t.Index.ToString());
@@ -258,7 +246,40 @@ private static SauceNaoDataResult[] ReadResults(string js)
258246
t.Material = t2.ContainsKey("material") ? t2["material"].ToString() : null;
259247
}
260248
261-
return result.Results;
249+
return result.Results;*/
250+
251+
for (int i = 0; i < res2.Count; i++) {
252+
var t2 = res2[i];
253+
254+
var s = float.Parse(t2["similarity"]);
255+
string[] strings;
256+
257+
if (t2.ContainsKey("ext_urls")) {
258+
strings = (t2["ext_urls"] as JsonArray).Select(j => j.ToString()).ToArray();
259+
}
260+
else {
261+
strings = null;
262+
}
263+
264+
265+
var sauceNaoSiteIndex = (SauceNaoSiteIndex) int.Parse(t2["index_id"].ToString());
266+
267+
var t = new SauceNaoDataResult
268+
{
269+
Urls = strings,
270+
Similarity = s,
271+
Index = sauceNaoSiteIndex,
272+
Creator = t2.ContainsKey("creator") ? t2["creator"].ToString().CleanString() : null,
273+
Character = t2.ContainsKey("characters") ? t2["characters"].ToString().CleanString() : null,
274+
Material = t2.ContainsKey("material") ? t2["material"].ToString().CleanString() : null,
275+
};
276+
277+
278+
buffer.Add(t);
279+
}
280+
281+
return buffer.ToArray();
282+
262283
}
263284

264285
return null;

SmartImage/Engines/TraceMoe/TraceMoeEngine.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private ISearchResult[] ConvertResults(TraceMoeRootObject obj)
4848

4949
results[i] = new FullSearchResult(this, malUrl, sim)
5050
{
51-
Caption = doc.title_english
51+
Source = doc.title_english
5252
};
5353
}
5454

@@ -80,7 +80,7 @@ public override FullSearchResult GetResult(string url)
8080
var best = results[0];
8181

8282
r = new FullSearchResult(this, best.Url, best.Similarity);
83-
r.Caption = best.Caption;
83+
r.Source = best.Source;
8484
r.Filter = r.Similarity < FilterThreshold;
8585

8686

0 commit comments

Comments
 (0)