Add support for svgaplayerweb in SVGA viewer

This commit is contained in:
ema
2025-07-05 11:24:02 +08:00
parent efba55b8d5
commit f6ca3a62e2
9 changed files with 77 additions and 14 deletions

View File

@@ -19,7 +19,7 @@ using System;
namespace QuickLook.Plugin.ImageViewer.Webview;
internal interface IWebImagePanel : IDisposable
public interface IWebImagePanel : IDisposable
{
public void Preview(string path);
}

View File

@@ -19,7 +19,7 @@ using System.Windows;
namespace QuickLook.Plugin.ImageViewer.Webview;
internal interface IWebMetaProvider
public interface IWebMetaProvider
{
public Size GetSize();
}

View File

@@ -20,7 +20,9 @@ using QuickLook.Plugin.ImageViewer.Webview.Svg;
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace QuickLook.Plugin.ImageViewer.Webview.Lottie;
@@ -76,3 +78,15 @@ public class LottieImagePanel : SvgImagePanel
base.WebView_WebResourceRequested(sender, args);
}
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public sealed class ScriptHandler(string path)
{
public string Path { get; } = path;
public async Task<string> GetPath()
{
return await Task.FromResult(new Uri(Path).AbsolutePath);
}
}

View File

@@ -15,21 +15,48 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using Google.Protobuf.Compiler;
using QuickLook.Plugin.ImageViewer.Webview.Svg;
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text.Json;
using System.Threading.Tasks;
using System.Windows;
namespace QuickLook.Plugin.ImageViewer.Webview.Svga;
public class SvgaImagePanel : SvgImagePanel
public class SvgaImagePanel(IWebMetaProvider metaWeb) : SvgImagePanel()
{
private readonly IWebMetaProvider _metaWeb = metaWeb;
public override void Preview(string path)
{
FallbackPath = Path.GetDirectoryName(path);
ObjectForScripting ??= new ScriptHandler(path);
ObjectForScripting ??= new ScriptHandler(path, _metaWeb);
_homePage = _resources["/svga2html.html"];
NavigateToUri(new Uri("file://quicklook/"));
}
}
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public sealed class ScriptHandler(string path, IWebMetaProvider metaWeb)
{
public string Path { get; } = path;
public IWebMetaProvider MetaWeb { get; } = metaWeb;
public async Task<string> GetPath()
{
return await Task.FromResult(new Uri(Path).AbsolutePath);
}
public async Task<string> GetSize()
{
var size = MetaWeb.GetSize();
string jsonString = JsonSerializer.Serialize(new { width = size.Width, height = size.Height });
return await Task.FromResult(jsonString);
}
}

View File

@@ -99,7 +99,7 @@ internal static class WebHandler
ipWeb = ext switch
{
".svg" => new SvgImagePanel(),
".svga" => new SvgaImagePanel(),
".svga" => new SvgaImagePanel(metaWeb),
".lottie" or ".json" => new LottieImagePanel(),
_ => throw new NotSupportedException($"Unsupported file type: {ext}")
};