From 2483cc66a290d9abc01d967a8fb799de29e69883 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 30 Jan 2024 18:22:12 +0100 Subject: [PATCH] Fix pixel width. --- .../Assets/KnownMetadataKeys.cs | 4 ++- .../Assets/SvgAssetMetadataSource.cs | 18 +++++++--- .../Assets/SvgAssetMetadataSourceTests.cs | 33 +++++++++++++++---- .../TestFiles/SvgNonPixelDimensions.svg | 6 ++++ .../Squidex.Domain.Apps.Entities.Tests.csproj | 3 ++ 5 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs index 03a731650..eab5e9dce 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Model/Assets/KnownMetadataKeys.cs @@ -23,7 +23,9 @@ public static class KnownMetadataKeys public const string Longitude = "longitude"; public const string PixelHeight = "pixelHeight"; public const string PixelWidth = "pixelWidth"; + public const string SvgHeight = "svgHeight"; + public const string SvgViewBox = "viewBox"; + public const string SvgWidth = "svgWidth"; public const string VideoHeight = "videoHeight"; public const string VideoWidth = "videoWidth"; - public const string ViewBox = "viewBox"; } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs index 556e6fc34..eb1237126 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/SvgAssetMetadataSource.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System.Globalization; using Squidex.Domain.Apps.Core.Assets; using Squidex.Domain.Apps.Entities.Assets.Commands; using Squidex.Infrastructure.Translations; @@ -51,13 +52,20 @@ public sealed class SvgAssetMetadataSource : IAssetMetadataSource if (!string.IsNullOrWhiteSpace(width) && !string.IsNullOrWhiteSpace(height)) { - command.Metadata[KnownMetadataKeys.PixelWidth] = width; - command.Metadata[KnownMetadataKeys.PixelHeight] = height; + command.Metadata[KnownMetadataKeys.SvgWidth] = width; + command.Metadata[KnownMetadataKeys.SvgHeight] = height; + + if (int.TryParse(width, NumberStyles.Integer, CultureInfo.InvariantCulture, out var w) && + int.TryParse(height, NumberStyles.Integer, CultureInfo.InvariantCulture, out var h)) + { + command.Metadata[KnownMetadataKeys.PixelWidth] = w; + command.Metadata[KnownMetadataKeys.PixelHeight] = h; + } } if (!string.IsNullOrWhiteSpace(viewBox)) { - command.Metadata[KnownMetadataKeys.ViewBox] = viewBox; + command.Metadata[KnownMetadataKeys.SvgViewBox] = viewBox; } } } @@ -82,8 +90,8 @@ public sealed class SvgAssetMetadataSource : IAssetMetadataSource yield break; } - if (asset.Metadata.TryGetString(KnownMetadataKeys.PixelWidth, out var w) && - asset.Metadata.TryGetString(KnownMetadataKeys.PixelHeight, out var h)) + if (asset.Metadata.TryGetString(KnownMetadataKeys.SvgWidth, out var w) && + asset.Metadata.TryGetString(KnownMetadataKeys.SvgHeight, out var h)) { yield return $"{w}x{h}"; } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs index 60c58cde4..bd0ab7074 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/SvgAssetMetadataSourceTests.cs @@ -51,7 +51,9 @@ public class SvgAssetMetadataSourceTests : GivenContext Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelWidth)); Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelHeight)); - Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.ViewBox)); + Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.SvgWidth)); + Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.SvgHeight)); + Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.SvgViewBox)); } [Fact] @@ -61,10 +63,29 @@ public class SvgAssetMetadataSourceTests : GivenContext await sut.EnhanceAsync(command, default); - Assert.Equal("20", command.Metadata[KnownMetadataKeys.PixelWidth].AsString); - Assert.Equal("30", command.Metadata[KnownMetadataKeys.PixelHeight].AsString); + Assert.Equal(20, command.Metadata[KnownMetadataKeys.PixelWidth].AsNumber); + Assert.Equal(30, command.Metadata[KnownMetadataKeys.PixelHeight].AsNumber); - Assert.Equal("0 0 100 100", command.Metadata[KnownMetadataKeys.ViewBox].AsString); + Assert.Equal("20", command.Metadata[KnownMetadataKeys.SvgWidth].AsString); + Assert.Equal("30", command.Metadata[KnownMetadataKeys.SvgHeight].AsString); + + Assert.Equal("0 0 100 100", command.Metadata[KnownMetadataKeys.SvgViewBox].AsString); + } + + [Fact] + public async Task Should_extract_metadata_if_not_pixel_dimensions() + { + var command = Command("SvgNonPixelDimensions.svg"); + + await sut.EnhanceAsync(command, default); + + Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelWidth)); + Assert.False(command.Metadata.ContainsKey(KnownMetadataKeys.PixelHeight)); + + Assert.Equal("2rem", command.Metadata[KnownMetadataKeys.SvgWidth].AsString); + Assert.Equal("3rem", command.Metadata[KnownMetadataKeys.SvgHeight].AsString); + + Assert.Equal("0 0 100 100", command.Metadata[KnownMetadataKeys.SvgViewBox].AsString); } [Fact] @@ -74,8 +95,8 @@ public class SvgAssetMetadataSourceTests : GivenContext { Metadata = new AssetMetadata { - [KnownMetadataKeys.PixelWidth] = "128", - [KnownMetadataKeys.PixelHeight] = "55" + [KnownMetadataKeys.SvgWidth] = "128", + [KnownMetadataKeys.SvgHeight] = "55" }, MimeType = "image/svg+xml" }; diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg new file mode 100644 index 000000000..ad38c9633 --- /dev/null +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/TestFiles/SvgNonPixelDimensions.svg @@ -0,0 +1,6 @@ + + + + 410 + + \ No newline at end of file diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj index 7f8207324..607773f04 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj @@ -67,6 +67,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest