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