mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 10:46:33 +02:00
Add SVG Thumbnail Provider for Windows Explorer (#5048)
* Add SVG Thumbnail Provider * Some cleanup * Small settings changes * Update PowerToys.sln Remove Any CPU entries * Fix project configuration issues * Fix bad merge * Update output path for SVG thumbnail provider * Sync with latest
This commit is contained in:
@@ -17,7 +17,6 @@ using Common.Utilities;
|
||||
using Microsoft.PowerToys.Telemetry;
|
||||
using PreviewHandlerCommon;
|
||||
using SvgPreviewHandler.Telemetry.Events;
|
||||
using SvgPreviewHandler.Utilities;
|
||||
|
||||
namespace SvgPreviewHandler
|
||||
{
|
||||
|
||||
@@ -112,7 +112,6 @@
|
||||
<Compile Include="Telemetry\Events\SvgFileHandlerLoaded.cs" />
|
||||
<Compile Include="Telemetry\Events\SvgFilePreviewed.cs" />
|
||||
<Compile Include="Telemetry\Events\SvgFilePreviewError.cs" />
|
||||
<Compile Include="Utilities\SvgPreviewHandlerHelper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\common\ManagedTelemetry\Telemetry\Telemetry.csproj">
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace SvgPreviewHandler.Utilities
|
||||
{
|
||||
/// <summary>
|
||||
/// Helper utilities for Svg Preview Handler.
|
||||
/// </summary>
|
||||
public class SvgPreviewHandlerHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Dictionary of elements in lower case that are blocked from Svg for preview pane.
|
||||
/// Reference for list of Svg Elements: https://developer.mozilla.org/en-US/docs/Web/SVG/Element.
|
||||
/// </summary>
|
||||
private static Dictionary<string, bool> blockedElementsName = new Dictionary<string, bool>
|
||||
{
|
||||
{ "script", true },
|
||||
{ "image", true },
|
||||
{ "feimage", true },
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Check if any of the blocked elements present in Svg.
|
||||
/// </summary>
|
||||
/// <param name="svgData">Input Svg.</param>
|
||||
/// <returns>Returns true in case any of the blocked element is present otherwise false.</returns>
|
||||
public static bool CheckBlockedElements(string svgData)
|
||||
{
|
||||
bool foundBlockedElement = false;
|
||||
if (string.IsNullOrWhiteSpace(svgData))
|
||||
{
|
||||
return foundBlockedElement;
|
||||
}
|
||||
|
||||
// Check if any of the blocked element is present. If failed to parse or iterate over Svg return default false.
|
||||
// No need to throw because all the external content and script are blocked on the Web Browser Control itself.
|
||||
try
|
||||
{
|
||||
var doc = XDocument.Parse(svgData);
|
||||
var elements = doc.Descendants().ToList();
|
||||
foreach (XElement element in elements)
|
||||
{
|
||||
var elementName = element?.Name?.LocalName?.ToLower();
|
||||
if (elementName != null && blockedElementsName.ContainsKey(elementName))
|
||||
{
|
||||
foundBlockedElement = true;
|
||||
|
||||
// No need to iterate further since we are displaying info bar with condition of atleast one occurrence of blocked element is present.
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
|
||||
return foundBlockedElement;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user