Skip to content

Fixed image thumbnails not appearing #7881

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jan 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 13 additions & 11 deletions src/Files/ViewModels/ItemViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -797,12 +797,14 @@ public async Task GetDefaultItemIcons(uint size)
if (currentDefaultIconSize != size)
{
// TODO: Add more than just the folder icon

DefaultIcons.Clear();
BitmapImage img = new BitmapImage();
using var icon = await StorageItemIconHelpers.GetIconForItemType(size, IconPersistenceOptions.Persist);
await img.SetSourceAsync(icon);
DefaultIcons.Add(string.Empty, img);
using StorageItemThumbnail icon = await FilesystemTasks.Wrap(() => StorageItemIconHelpers.GetIconForItemType(size, IconPersistenceOptions.Persist));
if (icon != null)
{
BitmapImage img = new BitmapImage();
await img.SetSourceAsync(icon);
DefaultIcons.Add(string.Empty, img);
}
currentDefaultIconSize = size;
}
}
Expand Down Expand Up @@ -831,9 +833,9 @@ private async Task LoadItemThumbnail(ListedItem item, uint thumbnailSize = 20, I
var matchingStorageFile = matchingStorageItem.AsBaseStorageFile() ?? await GetFileFromPathAsync(item.ItemPath);
if (matchingStorageFile != null)
{
var mode = thumbnailSize < 80 ? ThumbnailMode.ListView : ThumbnailMode.SingleItem;
var mode = thumbnailSize < 80 ? ThumbnailMode.ListView : ThumbnailMode.DocumentsView;

using var Thumbnail = await matchingStorageFile.GetThumbnailAsync(mode, thumbnailSize, ThumbnailOptions.ResizeThumbnail);
using StorageItemThumbnail Thumbnail = await FilesystemTasks.Wrap(() => matchingStorageFile.GetThumbnailAsync(mode, thumbnailSize, ThumbnailOptions.ResizeThumbnail).AsTask());
if (!(Thumbnail == null || Thumbnail.Size == 0 || Thumbnail.OriginalHeight == 0 || Thumbnail.OriginalWidth == 0))
{
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(async () =>
Expand All @@ -844,7 +846,7 @@ await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(async () =>
await item.FileImage.SetSourceAsync(Thumbnail);
if (!string.IsNullOrEmpty(item.FileExtension) &&
!item.IsShortcutItem && !item.IsExecutable &&
!ImagePreviewViewModel.Extensions.Contains(item.FileExtension))
!ImagePreviewViewModel.Extensions.Contains(item.FileExtension, StringComparer.OrdinalIgnoreCase))
{
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
}
Expand Down Expand Up @@ -873,7 +875,7 @@ await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(async () =>
item.FileImage = await iconInfo.IconData.ToBitmapAsync();
if (!string.IsNullOrEmpty(item.FileExtension) &&
!item.IsShortcutItem && !item.IsExecutable &&
!ImagePreviewViewModel.Extensions.Contains(item.FileExtension))
!ImagePreviewViewModel.Extensions.Contains(item.FileExtension, StringComparer.OrdinalIgnoreCase))
{
DefaultIcons.AddIfNotPresent(item.FileExtension.ToLowerInvariant(), item.FileImage);
}
Expand All @@ -898,7 +900,7 @@ await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(async () =>
{
var mode = thumbnailSize < 80 ? ThumbnailMode.ListView : ThumbnailMode.SingleItem;

using var Thumbnail = await matchingStorageFolder.GetThumbnailAsync(mode, thumbnailSize, ThumbnailOptions.ResizeThumbnail);
using StorageItemThumbnail Thumbnail = await FilesystemTasks.Wrap(() => matchingStorageFolder.GetThumbnailAsync(mode, thumbnailSize, ThumbnailOptions.ResizeThumbnail).AsTask());
if (!(Thumbnail == null || Thumbnail.Size == 0 || Thumbnail.OriginalHeight == 0 || Thumbnail.OriginalWidth == 0))
{
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(async () =>
Expand Down Expand Up @@ -1130,7 +1132,7 @@ private async Task<ImageSource> GetItemTypeGroupIcon(ListedItem item, BaseStorag

if (matchingStorageItem != null)
{
using var headerThumbnail = await matchingStorageItem.GetThumbnailAsync(ThumbnailMode.DocumentsView, 36, ThumbnailOptions.UseCurrentScale);
using StorageItemThumbnail headerThumbnail = await FilesystemTasks.Wrap(() => matchingStorageItem.GetThumbnailAsync(ThumbnailMode.DocumentsView, 36, ThumbnailOptions.UseCurrentScale).AsTask());
if (headerThumbnail != null)
{
await CoreApplication.MainView.DispatcherQueue.EnqueueAsync(async () =>
Expand Down
8 changes: 6 additions & 2 deletions src/Files/ViewModels/Previews/BasePreviewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public virtual void PreviewControlBase_Unloaded(object sender, RoutedEventArgs e
/// <returns>A list of details</returns>
public async virtual Task<List<FileProperty>> LoadPreviewAndDetails()
{
var iconData = await FileThumbnailHelper.LoadIconFromStorageItemAsync(Item.ItemFile, 400, ThumbnailMode.SingleItem);
var iconData = await FileThumbnailHelper.LoadIconFromStorageItemAsync(Item.ItemFile, 400, ThumbnailMode.DocumentsView);
iconData ??= await FileThumbnailHelper.LoadIconWithoutOverlayAsync(Item.ItemPath, 400);
if (iconData != null)
{
Expand Down Expand Up @@ -110,7 +110,11 @@ private async Task<List<FileProperty>> GetSystemFileProperties()
public virtual async Task LoadAsync()
{
List<FileProperty> detailsFull = new();
Item.ItemFile ??= await StorageFileExtensions.DangerousGetFileFromPathAsync(Item.ItemPath);
if (Item.ItemFile == null)
{
var rootItem = await FilesystemTasks.Wrap(() => DrivesManager.GetRootFromPathAsync(Item.ItemPath));
Item.ItemFile = await StorageFileExtensions.DangerousGetFileFromPathAsync(Item.ItemPath, rootItem);
}
await Task.Run(async () =>
{
DetailsFromPreview = await LoadPreviewAndDetails();
Expand Down
3 changes: 2 additions & 1 deletion src/Files/ViewModels/Previews/FolderPreviewViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ private async Task LoadPreviewAndDetailsAsync()
ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
string returnformat = Enum.Parse<TimeStyle>(localSettings.Values[Constants.LocalSettings.DateTimeFormat].ToString()) == TimeStyle.Application ? "D" : "g";

Folder = await StorageFileExtensions.DangerousGetFolderFromPathAsync(Item.ItemPath);
var rootItem = await FilesystemTasks.Wrap(() => DrivesManager.GetRootFromPathAsync(Item.ItemPath));
Folder = await StorageFileExtensions.DangerousGetFolderFromPathAsync(Item.ItemPath, rootItem);
var items = await Folder.GetItemsAsync();

var iconData = await FileThumbnailHelper.LoadIconFromStorageItemAsync(Folder, 400, ThumbnailMode.SingleItem);
Expand Down
2 changes: 1 addition & 1 deletion src/Files/ViewModels/Properties/FileProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ public override async void GetSpecialProperties()
ViewModel.ItemSizeVisibility = true;
ViewModel.ItemSize = Item.FileSizeBytes.ToLongSizeString();

var fileIconData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.ItemPath, 80, Windows.Storage.FileProperties.ThumbnailMode.SingleItem);
var fileIconData = await FileThumbnailHelper.LoadIconFromPathAsync(Item.ItemPath, 80, Windows.Storage.FileProperties.ThumbnailMode.DocumentsView);
if (fileIconData != null)
{
ViewModel.IconData = fileIconData;
Expand Down