@@ -20,7 +20,7 @@ namespace SmartImage.Lib.Searching
2020 /// <summary>
2121 /// Describes an image search result
2222 /// </summary>
23- public sealed class ImageResult
23+ public sealed class ImageResult : IViewable
2424 {
2525 /// <summary>
2626 /// Result url
@@ -142,15 +142,16 @@ public int DetailScore
142142 * The number of non-null fields
143143 */
144144
145- int s = DetailFields . Select ( f => f . GetValue ( this ) ) . Count ( v => v != null ) ;
145+ int s = DetailFields . Select ( f => f . GetValue ( this ) )
146+ . Count ( v => v != null ) ;
146147
147148 s += OtherMetadata . Count ;
148149
149150 return s ;
150151 }
151152 }
152153
153- public bool IsDetailed => DetailScore >= ( DetailFields . Count * .5 ) ;
154+ public bool IsDetailed => DetailScore >= DetailFields . Count * .5 ;
154155
155156 /// <summary>
156157 /// The display resolution of this image
@@ -199,7 +200,7 @@ public async void FindDirectImagesAsync()
199200 else {
200201 try {
201202
202- var directImages = await ImageHelper . FindDirectImagesAsync ( Url . ToString ( ) ) ;
203+ string [ ] ? directImages = await ImageHelper . FindDirectImagesAsync ( Url . ToString ( ) ) ;
203204
204205 if ( directImages is { } ) {
205206 string ? images = directImages . FirstOrDefault ( ) ;
@@ -238,57 +239,61 @@ private void ReadDirectImageData()
238239 Width = image . Width ;
239240 Height = image . Height ;
240241
241- stream . Position = 0 ;
242- using var ms = new MemoryStream ( ) ;
243- stream . CopyTo ( ms ) ;
244- var rg = ms . ToArray ( ) ;
242+ byte [ ] rg = stream . ToByteArray ( ) ;
245243
246244 OtherMetadata . Add ( "Size" , MathHelper . ConvertToUnit ( rg . Length ) ) ;
247245 OtherMetadata . Add ( "Mime" , MediaTypes . ResolveFromData ( stream ) ) ;
248246 }
249247 }
250248
251- public string ToString ( bool indent )
249+
250+ public override string ToString ( ) => Strings . ViewString ( this ) ;
251+
252+ public Dictionary < string , object > View
252253 {
253- var sb = new ExtendedStringBuilder ( ) { } ;
254+ get
255+ {
256+ #pragma warning disable CS8604
257+ var map = new Dictionary < string , object >
258+ {
259+ { nameof ( Url ) , Url } ,
260+ { nameof ( Direct ) , Direct }
261+ } ;
254262
255- sb . Append ( nameof ( Url ) , Url ) ;
256- sb . Append ( nameof ( Direct ) , Direct ) ;
257263
258- if ( Similarity . HasValue ) {
259- sb . Append ( $ "{ nameof ( Similarity ) } ", $ "{ Similarity . Value / 100 : P} ") ;
260- }
264+ if ( Similarity . HasValue ) {
265+ map . Add ( $ "{ nameof ( Similarity ) } ", $ "{ Similarity . Value / 100 : P} ") ;
266+ }
261267
262- if ( HasImageDimensions ) {
263- string val = $ "{ Width } x{ Height } ({ MegapixelResolution : F} MP)";
268+ if ( HasImageDimensions ) {
269+ string val = $ "{ Width } x{ Height } ({ MegapixelResolution : F} MP)";
264270
265- var resType = DisplayResolution ;
271+ var resType = DisplayResolution ;
266272
267- if ( resType != DisplayResolutionType . Unknown ) {
268- val += ( $ " (~{ resType } )") ;
269- }
273+ if ( resType != DisplayResolutionType . Unknown ) {
274+ val += ( $ " (~{ resType } )") ;
275+ }
270276
271- sb . Append ( $ "Resolution", val ) ;
272- }
277+ map . Add ( "Resolution" , val ) ;
278+ }
273279
274- sb . Append ( nameof ( Name ) , Name ) ;
275- sb . Append ( nameof ( Description ) , Description ) ;
276- sb . Append ( nameof ( Artist ) , Artist ) ;
277- sb . Append ( nameof ( Site ) , Site ) ;
278- sb . Append ( nameof ( Source ) , Source ) ;
279- sb . Append ( nameof ( Characters ) , Characters ) ;
280+ map . Add ( nameof ( Name ) , Name ) ;
281+ map . Add ( nameof ( Description ) , Description ) ;
282+ map . Add ( nameof ( Artist ) , Artist ) ;
283+ map . Add ( nameof ( Site ) , Site ) ;
284+ map . Add ( nameof ( Source ) , Source ) ;
285+ map . Add ( nameof ( Characters ) , Characters ) ;
280286
281- foreach ( var ( key , value ) in OtherMetadata ) {
282- sb . Append ( key , value ) ;
283- }
287+ foreach ( var ( key , value ) in OtherMetadata ) {
288+ map . Add ( key , value ) ;
289+ }
284290
285- sb . Append ( $ "Detail score", $ "{ DetailScore } /{ DetailFields . Count } ({ ( IsDetailed ? "Y" : "N" ) } )") ;
291+ map . Add ( "Detail score" , $ "{ DetailScore } /{ DetailFields . Count } ({ ( IsDetailed ? "Y" : "N" ) } )") ;
286292
287- var xs = sb . ToString ( ) . RemoveLastOccurrence ( " \n " ) ;
293+ #pragma warning restore CS8604
288294
289- return indent ? Strings . Indent ( xs ) : xs ;
295+ return map ;
296+ }
290297 }
291-
292- public override string ToString ( ) => ToString ( false ) ;
293298 }
294299}
0 commit comments