diff --git a/src/modules/peek/Peek.UI/MainWindowViewModel.cs b/src/modules/peek/Peek.UI/MainWindowViewModel.cs index 775664c042..fb2b326c17 100644 --- a/src/modules/peek/Peek.UI/MainWindowViewModel.cs +++ b/src/modules/peek/Peek.UI/MainWindowViewModel.cs @@ -388,6 +388,13 @@ namespace Peek.UI IsErrorVisible = true; } + public void ShowError(string message) + { + IsErrorVisible = false; + ErrorMessage = message; + IsErrorVisible = true; + } + private void NavigationThrottleTimer_Tick(object? sender, object e) { if (sender == null) diff --git a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml index f8e3166b0a..26dbb19b24 100644 --- a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml +++ b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml @@ -50,7 +50,8 @@ Item="{x:Bind ViewModel.CurrentItem, Mode=OneWay}" NumberOfFiles="{x:Bind ViewModel.DisplayItemCount, Mode=OneWay}" PreviewSizeChanged="FilePreviewer_PreviewSizeChanged" - ScalingFactor="{x:Bind ViewModel.ScalingFactor, Mode=OneWay}" /> + ScalingFactor="{x:Bind ViewModel.ScalingFactor, Mode=OneWay}" + Visibility="{x:Bind ContentVisibility(ViewModel.IsErrorVisible), Mode=OneWay}" /> diff --git a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs index 2c8983c634..6e257cd73b 100644 --- a/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs +++ b/src/modules/peek/Peek.UI/PeekXAML/MainWindow.xaml.cs @@ -14,6 +14,7 @@ using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Input; using Peek.Common.Constants; using Peek.Common.Extensions; +using Peek.Common.Helpers; using Peek.FilePreviewer.Models; using Peek.FilePreviewer.Previewers; using Peek.UI.Extensions; @@ -195,6 +196,20 @@ namespace Peek.UI bootTime.Start(); ViewModel.Initialize(selectedItem); + + // If no files were found (e.g., in virtual folders like Home/Recent), show an error + if (ViewModel.CurrentItem == null) + { + Logger.LogInfo("Peek: No files found to preview, showing error."); + var errorMessage = ResourceLoaderInstance.ResourceLoader.GetString("NoFilesSelected"); + ViewModel.ShowError(errorMessage); + + // Still show the window so user can see the warning + this.Show(); + WindowHelpers.BringToForeground(this.GetWindowHandle()); + return; + } + ViewModel.ScalingFactor = this.GetMonitorScale(); this.Content.KeyUp += Content_KeyUp; @@ -302,5 +317,24 @@ namespace Peek.UI { themeListener?.Dispose(); } + + /// + /// Returns Visibility.Collapsed when error is showing, Visibility.Visible when not. + /// + public Visibility ContentVisibility(bool isErrorVisible) + { + return isErrorVisible ? Visibility.Collapsed : Visibility.Visible; + } + + /// + /// Handle InfoBar closed - if there's no current item, close the window. + /// + private void ErrorInfoBar_Closed(InfoBar sender, InfoBarClosedEventArgs args) + { + if (ViewModel.CurrentItem == null) + { + Uninitialize(); + } + } } } diff --git a/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw b/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw index 26482bb75a..f3dbc0f54d 100644 --- a/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw +++ b/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw @@ -341,6 +341,10 @@ No more files to preview. The message to show when there are no files remaining to preview. + + No files selected or this folder is not supported for preview. + Displayed when Peek is activated in a virtual folder (like Home or Recent) where file selection cannot be retrieved. + The file cannot be found. Please check if the file has been moved, renamed, or deleted. Displayed if the file or path was not found