3232
3333namespace SmartImage . Lib . Engines . Impl
3434{
35- public sealed class SauceNaoEngine : BaseSearchEngine
35+ public sealed class SauceNaoEngine : ClientSearchEngine
3636 {
3737 private const string BASE_URL = "https://saucenao.com/" ;
3838
3939 private const string BASIC_RESULT = "https://saucenao.com/search.php?url=" ;
4040
41- private const string SEARCH = "search.php" ;
42-
43- private readonly RestClient m_client ;
44-
41+ public override string Name => EngineOption . ToString ( ) ;
4542
4643 /*
4744 * Excerpts adapted from https://github.com/Lazrius/SharpNao/blob/master/SharpNao.cs#L53
4845 * https://github.com/luk1337/SauceNAO/blob/master/app/src/main/java/com/luk/saucenao/MainActivity.java
4946 */
5047
5148
52- public SauceNaoEngine ( string authentication ) : base ( BASIC_RESULT )
49+ public SauceNaoEngine ( string authentication ) : base ( BASIC_RESULT , BASE_URL )
5350 {
54- m_client = new RestClient ( BASE_URL ) ;
5551 Authentication = authentication ;
5652 }
5753
5854 public SauceNaoEngine ( ) : this ( null ) { }
5955
60- public string Authentication { get ; init ; }
56+ public string Authentication { get ; set ; }
6157
6258 public bool UsingAPI => ! String . IsNullOrWhiteSpace ( Authentication ) ;
6359
6460 public override SearchEngineOptions EngineOption => SearchEngineOptions . SauceNao ;
6561
6662
67- private delegate IEnumerable < SauceNaoDataResult > ParseResultFunction ( ImageQuery q ) ;
68-
69- private ParseResultFunction GetParseFunction ( ) => ! UsingAPI ? GetHTMLResults : GetAPIResults ;
70-
71- public override SearchResult GetResult ( ImageQuery query )
63+ protected override SearchResult Process ( object obj , SearchResult result )
7264 {
73- var result = base . GetResult ( query ) ;
65+ var query = ( ImageQuery ) obj ;
66+
7467 var primaryResult = new ImageResult ( ) ;
7568
76- var f = GetParseFunction ( ) ;
69+ var parseFunc = ( Func < ImageQuery , IEnumerable < SauceNaoDataResult > > )
70+ ( ! UsingAPI ? GetHTMLResults : GetAPIResults ) ;
71+
72+ var now = Stopwatch . GetTimestamp ( ) ;
73+
74+ var dataResults = parseFunc ( query ) ;
7775
78- var now = Stopwatch . GetTimestamp ( ) ;
79- var dataResults = f ( query ) ;
8076 result . RetrievalTime = TimeSpan . FromTicks ( Stopwatch . GetTimestamp ( ) - now ) ;
8177
8278 if ( dataResults == null ) {
@@ -89,8 +85,7 @@ public override SearchResult GetResult(ImageQuery query)
8985 var imageResults = dataResults . Where ( o => o != null )
9086 . AsParallel ( )
9187 . Select ( ConvertToImageResult )
92- . Where ( o => o != null )
93- . Where ( e => e . Url != null )
88+ . Where ( o => o != null )
9489 . OrderByDescending ( e => e . Similarity )
9590 . ToList ( ) ;
9691
@@ -117,6 +112,7 @@ public override SearchResult GetResult(ImageQuery query)
117112 return result ;
118113 }
119114
115+
120116 private IEnumerable < SauceNaoDataResult > GetHTMLResults ( ImageQuery query )
121117 {
122118
@@ -125,7 +121,7 @@ private IEnumerable<SauceNaoDataResult> GetHTMLResults(ImageQuery query)
125121 var docp = new HtmlParser ( ) ;
126122
127123
128- var req = new RestRequest ( SEARCH , Method . POST ) ;
124+ var req = new RestRequest ( "search.php" , Method . POST ) ;
129125
130126 if ( query . IsFile ) {
131127 req . AddFile ( "file" , File . ReadAllBytes ( query . Value ) , "image.png" ) ;
@@ -137,7 +133,7 @@ private IEnumerable<SauceNaoDataResult> GetHTMLResults(ImageQuery query)
137133 throw new SmartImageException ( ) ;
138134 }
139135
140- var execute = m_client . Execute ( req ) ;
136+ var execute = Client . Execute ( req ) ;
141137
142138 string html = execute . Content ;
143139
@@ -225,14 +221,14 @@ private IEnumerable<SauceNaoDataResult> GetAPIResults(ImageQuery url)
225221 {
226222 Trace . WriteLine ( $ "{ Name } | API") ;
227223
228- var req = new RestRequest ( SEARCH ) ;
224+ var req = new RestRequest ( "search.php" ) ;
229225 req . AddQueryParameter ( "db" , "999" ) ;
230226 req . AddQueryParameter ( "output_type" , "2" ) ;
231227 req . AddQueryParameter ( "numres" , "16" ) ;
232228 req . AddQueryParameter ( "api_key" , Authentication ) ;
233229 req . AddQueryParameter ( "url" , url . UploadUri . ToString ( ) ) ;
234230
235- var res = m_client . Execute ( req ) ;
231+ var res = Client . Execute ( req ) ;
236232
237233 if ( res . StatusCode == HttpStatusCode . Forbidden ) {
238234 return null ;
0 commit comments