Skip to content

Commit

Permalink
Fixed preview handler error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
shibayan committed Sep 8, 2020
1 parent ef9ac3d commit 812a6e8
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 29 deletions.
2 changes: 1 addition & 1 deletion WinQuickLook/Controls/GenericFileViewer.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<ColumnDefinition Width="0.5*" />
</Grid.ColumnDefinitions>
<Image Source="{Binding Thumbnail, ElementName=userControl}" Margin="15" Stretch="Uniform" Grid.Column="0" Width="256" Height="256" />
<StackPanel Orientation="Vertical" Margin="15" Grid.Column="1">
<StackPanel Orientation="Vertical" Margin="15" Grid.Column="1" VerticalAlignment="Center">
<TextBlock Text="{Binding FileInfo.Name, ElementName=userControl}" FontSize="22" TextWrapping="Wrap" />
<TextBlock Text="{Binding FileInfo.FullName, ElementName=userControl, Converter={StaticResource FileNameToTypeNameConverter}}" FontSize="16" Margin="0,20,0,0" TextWrapping="Wrap" />
<TextBlock Text="{Binding FileInfo, ElementName=userControl, Converter={StaticResource FileInfoToFileSizeConverter}}" FontSize="16" Margin="0,15,0,0" />
Expand Down
33 changes: 8 additions & 25 deletions WinQuickLook/Controls/PreviewHandlerHost.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

using Microsoft.AppCenter.Crashes;
using Microsoft.Win32;

using WinQuickLook.Interop;

Expand All @@ -14,7 +14,7 @@ public class PreviewHandlerHost : Control
{
private IPreviewHandler _previewHandler;

private const string PreviewHandlerSubKey = "shellex\\{8895b1c6-b41f-4c1c-a562-0d564250836f}";
private const string PreviewHandlerGuid = "{8895b1c6-b41f-4c1c-a562-0d564250836f}";

protected override void Dispose(bool disposing)
{
Expand All @@ -32,37 +32,20 @@ protected override void OnResize(EventArgs e)

public static Guid GetPreviewHandlerCLSID(string fileName)
{
var extension = Path.GetExtension(fileName);
int pcchOut = 0;

if (string.IsNullOrEmpty(extension))
{
return Guid.Empty;
}
NativeMethods.AssocQueryString(ASSOCF.INIT_DEFAULTTOSTAR, ASSOCSTR.SHELLEXTENSION, Path.GetExtension(fileName), PreviewHandlerGuid, null, ref pcchOut);

using var extensionKey = Registry.ClassesRoot.OpenSubKey(extension);

if (extensionKey == null)
if (pcchOut == 0)
{
return Guid.Empty;
}

using var previewHandlerSubKey = extensionKey.OpenSubKey(PreviewHandlerSubKey);
var pszOut = new StringBuilder(pcchOut);

if (previewHandlerSubKey != null)
{
return new Guid(Convert.ToString(previewHandlerSubKey.GetValue(null)));
}

var className = Convert.ToString(extensionKey.GetValue(null));

using var classNameSubKey = Registry.ClassesRoot.OpenSubKey(className + PreviewHandlerSubKey);

if (classNameSubKey != null)
{
return new Guid(Convert.ToString(classNameSubKey.GetValue(null)));
}
NativeMethods.AssocQueryString(ASSOCF.INIT_DEFAULTTOSTAR, ASSOCSTR.SHELLEXTENSION, Path.GetExtension(fileName), PreviewHandlerGuid, pszOut, ref pcchOut);

return Guid.Empty;
return new Guid(pszOut.ToString());
}

public bool Open(string fileName)
Expand Down
29 changes: 29 additions & 0 deletions WinQuickLook/Extensions/QuickLookHandlerExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;
using System.Threading.Tasks;
using System.Windows;

using Microsoft.AppCenter.Crashes;

using WinQuickLook.Handlers;

namespace WinQuickLook.Extensions
{
internal static class QuickLookHandlerExtensions
{
private static readonly IQuickLookHandler _genericHandler = new GenericQuickLookHandler();

public static async Task<(FrameworkElement, Size, string)> GetViewerWithErrorAsync(this IQuickLookHandler handler, string fileName)
{
try
{
return await (handler ?? _genericHandler).GetViewerAsync(fileName);
}
catch (Exception ex)
{
Crashes.TrackError(ex);
}

return await _genericHandler.GetViewerAsync(fileName);
}
}
}
5 changes: 2 additions & 3 deletions WinQuickLook/QuickLookWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using System.Windows.Media;
using System.Windows.Shell;

using WinQuickLook.Extensions;
using WinQuickLook.Handlers;
using WinQuickLook.Internal;
using WinQuickLook.Interop;
Expand Down Expand Up @@ -41,8 +42,6 @@ public QuickLookWindow()
new ComInteropQuickLookHandler()
};

private readonly IQuickLookHandler _genericHandler = new GenericQuickLookHandler();

public FrameworkElement PreviewHost
{
get => (FrameworkElement)GetValue(PreviewHostProperty);
Expand Down Expand Up @@ -85,7 +84,7 @@ public async void Open(string fileName)
handler = _fileHandlers.FirstOrDefault(x => x.CanOpen(fileName));
}

var (element, requestSize, metadata) = await (handler ?? _genericHandler).GetViewerAsync(fileName);
var (element, requestSize, metadata) = await handler.GetViewerWithErrorAsync(fileName);

PreviewHost = element;

Expand Down

0 comments on commit 812a6e8

Please sign in to comment.