[PTRun]Add setting to disable thumbnails (#24600)

This commit is contained in:
Jaime Bernardo
2023-03-06 22:57:52 +00:00
committed by GitHub
parent 07029ff4c0
commit 65378200c6
12 changed files with 80 additions and 22 deletions

View File

@@ -166,6 +166,11 @@ namespace PowerLauncher
_settings.StartupPosition = overloadSettings.Properties.Position;
}
if (_settings.GenerateThumbnailsFromFiles != overloadSettings.Properties.GenerateThumbnailsFromFiles)
{
_settings.GenerateThumbnailsFromFiles = overloadSettings.Properties.GenerateThumbnailsFromFiles;
}
retry = false;
}

View File

@@ -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);
}
}

View File

@@ -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();
}

View File

@@ -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)

View File

@@ -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))]

View File

@@ -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 });

View File

@@ -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;