From ff05745d7e9e8d83b62e14ef74e644ae0ccb202d Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 15 Jun 2021 15:32:41 +0200 Subject: [PATCH] Resolve SVGs. --- .../Assets/ImageAssetMetadataSource.cs | 5 +++++ .../Contents/Queries/Steps/ResolveAssets.cs | 9 ++++++++- .../Assets/ImageAssetMetadataSourceTests.cs | 12 ++++++++++++ .../Contents/Queries/ResolveAssetsTests.cs | 17 +++++++++++++---- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/ImageAssetMetadataSource.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/ImageAssetMetadataSource.cs index bece97858..6426ed3a6 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/ImageAssetMetadataSource.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/ImageAssetMetadataSource.cs @@ -115,6 +115,11 @@ namespace Squidex.Domain.Apps.Entities.Assets command.Tags.Add("image/small"); } } + + if (command.File.MimeType == "image/svg+xml") + { + command.Tags.Add("image"); + } } public IEnumerable Format(IAssetEntity asset) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs index f3a47f937..3c2a9c2ad 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs @@ -90,7 +90,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps { IJsonValue array; - if (referencedAsset.Type == AssetType.Image) + if (IsImage(referencedAsset)) { var url = urlGenerator.AssetContent( referencedAsset.AppId, @@ -113,6 +113,13 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps } } + private static bool IsImage(IEnrichedAssetEntity asset) + { + const int PreviewLimit = 10 * 1024; + + return asset.Type == AssetType.Image || (asset.MimeType == "image/svg+xml" && asset.FileSize < PreviewLimit); + } + private async Task> GetAssetsAsync(Context context, HashSet ids, CancellationToken ct) { diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/ImageAssetMetadataSourceTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/ImageAssetMetadataSourceTests.cs index 56e9e55bf..16de32bd4 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/ImageAssetMetadataSourceTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/ImageAssetMetadataSourceTests.cs @@ -132,6 +132,18 @@ namespace Squidex.Domain.Apps.Entities.Assets Assert.Contains("image/large", command.Tags); } + [Fact] + public async Task Should_add_image_tag_if_svg() + { + var svg = new DelegateAssetFile("MyImage.png", "image/svg+xml", 1024, () => stream); + + var command = new CreateAsset { File = svg }; + + await sut.EnhanceAsync(command); + + Assert.Contains("image", command.Tags); + } + [Fact] public void Should_format_image() { diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs index b2a2ab6b0..d814d252a 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs @@ -106,10 +106,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries public async Task Should_enrich_with_asset_urls() { var img1 = CreateAsset(DomainId.NewGuid(), 1, AssetType.Image, "Image1.png"); - var img2 = CreateAsset(DomainId.NewGuid(), 2, AssetType.Image, "Image2.png"); + var img2 = CreateAsset(DomainId.NewGuid(), 2, AssetType.Unknown, "Image2.png", "image/svg+xml"); var doc1 = CreateAsset(DomainId.NewGuid(), 3, AssetType.Unknown, "Document1.png"); - var doc2 = CreateAsset(DomainId.NewGuid(), 4, AssetType.Unknown, "Document2.png"); + var doc2 = CreateAsset(DomainId.NewGuid(), 4, AssetType.Unknown, "Document2.png", "image/svg+xml", 20_000); var contents = new[] { @@ -236,9 +236,18 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries }; } - private IEnrichedAssetEntity CreateAsset(DomainId id, int version, AssetType type, string fileName) + private IEnrichedAssetEntity CreateAsset(DomainId id, int version, AssetType type, string fileName, string? fileType = null, int fileSize = 100) { - return new AssetEntity { AppId = appId, Id = id, Type = type, Version = version, FileName = fileName }; + return new AssetEntity + { + AppId = appId, + Id = id, + Type = type, + FileName = fileName, + FileSize = fileSize, + MimeType = fileType!, + Version = version, + }; } } }