@@ -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 ;
0 commit comments