From b50b587a63808972c444f50e98ee480a348d30b9 Mon Sep 17 00:00:00 2001 From: Stefan Markovic <57057282+stefansjfw@users.noreply.github.com> Date: Tue, 30 May 2023 16:58:56 +0200 Subject: [PATCH] [Peek] Fix race condition when setting preview (#26478) --- .../MediaPreviewer/ImagePreviewer.cs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs b/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs index 718d823566..f02f703c04 100644 --- a/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs +++ b/src/modules/peek/Peek.FilePreviewer/Previewers/MediaPreviewer/ImagePreviewer.cs @@ -62,8 +62,12 @@ namespace Peek.FilePreviewer.Previewers private IntPtr lowQualityThumbnail; + private ImageSource? lowQualityThumbnailPreview; + private IntPtr highQualityThumbnail; + private ImageSource? highQualityThumbnailPreview; + public static bool IsFileTypeSupported(string fileExt) { return _supportedFileTypes.Contains(fileExt); @@ -110,6 +114,19 @@ namespace Peek.FilePreviewer.Previewers await Task.WhenAll(LowQualityThumbnailTask, HighQualityThumbnailTask, FullQualityImageTask); + // If Preview is still null, FullQualityImage was not available. Preview the thumbnail instead. + if (Preview == null) + { + if (highQualityThumbnailPreview != null) + { + Preview = highQualityThumbnailPreview; + } + else + { + Preview = lowQualityThumbnailPreview; + } + } + if (Preview == null && HasFailedLoadingPreview()) { State = PreviewState.Error; @@ -179,7 +196,7 @@ namespace Peek.FilePreviewer.Previewers if (!IsFullImageLoaded && !IsHighQualityThumbnailLoaded) { var thumbnailBitmap = await BitmapHelper.GetBitmapFromHBitmapAsync(lowQualityThumbnail, IsPng(Item), cancellationToken); - Preview = thumbnailBitmap; + lowQualityThumbnailPreview = thumbnailBitmap; } }); }); @@ -206,7 +223,7 @@ namespace Peek.FilePreviewer.Previewers if (!IsFullImageLoaded) { var thumbnailBitmap = await BitmapHelper.GetBitmapFromHBitmapAsync(highQualityThumbnail, IsPng(Item), cancellationToken); - Preview = thumbnailBitmap; + highQualityThumbnailPreview = thumbnailBitmap; } }); }); @@ -270,6 +287,8 @@ namespace Peek.FilePreviewer.Previewers private void Clear() { + lowQualityThumbnailPreview = null; + highQualityThumbnailPreview = null; Preview = null; if (lowQualityThumbnail != IntPtr.Zero)