From 6bd2269a8411a4e8d73fdbe1aa0899b1da6b2aa4 Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 02:27:22 +0000 Subject: [PATCH] Feat: Reuse MediaPreview instance in InfoPane --- .../UserControls/FilePreviews/MediaPreview.xaml.cs | 6 ++++++ .../ViewModels/UserControls/InfoPaneViewModel.cs | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs index 65f79818924f..233cdf6c58a9 100644 --- a/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs +++ b/src/Files.App/UserControls/FilePreviews/MediaPreview.xaml.cs @@ -63,5 +63,11 @@ private void TogglePlaybackAcceleratorInvoked(KeyboardAccelerator sender, Keyboa { TogglePlaybackRequestInvoked(sender, null); } + + public async Task UpdateViewModelAsync(MediaPreviewViewModel model) + { + ViewModel = model; + await ViewModel.LoadAsync(); + } } } \ No newline at end of file diff --git a/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs b/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs index 2fec9e72573a..09591ca9c30f 100644 --- a/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs @@ -18,6 +18,7 @@ public sealed partial class InfoPaneViewModel : ObservableObject, IDisposable private DrivesViewModel drivesViewModel { get; } = Ioc.Default.GetRequiredService(); private CancellationTokenSource loadCancellationTokenSource; + private MediaPreview? _mediaPreview; /// /// Value indicating if the info pane is on/off @@ -273,9 +274,17 @@ private async Task GetBuiltInPreviewControlAsync(ListedItem item, b (FileExtensionHelpers.IsAudioFile(ext) || FileExtensionHelpers.IsVideoFile(ext))) { var model = new MediaPreviewViewModel(item); - await model.LoadAsync(); - return new MediaPreview(model); + if (_mediaPreview is null) + { + await model.LoadAsync(); // Load only if creating new instance + _mediaPreview = new(model); + } + else + { + await _mediaPreview.UpdateViewModelAsync(model); // Update existing instance + } + return _mediaPreview; } if (MarkdownPreviewViewModel.ContainsExtension(ext))