From 1e377170be5726b57654c24952e915beced04b29 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 24 May 2022 18:21:30 +0200 Subject: [PATCH] Auto format. (#881) --- ...quidex.Domain.Apps.Entities.MongoDb.csproj | 2 +- .../Squidex.Domain.Users.MongoDb.csproj | 2 +- .../Squidex.Infrastructure.MongoDb.csproj | 4 +-- .../Squidex.Infrastructure.csproj | 2 +- .../Assets/AssetContentController.cs | 10 ++++--- .../Assets/Models/AssetContentQueryDto.cs | 27 +++++++++++++++++-- backend/src/Squidex/Squidex.csproj | 18 ++++++------- 7 files changed, 45 insertions(+), 20 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj index a20ab3725..80d6d2b83 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj @@ -23,7 +23,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj b/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj index 27c55ccf7..61b6843fa 100644 --- a/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj +++ b/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj @@ -24,7 +24,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj b/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj index 0b55c8a73..735c3d293 100644 --- a/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj +++ b/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj @@ -18,8 +18,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj index 1f56c70a3..3888a17eb 100644 --- a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj +++ b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj @@ -31,7 +31,7 @@ - + diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs index e06b56829..635229d73 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs @@ -142,19 +142,21 @@ namespace Squidex.Areas.Api.Controllers.Assets Response.Headers[HeaderNames.CacheControl] = $"public,max-age={request.CacheDuration}"; } - var resizeOptions = request.ToResizeOptions(asset); + var resizeOptions = request.ToResizeOptions(asset, HttpContext.Request); var contentLength = (long?)null; var contentCallback = (FileCallback?)null; - var contentType = request.Format?.ToMimeType() ?? asset.MimeType; + var contentType = asset.MimeType; - if (asset.Type == AssetType.Image && resizeOptions.IsValid) + if (asset.Type == AssetType.Image && assetThumbnailGenerator.IsResizable(asset.MimeType, resizeOptions, out var destinationMimeType)) { + contentType = destinationMimeType!; + contentCallback = async (body, range, ct) => { var suffix = resizeOptions.ToString(); - if (request.ForceResize) + if (request.Force) { using (Telemetry.Activities.StartActivity("Resize")) { diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs index a689709ea..55f0bc3fa 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs @@ -81,11 +81,17 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models [FromQuery(Name = "nofocus")] public bool IgnoreFocus { get; set; } + /// + /// True to use auto format. + /// + [FromQuery(Name = "auto")] + public bool Auto { get; set; } + /// /// True to force a new resize even if it already stored. /// [FromQuery(Name = "force")] - public bool ForceResize { get; set; } + public bool Force { get; set; } /// /// True to force a new resize even if it already stored. @@ -93,7 +99,7 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models [FromQuery(Name = "format")] public ImageFormat? Format { get; set; } - public ResizeOptions ToResizeOptions(IAssetEntity asset) + public ResizeOptions ToResizeOptions(IAssetEntity asset, HttpRequest request) { Guard.NotNull(asset); @@ -106,6 +112,23 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models result.TargetWidth = Width; result.TargetHeight = Height; + if (Auto && request.Headers.TryGetValue("Accept", out var accept)) + { + var formats = new List(); + + if (accept.Any(x => x.Contains("image/avif", StringComparison.OrdinalIgnoreCase))) + { + formats.Add(ImageFormat.AVIF); + } + + if (accept.Any(x => x.Contains("image/webp", StringComparison.OrdinalIgnoreCase))) + { + formats.Add(ImageFormat.WEBP); + } + + result.Formats = formats.ToArray(); + } + return result; } diff --git a/backend/src/Squidex/Squidex.csproj b/backend/src/Squidex/Squidex.csproj index 91cf649e4..858317e06 100644 --- a/backend/src/Squidex/Squidex.csproj +++ b/backend/src/Squidex/Squidex.csproj @@ -57,7 +57,7 @@ - + @@ -71,14 +71,14 @@ - - - - - - - - + + + + + + + +