@@ -900,29 +900,6 @@ public void UpdateGroupOptions()
900
900
FilesAndFolders . GetExtendedGroupHeaderInfo = groupInfoSelector . Item2 ;
901
901
}
902
902
903
- public Dictionary < string , BitmapImage > DefaultIcons = new ( ) ;
904
-
905
- private uint currentDefaultIconSize = 0 ;
906
-
907
- public async Task GetDefaultItemIconsAsync ( uint size )
908
- {
909
- if ( currentDefaultIconSize == size )
910
- return ;
911
-
912
- DefaultIcons . Clear ( ) ;
913
-
914
- // TODO: Add more than just the folder icon
915
- using StorageItemThumbnail icon = await FilesystemTasks . Wrap ( ( ) => StorageItemIconHelpers . GetIconForItemType ( size , IconPersistenceOptions . Persist ) ) ;
916
- if ( icon is not null )
917
- {
918
- var img = new BitmapImage ( ) ;
919
- await img . SetSourceAsync ( icon ) ;
920
- DefaultIcons . Add ( string . Empty , img ) ;
921
- }
922
-
923
- currentDefaultIconSize = size ;
924
- }
925
-
926
903
private bool isLoadingItems = false ;
927
904
public bool IsLoadingItems
928
905
{
@@ -937,117 +914,40 @@ private async Task<BitmapImage> GetShieldIcon()
937
914
return shieldIcon ;
938
915
}
939
916
940
- private async Task LoadItemThumbnailAsync ( ListedItem item )
917
+ private async Task LoadThumbnailAsync ( ListedItem item )
941
918
{
919
+ // Cancel if thumbnails aren't enabled
942
920
var thumbnailSize = folderSettings . GetRoundedIconSize ( ) ;
921
+ var returnIconOnly = UserSettingsService . FoldersSettingsService . ShowThumbnails == false || thumbnailSize < 48 ;
943
922
944
- if ( item . IsLibrary || item . PrimaryItemAttribute == StorageItemTypes . File || item . IsArchive )
945
- {
946
- var getIconOnly = UserSettingsService . FoldersSettingsService . ShowThumbnails == false || thumbnailSize < 48 ;
947
- var getThumbnailOnly = ! item . IsExecutable && ! getIconOnly ;
948
- var iconInfo = await FileThumbnailHelper . GetIconAsync (
923
+ // Get thumbnail
924
+ var icon = await FileThumbnailHelper . GetIconAsync (
949
925
item . ItemPath ,
950
926
thumbnailSize ,
927
+ item . IsFolder ,
951
928
false ,
952
- getThumbnailOnly ,
953
- getIconOnly ? IconOptions . ReturnIconOnly : IconOptions . None ) ;
954
-
955
- if ( ! iconInfo . isIconCached )
956
- {
957
- // Assign a placeholder icon while trying to get a cached thumbnail
958
- if ( iconInfo . IconData is not null )
959
- {
960
- await dispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
961
- {
962
- item . FileImage = await iconInfo . IconData . ToBitmapAsync ( ) ;
963
- } , Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
964
- }
965
-
966
- // Loop until cached thumbnail is loaded or timeout is reached
967
- var cancellationTokenSource = new CancellationTokenSource ( 3000 ) ;
968
- while ( ! iconInfo . isIconCached )
969
- {
970
- iconInfo = await FileThumbnailHelper . GetIconAsync (
971
- item . ItemPath ,
972
- thumbnailSize ,
973
- false ,
974
- getThumbnailOnly ,
975
- getIconOnly ? IconOptions . ReturnIconOnly : IconOptions . None ) ;
976
-
977
- if ( cancellationTokenSource . Token . IsCancellationRequested )
978
- break ;
979
-
980
- await Task . Delay ( 500 ) ;
981
- }
982
- }
929
+ returnIconOnly ? IconOptions . ReturnIconOnly : IconOptions . None ) ;
983
930
984
- if ( iconInfo . IconData is not null )
985
- {
986
- await dispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
987
- {
988
- // Assign the thumbnail/icon to the listed item
989
- item . FileImage = await iconInfo . IconData . ToBitmapAsync ( ) ;
990
-
991
- // Add the file icon to the DefaultIcons list
992
- if
993
- (
994
- ! DefaultIcons . ContainsKey ( item . FileExtension . ToLowerInvariant ( ) ) &&
995
- ! string . IsNullOrEmpty ( item . FileExtension ) &&
996
- ! item . IsShortcut &&
997
- ! item . IsExecutable
998
- )
999
- {
1000
- var fileIcon = await FileThumbnailHelper . GetIconAsync (
1001
- item . ItemPath ,
1002
- thumbnailSize ,
1003
- false ,
1004
- false ,
1005
- IconOptions . ReturnIconOnly ) ;
1006
-
1007
- var bitmapImage = await fileIcon . IconData . ToBitmapAsync ( ) ;
1008
- DefaultIcons . TryAdd ( item . FileExtension . ToLowerInvariant ( ) , bitmapImage ) ;
1009
- }
1010
-
1011
- } , Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
1012
- }
1013
-
1014
- var iconOverlay = await FileThumbnailHelper . GetIconOverlayAsync ( item . ItemPath , false ) ;
1015
- if ( iconOverlay is not null )
1016
- {
1017
- // Assign the icon overlay to the listed item
1018
- await dispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
1019
- {
1020
- item . IconOverlay = await iconOverlay . ToBitmapAsync ( ) ;
1021
- item . ShieldIcon = await GetShieldIcon ( ) ;
1022
- } , Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
1023
- }
1024
- }
1025
- else
931
+ if ( icon . IconData is not null )
1026
932
{
1027
- var getIconOnly = UserSettingsService . FoldersSettingsService . ShowThumbnails == false || thumbnailSize < 48 ;
1028
- var iconInfo = await FileThumbnailHelper . GetIconAsync (
1029
- item . ItemPath ,
1030
- thumbnailSize ,
1031
- true ,
1032
- false , getIconOnly ? IconOptions . ReturnIconOnly : IconOptions . None ) ;
1033
-
1034
- if ( iconInfo . IconData is not null )
933
+ await dispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
1035
934
{
1036
- await dispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
1037
- {
1038
- item . FileImage = await iconInfo . IconData . ToBitmapAsync ( ) ;
1039
- } , Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
1040
- }
935
+ // Assign FileImage property
936
+ var image = await icon . IconData . ToBitmapAsync ( ) ;
937
+ if ( image is not null )
938
+ item . FileImage = image ;
939
+ } , Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
940
+ }
1041
941
1042
- var iconOverlay = await FileThumbnailHelper . GetIconOverlayAsync ( item . ItemPath , true ) ;
1043
- if ( iconOverlay is not null )
942
+ // Get icon overlay
943
+ var iconOverlay = await FileThumbnailHelper . GetIconOverlayAsync ( item . ItemPath , true ) ;
944
+ if ( iconOverlay is not null )
945
+ {
946
+ await dispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
1044
947
{
1045
- await dispatcherQueue . EnqueueOrInvokeAsync ( async ( ) =>
1046
- {
1047
- item . IconOverlay = await iconOverlay . ToBitmapAsync ( ) ;
1048
- item . ShieldIcon = await GetShieldIcon ( ) ;
1049
- } , Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
1050
- }
948
+ item . IconOverlay = await iconOverlay . ToBitmapAsync ( ) ;
949
+ item . ShieldIcon = await GetShieldIcon ( ) ;
950
+ } , Microsoft . UI . Dispatching . DispatcherQueuePriority . Low ) ;
1051
951
}
1052
952
}
1053
953
@@ -1092,7 +992,7 @@ await Task.Run(async () =>
1092
992
}
1093
993
1094
994
cts . Token . ThrowIfCancellationRequested ( ) ;
1095
- _ = LoadItemThumbnailAsync ( item ) ;
995
+ _ = LoadThumbnailAsync ( item ) ;
1096
996
1097
997
if ( item . IsLibrary || item . PrimaryItemAttribute == StorageItemTypes . File || item . IsArchive )
1098
998
{
@@ -1198,6 +1098,17 @@ await dispatcherQueue.EnqueueOrInvokeAsync(() =>
1198
1098
SetFileTag ( item ) ;
1199
1099
} ) ;
1200
1100
}
1101
+ else
1102
+ {
1103
+ // Try loading thumbnail for cloud files in case they weren't cached the first time
1104
+ if ( item . SyncStatusUI . SyncStatus != CloudDriveSyncStatus . NotSynced && item . SyncStatusUI . SyncStatus != CloudDriveSyncStatus . Unknown )
1105
+ {
1106
+ _ = Task . Run ( async ( ) => {
1107
+ await Task . Delay ( 500 ) ;
1108
+ await LoadThumbnailAsync ( item ) ;
1109
+ } ) ;
1110
+ }
1111
+ }
1201
1112
1202
1113
if ( loadGroupHeaderInfo )
1203
1114
{
@@ -1473,8 +1384,6 @@ private async Task RapidAddItemsToCollectionAsync(string? path, LibraryItem? lib
1473
1384
break ;
1474
1385
}
1475
1386
1476
- await GetDefaultItemIconsAsync ( folderSettings . GetRoundedIconSize ( ) ) ;
1477
-
1478
1387
if ( IsLoadingCancelled )
1479
1388
{
1480
1389
IsLoadingCancelled = false ;
@@ -1693,7 +1602,7 @@ await Task.Run(async () =>
1693
1602
filesAndFolders . AddRange ( intermediateList ) ;
1694
1603
await OrderFilesAndFoldersAsync ( ) ;
1695
1604
await ApplyFilesAndFoldersChangesAsync ( ) ;
1696
- } , defaultIconPairs : DefaultIcons ) ;
1605
+ } ) ;
1697
1606
1698
1607
filesAndFolders . AddRange ( fileList ) ;
1699
1608
@@ -1741,8 +1650,7 @@ await Task.Run(async () =>
1741
1650
1742
1651
await OrderFilesAndFoldersAsync ( ) ;
1743
1652
await ApplyFilesAndFoldersChangesAsync ( ) ;
1744
- } ,
1745
- defaultIconPairs : DefaultIcons ) ;
1653
+ } ) ;
1746
1654
1747
1655
filesAndFolders . AddRange ( finalList ) ;
1748
1656
@@ -2481,7 +2389,6 @@ public void Dispose()
2481
2389
fileTagsSettingsService . OnSettingImportedEvent -= FileTagsSettingsService_OnSettingUpdated ;
2482
2390
fileTagsSettingsService . OnTagsUpdated -= FileTagsSettingsService_OnSettingUpdated ;
2483
2391
folderSizeProvider . SizeChanged -= FolderSizeProvider_SizeChanged ;
2484
- DefaultIcons . Clear ( ) ;
2485
2392
}
2486
2393
}
2487
2394
0 commit comments