mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-04 18:26:39 +02:00
[PTRun]Add setting to disable thumbnails (#24600)
This commit is contained in:
@@ -166,6 +166,11 @@ namespace PowerLauncher
|
||||
_settings.StartupPosition = overloadSettings.Properties.Position;
|
||||
}
|
||||
|
||||
if (_settings.GenerateThumbnailsFromFiles != overloadSettings.Properties.GenerateThumbnailsFromFiles)
|
||||
{
|
||||
_settings.GenerateThumbnailsFromFiles = overloadSettings.Properties.GenerateThumbnailsFromFiles;
|
||||
}
|
||||
|
||||
retry = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ using System.Windows.Media;
|
||||
using PowerLauncher.Helper;
|
||||
using PowerLauncher.Plugin;
|
||||
using Wox.Infrastructure.Image;
|
||||
using Wox.Infrastructure.UserSettings;
|
||||
using Wox.Plugin;
|
||||
using Wox.Plugin.Logger;
|
||||
|
||||
@@ -23,6 +24,8 @@ namespace PowerLauncher.ViewModel
|
||||
Hover,
|
||||
}
|
||||
|
||||
private readonly PowerToysRunSettings _settings;
|
||||
|
||||
public ObservableCollection<ContextMenuItemViewModel> ContextMenuItems { get; } = new ObservableCollection<ContextMenuItemViewModel>();
|
||||
|
||||
public ICommand ActivateContextButtonsHoverCommand { get; }
|
||||
@@ -65,13 +68,15 @@ namespace PowerLauncher.ViewModel
|
||||
|
||||
public const int NoSelectionIndex = -1;
|
||||
|
||||
public ResultViewModel(Result result, IMainViewModel mainViewModel)
|
||||
public ResultViewModel(Result result, IMainViewModel mainViewModel, PowerToysRunSettings settings)
|
||||
{
|
||||
if (result != null)
|
||||
{
|
||||
Result = result;
|
||||
}
|
||||
|
||||
_settings = settings;
|
||||
|
||||
ContextMenuSelectedIndex = NoSelectionIndex;
|
||||
LoadContextMenu();
|
||||
|
||||
@@ -201,7 +206,7 @@ namespace PowerLauncher.ViewModel
|
||||
}
|
||||
|
||||
// will get here either when icoPath has value\icon delegate is null\when had exception in delegate
|
||||
return ImageLoader.Load(imagePath);
|
||||
return ImageLoader.Load(imagePath, _settings.GenerateThumbnailsFromFiles);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -272,7 +272,7 @@ namespace PowerLauncher.ViewModel
|
||||
List<ResultViewModel> newResults = new List<ResultViewModel>(newRawResults.Count);
|
||||
foreach (Result r in newRawResults)
|
||||
{
|
||||
newResults.Add(new ResultViewModel(r, _mainViewModel));
|
||||
newResults.Add(new ResultViewModel(r, _mainViewModel, _settings));
|
||||
ct.ThrowIfCancellationRequested();
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ using System.Threading.Tasks;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using ManagedCommon;
|
||||
using Wox.Infrastructure.UserSettings;
|
||||
using Wox.Plugin;
|
||||
using Wox.Plugin.Logger;
|
||||
|
||||
@@ -67,7 +68,7 @@ namespace Wox.Infrastructure.Image
|
||||
{
|
||||
ImageCache.Usage.AsParallel().ForAll(x =>
|
||||
{
|
||||
Load(x.Key);
|
||||
Load(x.Key, true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -119,7 +120,7 @@ namespace Wox.Infrastructure.Image
|
||||
Cache,
|
||||
}
|
||||
|
||||
private static ImageResult LoadInternal(string path, bool loadFullImage = false)
|
||||
private static ImageResult LoadInternal(string path, bool generateThumbnailsFromFiles, bool loadFullImage = false)
|
||||
{
|
||||
ImageSource image;
|
||||
ImageType type = ImageType.Error;
|
||||
@@ -172,18 +173,27 @@ namespace Wox.Infrastructure.Image
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Although the documentation for GetImage on MSDN indicates that
|
||||
* if a thumbnail is available it will return one, this has proved to not
|
||||
* be the case in many situations while testing.
|
||||
* - Solution: explicitly pass the ThumbnailOnly flag
|
||||
*/
|
||||
image = WindowsThumbnailProvider.GetThumbnail(path, Constant.ThumbnailSize, Constant.ThumbnailSize, ThumbnailOptions.ThumbnailOnly);
|
||||
// PowerToys Run internal images are png, so we make this exception
|
||||
if (extension == ".png" || generateThumbnailsFromFiles)
|
||||
{
|
||||
/* Although the documentation for GetImage on MSDN indicates that
|
||||
* if a thumbnail is available it will return one, this has proved to not
|
||||
* be the case in many situations while testing.
|
||||
* - Solution: explicitly pass the ThumbnailOnly flag
|
||||
*/
|
||||
image = WindowsThumbnailProvider.GetThumbnail(path, Constant.ThumbnailSize, Constant.ThumbnailSize, ThumbnailOptions.ThumbnailOnly);
|
||||
}
|
||||
else
|
||||
{
|
||||
image = WindowsThumbnailProvider.GetThumbnail(path, Constant.ThumbnailSize, Constant.ThumbnailSize, ThumbnailOptions.IconOnly);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (extension == ".pdf" && WindowsThumbnailProvider.DoesPdfUseAcrobatAsProvider())
|
||||
else if (!generateThumbnailsFromFiles || (extension == ".pdf" && WindowsThumbnailProvider.DoesPdfUseAcrobatAsProvider()))
|
||||
{
|
||||
// The PDF thumbnail provider from Adobe Reader and Acrobat Pro lets crash PT Run with an Dispatcher exception. (https://github.com/microsoft/PowerToys/issues/18166)
|
||||
// To not run into the crash, we only request the icon of PDF files if the PDF thumbnail handler is set to Adobe Reader/Acrobat Pro.
|
||||
// Also don't get thumbnail if the GenerateThumbnailsFromFiles option is off.
|
||||
type = ImageType.File;
|
||||
image = WindowsThumbnailProvider.GetThumbnail(path, Constant.ThumbnailSize, Constant.ThumbnailSize, ThumbnailOptions.IconOnly);
|
||||
}
|
||||
@@ -217,9 +227,9 @@ namespace Wox.Infrastructure.Image
|
||||
|
||||
private const bool _enableImageHash = true;
|
||||
|
||||
public static ImageSource Load(string path, bool loadFullImage = false)
|
||||
public static ImageSource Load(string path, bool generateThumbnailsFromFiles, bool loadFullImage = false)
|
||||
{
|
||||
var imageResult = LoadInternal(path, loadFullImage);
|
||||
var imageResult = LoadInternal(path, generateThumbnailsFromFiles, loadFullImage);
|
||||
|
||||
var img = imageResult.ImageSource;
|
||||
if (imageResult.ImageType != ImageType.Error && imageResult.ImageType != ImageType.Cache)
|
||||
|
||||
@@ -323,6 +323,8 @@ namespace Wox.Infrastructure.UserSettings
|
||||
|
||||
public bool StartedFromPowerToysRunner { get; set; }
|
||||
|
||||
public bool GenerateThumbnailsFromFiles { get; set; } = true;
|
||||
|
||||
public HttpProxy Proxy { get; set; } = new HttpProxy();
|
||||
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Wox.Test
|
||||
var result = new Result();
|
||||
contextMenuResult = new ContextMenuResult();
|
||||
mainViewModelMock = new Mock<IMainViewModel>();
|
||||
resultViewModel = new ResultViewModel(result, mainViewModelMock.Object);
|
||||
resultViewModel = new ResultViewModel(result, mainViewModelMock.Object, null);
|
||||
|
||||
var pluginMock = new Mock<IPlugin>();
|
||||
pluginMock.As<IContextMenu>().Setup(x => x.LoadContextMenus(result)).Returns(new List<ContextMenuResult> { contextMenuResult });
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Wox.Test
|
||||
// Arrange
|
||||
ResultsViewModel rvm = new ResultsViewModel();
|
||||
Result result = new Result();
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null);
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null, null);
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
rvm.SelectedItem = selectedItem;
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace Wox.Test
|
||||
// Arrange
|
||||
ResultsViewModel rvm = new ResultsViewModel();
|
||||
Result result = new Result();
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null);
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null, null);
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
rvm.SelectedItem = selectedItem;
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace Wox.Test
|
||||
// Arrange
|
||||
ResultsViewModel rvm = new ResultsViewModel();
|
||||
Result result = new Result();
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null);
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null, null);
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
rvm.SelectedItem = selectedItem;
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace Wox.Test
|
||||
// Arrange
|
||||
ResultsViewModel rvm = new ResultsViewModel();
|
||||
Result result = new Result();
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null);
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null, null);
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
@@ -88,7 +88,7 @@ namespace Wox.Test
|
||||
// Arrange
|
||||
ResultsViewModel rvm = new ResultsViewModel();
|
||||
Result result = new Result();
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null);
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null, null);
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
rvm.SelectedItem = selectedItem;
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace Wox.Test
|
||||
// Arrange
|
||||
ResultsViewModel rvm = new ResultsViewModel();
|
||||
Result result = new Result();
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null);
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null, null);
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
rvm.SelectedItem = selectedItem;
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace Wox.Test
|
||||
// Arrange
|
||||
ResultsViewModel rvm = new ResultsViewModel();
|
||||
Result result = new Result();
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null);
|
||||
ResultViewModel selectedItem = new ResultViewModel(result, null, null);
|
||||
selectedItem.ContextMenuItems.Add(new ContextMenuItemViewModel(null, null, null, null, Key.None, ModifierKeys.None, null));
|
||||
rvm.SelectedItem = selectedItem;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user