diff --git a/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Handler.cs b/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Handler.cs index a32af81..794eada 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Handler.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Handler.cs @@ -74,6 +74,20 @@ internal static class Handler context.PreferredSize = new Size { Width = 100, Height = 100 }; } } + else if (path.EndsWith(".sketch", StringComparison.OrdinalIgnoreCase)) + { + try + { + using Stream imageData = ViewImage(path); + BitmapImage bitmap = imageData.ReadAsBitmapImage(); + context.SetPreferredSizeFit(new Size(bitmap.PixelWidth, bitmap.PixelHeight), 0.8d); + } + catch (Exception e) + { + _ = e; + context.PreferredSize = new Size { Width = 100, Height = 100 }; + } + } else if (path.EndsWith(".xmind", StringComparison.OrdinalIgnoreCase)) { try @@ -195,6 +209,22 @@ internal static class Handler StreamResourceInfo info = Application.GetResourceStream(new Uri("pack://application:,,,/QuickLook.Plugin.ThumbnailViewer;component/Resources/broken.png")); return info?.Stream; } + else if (path.EndsWith(".sketch", StringComparison.OrdinalIgnoreCase)) + { + using ZipArchive archive = ZipArchive.Open(path, new()); + using IReader reader = archive.ExtractAllEntries(); + + while (reader.MoveToNextEntry()) + { + if (reader.Entry.Key!.EndsWith("previews/preview.png", StringComparison.OrdinalIgnoreCase)) + { + MemoryStream ms = new(); + using EntryStream stream = reader.OpenEntryStream(); + stream.CopyTo(ms); + return ms; + } + } + } else if (path.EndsWith(".xmind", StringComparison.OrdinalIgnoreCase)) { using ZipArchive archive = ZipArchive.Open(path, new()); diff --git a/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Plugin.cs index f1ec99b..1e8dc36 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Plugin.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.ThumbnailViewer/Plugin.cs @@ -34,6 +34,7 @@ public class Plugin : IViewer ".fig", // Figma ".kra", // Krita ".pip", ".pix", // Pixso + ".sketch", // Sketch ".xd", // AdobeXD ".xmind", // XMind ]);