@@ -483,23 +483,6 @@ public async void LoadExtendedItemProperties(ListedItem item, uint thumbnailSize
483483 matchingItem . LoadFileIcon = true ;
484484 }
485485 }
486- if ( App . Connection != null )
487- {
488- var value = new ValueSet ( ) ;
489- value . Add ( "Arguments" , "GetIconOverlay" ) ;
490- value . Add ( "filePath" , matchingItem . ItemPath ) ;
491- var response = await App . Connection . SendMessageAsync ( value ) ;
492- var iconOverlay = response . Message . Get ( "IconOverlay" , ( string ) null ) ;
493- if ( iconOverlay != null )
494- {
495- matchingItem . IconOverlay = new BitmapImage ( ) ;
496- byte [ ] bitmapData = Convert . FromBase64String ( iconOverlay ) ;
497- using ( var ms = new MemoryStream ( bitmapData ) )
498- {
499- await matchingItem . IconOverlay . SetSourceAsync ( ms . AsRandomAccessStream ( ) ) ;
500- }
501- }
502- }
503486 if ( item . IsShortcutItem )
504487 {
505488 // Reset cloud sync status icon
@@ -511,6 +494,7 @@ public async void LoadExtendedItemProperties(ListedItem item, uint thumbnailSize
511494 matchingItem . ItemType = matchingStorageItem . DisplayType ;
512495 var syncStatus = await CheckCloudDriveSyncStatus ( matchingStorageItem ) ;
513496 matchingItem . SyncStatusUI = CloudDriveSyncStatusUI . FromCloudDriveSyncStatus ( syncStatus ) ;
497+ matchingItem . IconOverlay = ( await LoadIconOverlay ( matchingItem . ItemPath ) ) . Icon ;
514498 }
515499 }
516500 }
@@ -533,44 +517,35 @@ public async void LoadExtendedItemProperties(ListedItem item, uint thumbnailSize
533517 StorageFolder matchingStorageItem = await StorageFileExtensions . GetFolderFromPathAsync ( ( item as ShortcutItem ) ? . TargetPath ?? item . ItemPath , _workingRoot , _currentStorageFolder ) ;
534518 if ( matchingItem != null && matchingStorageItem != null )
535519 {
536- if ( App . Connection != null )
520+ var iconOverlay = await LoadIconOverlay ( matchingItem . ItemPath ) ;
521+ if ( iconOverlay . IsCustom )
537522 {
538- var value = new ValueSet ( ) ;
539- value . Add ( "Arguments" , "GetIconOverlay" ) ;
540- value . Add ( "filePath" , matchingItem . ItemPath ) ;
541- var response = await App . Connection . SendMessageAsync ( value ) ;
542- var hasCustomIcon = ( response . Status == Windows . ApplicationModel . AppService . AppServiceResponseStatus . Success )
543- && response . Message . Get ( "HasCustomIcon" , false ) ;
544- if ( hasCustomIcon )
523+ // Only set folder icon if it's a custom icon
524+ using ( var Thumbnail = await matchingStorageItem . GetThumbnailAsync ( ThumbnailMode . SingleItem , thumbnailSize , ThumbnailOptions . UseCurrentScale ) )
545525 {
546- // Only set folder icon if it's a custom icon
547- using ( var Thumbnail = await matchingStorageItem . GetThumbnailAsync ( ThumbnailMode . SingleItem , thumbnailSize , ThumbnailOptions . UseCurrentScale ) )
526+ if ( Thumbnail != null )
548527 {
549- if ( Thumbnail != null )
550- {
551- matchingItem . FileImage = new BitmapImage ( ) ;
552- await matchingItem . FileImage . SetSourceAsync ( Thumbnail ) ;
553- matchingItem . LoadUnknownTypeGlyph = false ;
554- matchingItem . LoadFolderGlyph = false ;
555- matchingItem . LoadFileIcon = true ;
556- }
557- }
558- }
559- var iconOverlay = response . Message . Get ( "IconOverlay" , ( string ) null ) ;
560- if ( iconOverlay != null )
561- {
562- matchingItem . IconOverlay = new BitmapImage ( ) ;
563- byte [ ] bitmapData = Convert . FromBase64String ( iconOverlay ) ;
564- using ( var ms = new MemoryStream ( bitmapData ) )
565- {
566- await matchingItem . IconOverlay . SetSourceAsync ( ms . AsRandomAccessStream ( ) ) ;
528+ matchingItem . FileImage = new BitmapImage ( ) ;
529+ await matchingItem . FileImage . SetSourceAsync ( Thumbnail ) ;
530+ matchingItem . LoadUnknownTypeGlyph = false ;
531+ matchingItem . LoadFolderGlyph = false ;
532+ matchingItem . LoadFileIcon = true ;
567533 }
568534 }
569535 }
570- matchingItem . FolderRelativeId = matchingStorageItem . FolderRelativeId ;
571- matchingItem . ItemType = matchingStorageItem . DisplayType ;
572- var syncStatus = await CheckCloudDriveSyncStatus ( matchingStorageItem ) ;
573- matchingItem . SyncStatusUI = CloudDriveSyncStatusUI . FromCloudDriveSyncStatus ( syncStatus ) ;
536+ if ( item . IsShortcutItem )
537+ {
538+ // Reset cloud sync status icon
539+ matchingItem . SyncStatusUI = new CloudDriveSyncStatusUI ( ) { LoadSyncStatus = false } ;
540+ }
541+ else
542+ {
543+ matchingItem . FolderRelativeId = matchingStorageItem . FolderRelativeId ;
544+ matchingItem . ItemType = matchingStorageItem . DisplayType ;
545+ var syncStatus = await CheckCloudDriveSyncStatus ( matchingStorageItem ) ;
546+ matchingItem . SyncStatusUI = CloudDriveSyncStatusUI . FromCloudDriveSyncStatus ( syncStatus ) ;
547+ matchingItem . IconOverlay = iconOverlay . Icon ;
548+ }
574549 }
575550 }
576551 catch ( Exception )
@@ -589,6 +564,32 @@ public async void LoadExtendedItemProperties(ListedItem item, uint thumbnailSize
589564 }
590565 }
591566
567+ private async Task < ( BitmapImage Icon , bool IsCustom ) > LoadIconOverlay ( string filePath )
568+ {
569+ if ( App . Connection != null )
570+ {
571+ var value = new ValueSet ( ) ;
572+ value . Add ( "Arguments" , "GetIconOverlay" ) ;
573+ value . Add ( "filePath" , filePath ) ;
574+ var response = await App . Connection . SendMessageAsync ( value ) ;
575+ var hasCustomIcon = ( response . Status == Windows . ApplicationModel . AppService . AppServiceResponseStatus . Success )
576+ && response . Message . Get ( "HasCustomIcon" , false ) ;
577+ var iconOverlay = response . Message . Get ( "IconOverlay" , ( string ) null ) ;
578+ if ( iconOverlay != null )
579+ {
580+ var image = new BitmapImage ( ) ;
581+ byte [ ] bitmapData = Convert . FromBase64String ( iconOverlay ) ;
582+ using ( var ms = new MemoryStream ( bitmapData ) )
583+ {
584+ await image . SetSourceAsync ( ms . AsRandomAccessStream ( ) ) ;
585+ }
586+ return ( image , hasCustomIcon ) ;
587+ }
588+ return ( null , hasCustomIcon ) ;
589+ }
590+ return ( null , false ) ;
591+ }
592+
592593 public void RefreshItems ( )
593594 {
594595 AddItemsToCollectionAsync ( WorkingDirectory ) ;
0 commit comments