Skip to content

Commit 92d57a4

Browse files
committed
Feature: Switched away from GetThumbnailAsync API
1 parent 45b2d28 commit 92d57a4

File tree

16 files changed

+61
-154
lines changed

16 files changed

+61
-154
lines changed

src/Files.App/Constants.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,16 +124,13 @@ public static class GridViewBrowser
124124
{
125125
public const int GridViewIncrement = 20;
126126

127-
// Max achievable ctrl + scroll, not a default layout size
128-
public const int GridViewSizeMax = 300;
129-
130127
public const int GridViewSizeLarge = 220;
131128

132129
public const int GridViewSizeMedium = 160;
133130

134131
public const int GridViewSizeSmall = 100;
135132

136-
public const int TilesView = 260;
133+
public const int TilesView = 100;
137134
}
138135

139136
public static class DetailsLayoutBrowser

src/Files.App/Data/Items/DriveItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ public async Task LoadThumbnailAsync(bool isSidebar = false)
324324
else
325325
{
326326
if (!string.IsNullOrEmpty(DeviceID) && !string.Equals(DeviceID, "network-folder"))
327-
IconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(DeviceID, 16);
327+
IconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(DeviceID, 16, false, true);
328328

329329
if (Root is not null)
330330
{

src/Files.App/Data/Models/ItemViewModel.cs

Lines changed: 31 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public GitProperties EnabledGitProperties
8383
(!gitItem.StatusPropertiesInitialized && value is GitProperties.All or GitProperties.Status
8484
|| !gitItem.CommitPropertiesInitialized && value is GitProperties.All or GitProperties.Commit))
8585
{
86-
await LoadGitPropertiesAsync(gitItem);
86+
await LoadGitPropertiesAsync(gitItem);
8787
}
8888
});
8989
}
@@ -944,136 +944,54 @@ private async Task<BitmapImage> GetShieldIcon()
944944
private async Task LoadItemThumbnailAsync(ListedItem item, uint thumbnailSize = 96, IStorageItem? matchingStorageItem = null)
945945
{
946946
var wasIconLoaded = false;
947+
948+
947949
if (item.IsLibrary || item.PrimaryItemAttribute == StorageItemTypes.File || item.IsArchive)
948950
{
949-
if (UserSettingsService.FoldersSettingsService.ShowThumbnails &&
950-
!item.IsShortcut && !item.IsHiddenItem && !FtpHelpers.IsFtpPath(item.ItemPath))
951+
var getIconOnly = UserSettingsService.FoldersSettingsService.ShowThumbnails == false;
952+
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, false, getIconOnly);
953+
if (iconInfo.IconData is not null)
951954
{
952-
var matchingStorageFile = matchingStorageItem?.AsBaseStorageFile() ?? await GetFileFromPathAsync(item.ItemPath);
953-
954-
if (matchingStorageFile is not null)
955+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
955956
{
956-
// SingleItem returns image thumbnails in the correct aspect ratio for the grid layouts
957-
// ListView is used for the details and columns layout
958-
var thumbnailMode = thumbnailSize < 96 ? ThumbnailMode.ListView : ThumbnailMode.SingleItem;
959-
960-
using StorageItemThumbnail Thumbnail = await FilesystemTasks.Wrap(() => matchingStorageFile.GetThumbnailAsync(thumbnailMode, thumbnailSize, ThumbnailOptions.ResizeThumbnail).AsTask());
961-
962-
if (!(Thumbnail is null || Thumbnail.Size == 0 || Thumbnail.OriginalHeight == 0 || Thumbnail.OriginalWidth == 0))
957+
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
958+
if (!string.IsNullOrEmpty(item.FileExtension) &&
959+
!item.IsShortcut && !item.IsExecutable &&
960+
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
963961
{
964-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
965-
{
966-
var img = new BitmapImage();
967-
img.DecodePixelType = DecodePixelType.Logical;
968-
img.DecodePixelWidth = (int)thumbnailSize;
969-
await img.SetSourceAsync(Thumbnail);
970-
item.FileImage = img;
971-
if (!string.IsNullOrEmpty(item.FileExtension) &&
972-
!item.IsShortcut && !item.IsExecutable &&
973-
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
974-
{
975-
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
976-
}
977-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal);
978-
wasIconLoaded = true;
962+
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
979963
}
980-
981-
var overlayInfo = await FileThumbnailHelper.LoadOverlayAsync(item.ItemPath, thumbnailSize);
982-
if (overlayInfo is not null)
983-
{
984-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
985-
{
986-
item.IconOverlay = await overlayInfo.ToBitmapAsync();
987-
item.ShieldIcon = await GetShieldIcon();
988-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
989-
}
990-
}
964+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
991965
}
992966

993-
if (!wasIconLoaded)
967+
if (iconInfo.OverlayData is not null)
994968
{
995-
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, false);
996-
if (iconInfo.IconData is not null)
969+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
997970
{
998-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
999-
{
1000-
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
1001-
if (!string.IsNullOrEmpty(item.FileExtension) &&
1002-
!item.IsShortcut && !item.IsExecutable &&
1003-
!ImagePreviewViewModel.ContainsExtension(item.FileExtension.ToLowerInvariant()))
1004-
{
1005-
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
1006-
}
1007-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1008-
}
1009-
1010-
if (iconInfo.OverlayData is not null)
1011-
{
1012-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1013-
{
1014-
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
1015-
item.ShieldIcon = await GetShieldIcon();
1016-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1017-
}
971+
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
972+
item.ShieldIcon = await GetShieldIcon();
973+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1018974
}
1019975
}
1020976
else
1021977
{
1022-
if (!item.IsShortcut && !item.IsHiddenItem && !FtpHelpers.IsFtpPath(item.ItemPath))
978+
var getIconOnly = UserSettingsService.FoldersSettingsService.ShowThumbnails == false || thumbnailSize < 80;
979+
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, true, getIconOnly);
980+
if (iconInfo.IconData is not null)
1023981
{
1024-
var matchingStorageFolder = matchingStorageItem?.AsBaseStorageFolder() ?? await GetFolderFromPathAsync(item.ItemPath);
1025-
if (matchingStorageFolder is not null)
982+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1026983
{
1027-
// SingleItem returns image thumbnails in the correct aspect ratio for the grid layouts
1028-
// ListView is used for the details and columns layout
1029-
var thumbnailMode = thumbnailSize < 96 ? ThumbnailMode.ListView : ThumbnailMode.SingleItem;
1030-
1031-
// We use ReturnOnlyIfCached because otherwise folders thumbnails have a black background, this has the downside the folder previews don't work
1032-
using StorageItemThumbnail Thumbnail = await FilesystemTasks.Wrap(() => matchingStorageFolder.GetThumbnailAsync(thumbnailMode, thumbnailSize, ThumbnailOptions.ReturnOnlyIfCached).AsTask());
1033-
if (!(Thumbnail is null || Thumbnail.Size == 0 || Thumbnail.OriginalHeight == 0 || Thumbnail.OriginalWidth == 0))
1034-
{
1035-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1036-
{
1037-
var img = new BitmapImage();
1038-
img.DecodePixelType = DecodePixelType.Logical;
1039-
img.DecodePixelWidth = (int)thumbnailSize;
1040-
await img.SetSourceAsync(Thumbnail);
1041-
item.FileImage = img;
1042-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal);
1043-
wasIconLoaded = true;
1044-
}
1045-
1046-
var overlayInfo = await FileThumbnailHelper.LoadOverlayAsync(item.ItemPath, thumbnailSize);
1047-
if (overlayInfo is not null)
1048-
{
1049-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1050-
{
1051-
item.IconOverlay = await overlayInfo.ToBitmapAsync();
1052-
item.ShieldIcon = await GetShieldIcon();
1053-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1054-
}
1055-
}
984+
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
985+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1056986
}
1057987

1058-
if (!wasIconLoaded)
988+
if (iconInfo.OverlayData is not null)
1059989
{
1060-
var iconInfo = await FileThumbnailHelper.LoadIconAndOverlayAsync(item.ItemPath, thumbnailSize, true);
1061-
if (iconInfo.IconData is not null)
990+
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1062991
{
1063-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1064-
{
1065-
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
1066-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1067-
}
1068-
1069-
if (iconInfo.OverlayData is not null)
1070-
{
1071-
await dispatcherQueue.EnqueueOrInvokeAsync(async () =>
1072-
{
1073-
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
1074-
item.ShieldIcon = await GetShieldIcon();
1075-
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1076-
}
992+
item.IconOverlay = await iconInfo.OverlayData.ToBitmapAsync();
993+
item.ShieldIcon = await GetShieldIcon();
994+
}, Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);
1077995
}
1078996
}
1079997
}
@@ -1263,7 +1181,7 @@ public async Task LoadGitPropertiesAsync(GitItem gitItem)
12631181
{
12641182
var getStatus = EnabledGitProperties is GitProperties.All or GitProperties.Status && !gitItem.StatusPropertiesInitialized;
12651183
var getCommit = EnabledGitProperties is GitProperties.All or GitProperties.Commit && !gitItem.CommitPropertiesInitialized;
1266-
1184+
12671185
if (!getStatus && !getCommit)
12681186
return;
12691187

@@ -1331,7 +1249,7 @@ await SafetyExtensions.IgnoreExceptions(() =>
13311249
ImageSource? groupImage = null;
13321250
if (item.PrimaryItemAttribute != StorageItemTypes.Folder || item.IsArchive)
13331251
{
1334-
var headerIconInfo = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(item.ItemPath, 64u, false);
1252+
var headerIconInfo = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(item.ItemPath, 64u, false, true);
13351253

13361254
if (headerIconInfo is not null && !item.IsShortcut)
13371255
groupImage = await dispatcherQueue.EnqueueOrInvokeAsync(() => headerIconInfo.ToBitmapAsync(), Microsoft.UI.Dispatching.DispatcherQueuePriority.Low);

src/Files.App/Data/Models/SidebarPinnedModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public async Task<LocationItem> CreateLocationItemFromPathAsync(string path)
111111

112112
if (locationItem.IconData is null)
113113
{
114-
locationItem.IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(path, 48u);
114+
locationItem.IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(path, 48u, false, true);
115115

116116
if (locationItem.IconData is not null)
117117
locationItem.Icon = await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => locationItem.IconData.ToBitmapAsync());

src/Files.App/Helpers/Layout/LayoutPreferencesManager.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public int GridViewSize
9797
else // Size up from tiles to grid
9898
{
9999
// Set grid size to allow immediate UI update
100-
var newValue = (LayoutMode == FolderLayoutModes.TilesView) ? Constants.Browser.GridViewBrowser.GridViewSizeSmall : (value <= Constants.Browser.GridViewBrowser.GridViewSizeMax) ? value : Constants.Browser.GridViewBrowser.GridViewSizeMax;
100+
var newValue = (LayoutMode == FolderLayoutModes.TilesView) ? Constants.Browser.GridViewBrowser.GridViewSizeSmall : (value <= Constants.Browser.GridViewBrowser.GridViewSizeLarge) ? value : Constants.Browser.GridViewBrowser.GridViewSizeLarge;
101101
SetProperty(ref LayoutPreferencesItem.GridViewSize, newValue, nameof(GridViewSize));
102102

103103
// Only update layout mode if it isn't already in grid view
@@ -113,7 +113,7 @@ public int GridViewSize
113113
}
114114

115115
// Don't request a grid resize if it is already at the max size
116-
if (value < Constants.Browser.GridViewBrowser.GridViewSizeMax)
116+
if (value < Constants.Browser.GridViewBrowser.GridViewSizeLarge)
117117
GridViewSizeChangeRequested?.Invoke(this, EventArgs.Empty);
118118
}
119119
}
@@ -312,14 +312,14 @@ public uint GetIconSize()
312312
FolderLayoutModes.ColumnView
313313
=> Constants.Browser.ColumnViewBrowser.ColumnViewSize,
314314
FolderLayoutModes.TilesView
315-
=> Constants.Browser.GridViewBrowser.GridViewSizeSmall,
315+
=> Constants.Browser.GridViewBrowser.TilesView,
316316
_ when GridViewSize <= Constants.Browser.GridViewBrowser.GridViewSizeSmall
317317
=> Constants.Browser.GridViewBrowser.GridViewSizeSmall,
318318
_ when GridViewSize <= Constants.Browser.GridViewBrowser.GridViewSizeMedium
319319
=> Constants.Browser.GridViewBrowser.GridViewSizeMedium,
320320
_ when GridViewSize <= Constants.Browser.GridViewBrowser.GridViewSizeLarge
321321
=> Constants.Browser.GridViewBrowser.GridViewSizeLarge,
322-
_ => Constants.Browser.GridViewBrowser.GridViewSizeMax,
322+
_ => Constants.Browser.GridViewBrowser.GridViewSizeLarge,
323323
};
324324
}
325325

src/Files.App/Utils/Cloud/CloudDrivesManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static async Task UpdateDrivesAsync()
6363
ShowProperties = true,
6464
};
6565

66-
var iconData = provider.IconData ?? await FileThumbnailHelper.LoadIconWithoutOverlayAsync(provider.SyncFolder, 24);
66+
var iconData = provider.IconData ?? await FileThumbnailHelper.LoadIconWithoutOverlayAsync(provider.SyncFolder, 24, false, true);
6767
if (iconData is not null)
6868
{
6969
cloudProviderItem.IconData = iconData;

src/Files.App/Utils/Library/LibraryLocationItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public async Task<bool> CheckDefaultSaveFolderAccess()
4646

4747
public async Task LoadLibraryIconAsync()
4848
{
49-
IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Path, 24u);
49+
IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Path, 24u, false, true);
5050

5151
if (IconData is not null)
5252
Icon = await IconData.ToBitmapAsync();

src/Files.App/Utils/RecentItem/RecentItem.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,8 @@ public RecentItem(ShellFileItem fileItem) : base()
7676

7777
public async Task LoadRecentItemIconAsync()
7878
{
79-
var iconData = await FileThumbnailHelper.LoadIconFromPathAsync(RecentPath, 96u, ThumbnailMode.SingleItem, ThumbnailOptions.ResizeThumbnail);
80-
if (iconData is null)
81-
{
82-
EmptyImgVis = true;
83-
}
84-
else
79+
var iconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(RecentPath, 96u, false, false);
80+
if (iconData is not null)
8581
{
8682
EmptyImgVis = false;
8783
FileImg = await iconData.ToBitmapAsync();

src/Files.App/Utils/Shell/Win32API.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ private class IconAndOverlayCacheEntry
228228

229229
private static readonly object _lock = new object();
230230

231-
public static (byte[]? icon, byte[]? overlay) GetFileIconAndOverlay(string path, int thumbnailSize, bool isFolder, bool getOverlay = true, bool onlyGetOverlay = false)
231+
public static (byte[]? icon, byte[]? overlay) GetFileIconAndOverlay(string path, int thumbnailSize, bool isFolder, bool getIconOnly, bool getOverlay = true, bool onlyGetOverlay = false)
232232
{
233233
byte[]? iconData = null, overlayData = null;
234234
var entry = _iconAndOverlayCache.GetOrAdd(path, _ => new());
@@ -256,7 +256,9 @@ public static (byte[]? icon, byte[]? overlay) GetFileIconAndOverlay(string path,
256256
if (shellItem is not null && shellItem.IShellItem is Shell32.IShellItemImageFactory fctry)
257257
{
258258
var flags = Shell32.SIIGBF.SIIGBF_BIGGERSIZEOK;
259-
if (thumbnailSize < 80) flags |= Shell32.SIIGBF.SIIGBF_ICONONLY;
259+
260+
if (getIconOnly)
261+
flags |= Shell32.SIIGBF.SIIGBF_ICONONLY;
260262

261263
var hres = fctry.GetImage(new SIZE(thumbnailSize, thumbnailSize), flags, out var hbitmap);
262264
if (hres == HRESULT.S_OK)

src/Files.App/Utils/Storage/Helpers/FileThumbnailHelper.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ namespace Files.App.Utils.Storage
99
{
1010
public static class FileThumbnailHelper
1111
{
12-
public static Task<(byte[] IconData, byte[] OverlayData)> LoadIconAndOverlayAsync(string filePath, uint thumbnailSize, bool isFolder = false)
13-
=> Win32API.StartSTATask(() => Win32API.GetFileIconAndOverlay(filePath, (int)thumbnailSize, isFolder, true, false));
12+
public static Task<(byte[] IconData, byte[] OverlayData)> LoadIconAndOverlayAsync(string filePath, uint thumbnailSize, bool isFolder = false, bool getIconOnly = false)
13+
=> Win32API.StartSTATask(() => Win32API.GetFileIconAndOverlay(filePath, (int)thumbnailSize, isFolder, getIconOnly, true, false));
1414

1515
public static async Task<byte[]> LoadOverlayAsync(string filePath, uint thumbnailSize)
1616
{
17-
return (await Win32API.StartSTATask(() => Win32API.GetFileIconAndOverlay(filePath, (int)thumbnailSize, false, true, true))).overlay;
17+
return (await Win32API.StartSTATask(() => Win32API.GetFileIconAndOverlay(filePath, (int)thumbnailSize, false, false, true, true))).overlay;
1818
}
1919

20-
public static async Task<byte[]> LoadIconWithoutOverlayAsync(string filePath, uint thumbnailSize, bool isFolder = false)
20+
public static async Task<byte[]> LoadIconWithoutOverlayAsync(string filePath, uint thumbnailSize, bool isFolder, bool getIconOnly)
2121
{
22-
return (await Win32API.StartSTATask(() => Win32API.GetFileIconAndOverlay(filePath, (int)thumbnailSize, isFolder, false))).icon;
22+
return (await Win32API.StartSTATask(() => Win32API.GetFileIconAndOverlay(filePath, (int)thumbnailSize, isFolder, getIconOnly, false))).icon;
2323
}
2424

2525
public static async Task<byte[]> LoadIconFromStorageItemAsync(IStorageItem item, uint thumbnailSize, ThumbnailMode thumbnailMode, ThumbnailOptions thumbnailOptions)
@@ -59,7 +59,7 @@ public static async Task<byte[]> LoadIconFromPathAsync(string filePath, uint thu
5959
}
6060
}
6161
}
62-
return await LoadIconWithoutOverlayAsync(filePath, thumbnailSize, isFolder);
62+
return await LoadIconWithoutOverlayAsync(filePath, thumbnailSize, isFolder, false);
6363
}
6464
}
6565
}

src/Files.App/ViewModels/Properties/Items/DriveProperties.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ public async override Task GetSpecialPropertiesAsync()
5656
}
5757
else
5858
{
59-
ViewModel.IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Drive.Path, 80);
59+
ViewModel.IconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Drive.Path, 80, false, false);
6060
}
6161

62-
ViewModel.IconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Drive.DeviceID, 80); // For network shortcuts
62+
ViewModel.IconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Drive.DeviceID, 80, false, false); // For network shortcuts
6363
}
6464

6565
if (diskRoot is null || diskRoot.Properties is null)

src/Files.App/ViewModels/Properties/Items/LibraryProperties.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public async override Task GetSpecialPropertiesAsync()
4949
ViewModel.IsReadOnly = NativeFileOperationsHelper.HasFileAttribute(Library.ItemPath, System.IO.FileAttributes.ReadOnly);
5050
ViewModel.IsHidden = NativeFileOperationsHelper.HasFileAttribute(Library.ItemPath, System.IO.FileAttributes.Hidden);
5151

52-
var fileIconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Library.ItemPath, 80);
52+
var fileIconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Library.ItemPath, 80, false, false);
5353
if (fileIconData is not null)
5454
{
5555
ViewModel.IconData = fileIconData;

src/Files.App/ViewModels/UserControls/Previews/BasePreviewModel.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,12 @@ await Task.Run(async () =>
8484
/// <returns>A list of details</returns>
8585
public async virtual Task<List<FileProperty>> LoadPreviewAndDetailsAsync()
8686
{
87-
var iconData = await FileThumbnailHelper.LoadIconFromStorageItemAsync(Item.ItemFile, 256, ThumbnailMode.SingleItem, ThumbnailOptions.ResizeThumbnail);
88-
89-
iconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Item.ItemPath, 256);
87+
// Requesting sizes larger than 220 may result in a small thumbnail
88+
var iconData = await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Item.ItemPath, 220, false, false);
9089
if (iconData is not null)
91-
{
9290
await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(async () => FileImage = await iconData.ToBitmapAsync());
93-
}
9491
else
95-
{
9692
FileImage ??= await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => new BitmapImage());
97-
}
9893

9994
return new List<FileProperty>();
10095
}

0 commit comments

Comments
 (0)