3131using SmartImage . Lib . Engines ;
3232using SmartImage . Lib . Images . Uni ;
3333using SmartImage . Lib . Results ;
34+ using SmartImage . Lib . Results . Data ;
3435using SmartImage . Lib . Utilities ;
3536
3637// ReSharper disable InconsistentNaming
@@ -162,6 +163,7 @@ public static async ValueTask<IFlurlRequest> BuildRequest(Url u, CancellationTok
162163 return req . WithCookies ( Cookies ) ;
163164 }
164165
166+
165167 public static async Task < List < UniSimilarity > > Analyze ( List < Task < UniImage > > tasks , SearchQuery query ,
166168 CancellationToken ct = default )
167169 {
@@ -170,21 +172,18 @@ public static async Task<List<UniSimilarity>> Analyze(List<Task<UniImage>> tasks
170172 query . Uni . Stream . TrySeek ( ) ;
171173 var rg = new List < UniSimilarity > ( ) ;
172174
173- while ( tasks . Count != 0 )
174- {
175+ while ( tasks . Count != 0 ) {
175176 var task = await Task . WhenAny ( tasks ) ;
176177 tasks . Remove ( task ) ;
177178 var ux = await task ;
178179
179- if ( ux != UniImage . Null && ux . HasImageFormat )
180- {
180+ if ( ux != UniImage . Null && ux . HasImageFormat ) {
181181 var cmp = ph . Hash ( ux . Stream ) ;
182182 var sim = CompareHash . Similarity ( orig , cmp ) ;
183183 rg . Add ( new UniSimilarity ( ux , sim ) ) ;
184184 ux . Stream . TrySeek ( ) ;
185185 }
186- else
187- {
186+ else {
188187 ux . Dispose ( ) ;
189188 ux = null ;
190189 }
@@ -280,31 +279,32 @@ public static async Task<List<Task<UniImage>>> ScanImagesAsync(Url u, Cancellati
280279 autoDisposeOnError : false , ct : ct ) ;
281280
282281
283- if ( uf != UniImage . Null )
284- {
285- if ( uf . HasImageFormat )
286- {
287- tasks = [ Task . FromResult ( uf ) ] ;
282+ if ( uf != UniImage . Null && uf . HasImageFormat ) {
283+ tasks = [ Task . FromResult ( uf ) ] ;
284+
285+ goto ret ;
288286
289- goto ret ;
290- }
291287 }
292- else
293- {
294- stream = uf . Stream ;
295- stream . Position = 0 ;
288+ else {
289+ // stream = uf.Stream;
290+ // stream.Position = 0;
291+ uf . Stream . TrySeek ( ) ;
292+
293+ res = await Client . Request ( u )
294+ . GetAsync ( cancellationToken : ct ) ;
295+ stream = await res . GetStreamAsync ( ) ;
296296 }
297297
298- if ( ! stream . CanRead )
299- {
298+ if ( ! stream . CanRead ) {
300299 stream . Dispose ( ) ;
301300 goto ret ;
302301 }
303302
304- var sr = new StreamReader ( stream , leaveOpen : true /*false*/ ) ;
303+ var sr = new StreamReader ( stream , leaveOpen : /*true*/ false ) ;
305304
306305 string html = await sr . ReadToEndAsync ( ct ) ;
307- var urls = GetImageUrls ( html , u ) ;
306+
307+ var urls = GetImageUrls ( html , u ) ;
308308
309309 tasks = urls . Select ( s =>
310310 {
@@ -361,6 +361,7 @@ await Parallel.ForEachAsync(urls, po, async (s, token) =>
361361 // stream.Dispose(); // todo?
362362 // res.Dispose();
363363
364+ sr . Dispose ( ) ;
364365 ret :
365366 return tasks ;
366367
@@ -376,18 +377,14 @@ public static IEnumerable<string> GetImageUrls(string html, Url url)
376377 Match baseMatch = r_imgHtml . Match ( html ) ;
377378 string baseUrl ;
378379
379- if ( baseMatch . Success )
380- {
380+ if ( baseMatch . Success ) {
381381 baseUrl = baseMatch . Groups [ "url" ] . Value . TrimEnd ( URL_DELIM ) ;
382382 }
383- else
384- {
385- if ( url . ToString ( ) . EndsWith ( URL_DELIM ) )
386- {
383+ else {
384+ if ( url . ToString ( ) . EndsWith ( URL_DELIM ) ) {
387385 baseUrl = url . ToString ( ) . TrimEnd ( URL_DELIM ) ;
388386 }
389- else
390- {
387+ else {
391388 baseUrl = Url . Parse ( url ) ; //todo
392389
393390 // or Path.GetDirectoryName?
@@ -445,8 +442,7 @@ await Parallel.ForEachAsync(s2, ct, async (s1, token) =>
445442 {
446443 var uni = await UniImage . TryCreateAsync ( s1 , ct : token ) ;
447444
448- if ( uni != null )
449- {
445+ if ( uni != null ) {
450446 rg . Add ( uni ) ;
451447 }
452448
0 commit comments