44global using R1 = SmartImage . Lib . Resources ;
55global using Url = Flurl . Url ;
66using System . Diagnostics ;
7+ using System . Net . Http . Headers ;
78using Flurl . Http ;
89using Kantan . Diagnostics ;
910using Kantan . Net . Utilities ;
1011using Microsoft . Extensions . Logging ;
12+ using Microsoft . Net . Http . Headers ;
1113using SmartImage . Lib . Engines . Impl . Search ;
1214using SmartImage . Lib . Engines . Impl . Search . Other ;
1315using SmartImage . Lib . Results ;
1719namespace SmartImage . Lib . Engines ;
1820#nullable enable
1921
22+
23+ public interface ISearchQueryVerifiable
24+ {
25+
26+ public ValueTask < bool > VerifyQueryAsync ( SearchQuery query ) ;
27+
28+ }
29+
2030public abstract class BaseSearchEngine : IDisposable , IEquatable < BaseSearchEngine >
2131{
2232
2333 static BaseSearchEngine ( )
2434 {
2535 Client = ( FlurlClient ) FlurlHttp . Clients . GetOrAdd ( nameof ( BaseSearchEngine ) , null , builder =>
2636 {
27- builder . Headers . AddOrReplace ( "User-Agent" , HttpUtilities . UserAgent ) ;
37+
38+ builder . Headers . AddOrReplace ( HeaderNames . UserAgent , HttpUtilities . UserAgent ) ;
2839
2940 // builder.Settings.JsonSerializer = new DefaultJsonSerializer();
3041
@@ -41,11 +52,9 @@ static BaseSearchEngine()
4152 } ) ;
4253 }
4354
44- protected BaseSearchEngine ( Url baseUrl , Url ? endpoint = null )
55+ protected BaseSearchEngine ( [ NN ] Url baseUrl )
4556 {
46- BaseUrl = baseUrl ;
47- EndpointUrl = endpoint ;
48- MaxSize = null ;
57+ BaseUrl = baseUrl ;
4958 }
5059
5160 protected static readonly ILogger Logger = AppSupport . Factory . CreateLogger ( nameof ( BaseSearchEngine ) ) ;
@@ -61,12 +70,13 @@ protected BaseSearchEngine(Url baseUrl, Url? endpoint = null)
6170 /// </summary>
6271 public virtual string Name => EngineOption . ToString ( ) ;
6372
73+ /// <summary>
74+ /// Base URI
75+ /// </summary>
6476 public virtual Url BaseUrl { get ; }
6577
6678 [ JI ]
67- public TimeSpan Timeout { get ; set ; } = TimeSpan . FromSeconds ( 15 ) ;
68-
69- public Url ? EndpointUrl { get ; }
79+ public virtual TimeSpan Timeout { get ; set ; } = TimeSpan . FromSeconds ( 15 ) ;
7080
7181 [ JI ]
7282 protected long ? MaxSize { get ; set ; }
@@ -131,45 +141,49 @@ public static IEnumerable<BaseSearchEngine> GetSelectedEngines(SearchEngineOptio
131141
132142 }
133143
134- public virtual async Task < SearchResult > GetResultAsync ( SearchQuery query , CancellationToken token = default )
144+ /* public Task<SearchResult> GetTaskAsync (SearchQuery query, CancellationToken token = default)
135145 {
136- var b = await VerifyQueryAsync ( query ) ;
146+ // TODO
137147
138- /*
139- if (!b) {
140- // throw new SmartImageException($"{query}");
141- Debug.WriteLine($"{query} : Verification error", LogCategories.C_ERROR);
148+ Task ops;
149+ if (this is ISearchQueryVerifiable sq) {
150+ ops = sq.VerifyQueryAsync(query);
142151 }
143- */
152+
153+ var task = GetResultAsync(query, token);
154+
155+ }*/
156+
157+ public virtual async Task < SearchResult > GetResultAsync ( SearchQuery query , CancellationToken token = default )
158+ {
159+ var b = await TryVerifyQueryAsync ( query ) ;
144160
145161 var srs = b ? SearchResultStatus . None : SearchResultStatus . IllegalInput ;
146162
147163 var res = new SearchResult ( this )
148164 {
149- RawUrl = GetRawUrl ( query ) ,
150- ErrorMessage = null ,
151- Status = srs
165+ RawUrl = GetRawUrl ( query ) ,
166+ Status = srs
152167 } ;
153168
154169 lock ( res . Results ) {
155170 res . Results . Add ( res . RawResultItem ) ;
156171 }
157172
158- Debug . WriteLine ( $ "{ Name } | { query } - { res . Status } ", LogCategories . C_INFO ) ;
159-
173+ Logger . LogInformation ( "{Engine} with {Query} returned {Status}" , Name , query , res . Status ) ;
160174 return res ;
161175 }
162176
163177
164178 protected virtual Url GetRawUrl ( SearchQuery query )
165179 {
166180 //
167- Url u = ( ( BaseUrl + query . Upload ) ) ;
181+ Url u = ( BaseUrl + query . Upload ) ;
168182
169183 return u ;
170184 }
171185
172- public virtual ValueTask < bool > VerifyQueryAsync ( SearchQuery q )
186+ public virtual ValueTask < bool > TryVerifyQueryAsync ( SearchQuery q )
173187 {
174188 bool b = true ;
175189
@@ -230,13 +244,9 @@ public bool Equals(BaseSearchEngine? other)
230244 }
231245
232246 public static bool operator == ( BaseSearchEngine ? left , BaseSearchEngine ? right )
233- {
234- return Equals ( left , right ) ;
235- }
247+ => Equals ( left , right ) ;
236248
237249 public static bool operator != ( BaseSearchEngine ? left , BaseSearchEngine ? right )
238- {
239- return ! Equals ( left , right ) ;
240- }
250+ => ! Equals ( left , right ) ;
241251
242252}
0 commit comments