From eb03145fa6fcee9babb6633219975c33de7d2c02 Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Fri, 4 Dec 2020 15:04:29 +0100 Subject: [PATCH] Moved media files and introduced IImageDimensionExtractor and to avoid System.drawing in core --- .../InstallSteps/StarterKitInstallStep.cs | 3 +-- .../Install/Models/InstallInstructions.cs | 0 .../Media/EmbedProviders/DailyMotion.cs | 7 ++++- .../Media/EmbedProviders/EmbedProviderBase.cs | 13 +++++++--- .../EmbedProvidersCollection.cs | 0 .../EmbedProvidersCollectionBuilder.cs | 0 .../Media/EmbedProviders/Flickr.cs | 5 ++++ .../Media/EmbedProviders/GettyImages.cs | 5 ++++ .../Media/EmbedProviders/Giphy.cs | 11 ++++---- .../Media/EmbedProviders/Hulu.cs | 7 ++++- .../Media/EmbedProviders/Issuu.cs | 7 ++++- .../Media/EmbedProviders/Kickstarter.cs | 5 ++++ .../Media/EmbedProviders/OEmbedResponse.cs | 17 ++++++------ .../Media/EmbedProviders/Slideshare.cs | 5 ++++ .../Media/EmbedProviders/SoundCloud.cs | 7 ++++- .../Media/EmbedProviders/Ted.cs | 7 ++++- .../Media/EmbedProviders/Twitter.cs | 5 ++++ .../Media/EmbedProviders/Vimeo.cs | 7 ++++- .../Media/EmbedProviders/Youtube.cs | 7 ++++- .../Media/Exif/BitConverterEx.cs | 0 .../Media/Exif/ExifBitConverter.cs | 0 .../Media/Exif/ExifEnums.cs | 0 .../Media/Exif/ExifExceptions.cs | 0 .../Media/Exif/ExifExtendedProperty.cs | 0 .../Media/Exif/ExifFileTypeDescriptor.cs | 0 .../Media/Exif/ExifInterOperability.cs | 0 .../Media/Exif/ExifProperty.cs | 0 .../Media/Exif/ExifPropertyCollection.cs | 0 .../Media/Exif/ExifPropertyFactory.cs | 0 .../Media/Exif/ExifTag.cs | 0 .../Media/Exif/ExifTagFactory.cs | 0 .../Media/Exif/IFD.cs | 0 .../Media/Exif/ImageFile.cs | 6 ----- .../Media/Exif/ImageFileDirectory.cs | 0 .../Media/Exif/ImageFileDirectoryEntry.cs | 0 .../Media/Exif/ImageFileFormat.cs | 0 .../Media/Exif/JFIFEnums.cs | 0 .../Media/Exif/JFIFExtendedProperty.cs | 0 .../Media/Exif/JFIFThumbnail.cs | 0 .../Media/Exif/JPEGExceptions.cs | 0 .../Media/Exif/JPEGFile.cs | 10 ------- .../Media/Exif/JPEGMarker.cs | 0 .../Media/Exif/JPEGSection.cs | 0 .../Media/Exif/MathEx.cs | 0 .../Media/Exif/SvgFile.cs | 8 +----- .../Media/Exif/TIFFFile.cs | 11 -------- .../Media/Exif/TIFFHeader.cs | 0 .../Media/Exif/TIFFStrip.cs | 0 .../Media/Exif/Utility.cs | 0 .../Media/ExifImageDimensionExtractor.cs | 26 +++++++++++++++++++ .../Media/TypeDetector/JpegDetector.cs | 0 .../TypeDetector/RasterizedTypeDetector.cs | 0 .../Media/TypeDetector/SvgDetector.cs | 0 .../Media/TypeDetector/TIFFDetector.cs | 0 .../Services}/IInstallationService.cs | 0 .../Install/InstallSteps/NewInstallStep.cs | 3 +-- .../Media/IImageDimensionExtractor.cs | 9 +++++++ ...geHelper.cs => ImageDimensionExtractor.cs} | 24 +++++------------ src/Umbraco.Infrastructure/Media/ImageSize.cs | 15 +++++++++++ .../Media/UploadAutoFillProperties.cs | 12 +++++---- .../Runtime/CoreInitialComposer.cs | 8 +++--- 61 files changed, 163 insertions(+), 87 deletions(-) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Install/InstallSteps/StarterKitInstallStep.cs (98%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Install/Models/InstallInstructions.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/DailyMotion.cs (86%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/EmbedProviderBase.cs (88%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/EmbedProvidersCollection.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/EmbedProvidersCollectionBuilder.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Flickr.cs (90%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/GettyImages.cs (86%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Giphy.cs (83%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Hulu.cs (85%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Issuu.cs (86%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Kickstarter.cs (84%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/OEmbedResponse.cs (78%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Slideshare.cs (85%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/SoundCloud.cs (84%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Ted.cs (85%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Twitter.cs (85%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Vimeo.cs (85%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/EmbedProviders/Youtube.cs (86%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/BitConverterEx.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifBitConverter.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifEnums.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifExceptions.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifExtendedProperty.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifFileTypeDescriptor.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifInterOperability.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifProperty.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifPropertyCollection.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifPropertyFactory.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifTag.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ExifTagFactory.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/IFD.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ImageFile.cs (94%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ImageFileDirectory.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ImageFileDirectoryEntry.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/ImageFileFormat.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/JFIFEnums.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/JFIFExtendedProperty.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/JFIFThumbnail.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/JPEGExceptions.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/JPEGFile.cs (99%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/JPEGMarker.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/JPEGSection.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/MathEx.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/SvgFile.cs (86%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/TIFFFile.cs (93%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/TIFFHeader.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/TIFFStrip.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/Exif/Utility.cs (100%) create mode 100644 src/Umbraco.Core/Media/ExifImageDimensionExtractor.cs rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/TypeDetector/JpegDetector.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/TypeDetector/RasterizedTypeDetector.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/TypeDetector/SvgDetector.cs (100%) rename src/{Umbraco.Infrastructure => Umbraco.Core}/Media/TypeDetector/TIFFDetector.cs (100%) rename src/{Umbraco.Infrastructure/Services/Implement => Umbraco.Core/Services}/IInstallationService.cs (100%) create mode 100644 src/Umbraco.Infrastructure/Media/IImageDimensionExtractor.cs rename src/Umbraco.Infrastructure/Media/{ImageHelper.cs => ImageDimensionExtractor.cs} (58%) create mode 100644 src/Umbraco.Infrastructure/Media/ImageSize.cs diff --git a/src/Umbraco.Infrastructure/Install/InstallSteps/StarterKitInstallStep.cs b/src/Umbraco.Core/Install/InstallSteps/StarterKitInstallStep.cs similarity index 98% rename from src/Umbraco.Infrastructure/Install/InstallSteps/StarterKitInstallStep.cs rename to src/Umbraco.Core/Install/InstallSteps/StarterKitInstallStep.cs index 4cd25c16bb..e3cd56c5c1 100644 --- a/src/Umbraco.Infrastructure/Install/InstallSteps/StarterKitInstallStep.cs +++ b/src/Umbraco.Core/Install/InstallSteps/StarterKitInstallStep.cs @@ -3,10 +3,9 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using Umbraco.Core.Security; -using Umbraco.Net; using Umbraco.Core.Services; +using Umbraco.Net; using Umbraco.Web.Install.Models; -using Umbraco.Web.Security; namespace Umbraco.Web.Install.InstallSteps { diff --git a/src/Umbraco.Infrastructure/Install/Models/InstallInstructions.cs b/src/Umbraco.Core/Install/Models/InstallInstructions.cs similarity index 100% rename from src/Umbraco.Infrastructure/Install/Models/InstallInstructions.cs rename to src/Umbraco.Core/Install/Models/InstallInstructions.cs diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/DailyMotion.cs b/src/Umbraco.Core/Media/EmbedProviders/DailyMotion.cs similarity index 86% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/DailyMotion.cs rename to src/Umbraco.Core/Media/EmbedProviders/DailyMotion.cs index 78ea0b8662..f56a29c2d5 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/DailyMotion.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/DailyMotion.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -10,7 +11,7 @@ namespace Umbraco.Web.Media.EmbedProviders { @"dailymotion.com/video/.*" }; - + public override Dictionary RequestParams => new Dictionary() { //ApiUrl/?format=xml @@ -24,5 +25,9 @@ namespace Umbraco.Web.Media.EmbedProviders return GetXmlProperty(xmlDocument, "/oembed/html"); } + + public DailyMotion(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/EmbedProviderBase.cs b/src/Umbraco.Core/Media/EmbedProviders/EmbedProviderBase.cs similarity index 88% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/EmbedProviderBase.cs rename to src/Umbraco.Core/Media/EmbedProviders/EmbedProviderBase.cs index 539c01f69b..cc7f5d2349 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/EmbedProviderBase.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/EmbedProviderBase.cs @@ -1,16 +1,23 @@ -using Newtonsoft.Json; -using System; +using System; using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Text; using System.Xml; using Umbraco.Core.Media; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { public abstract class EmbedProviderBase : IEmbedProvider { + private readonly IJsonSerializer _jsonSerializer; + + protected EmbedProviderBase(IJsonSerializer jsonSerializer) + { + _jsonSerializer = jsonSerializer; + } + private static HttpClient _httpClient; public abstract string ApiEndpoint { get; } @@ -58,7 +65,7 @@ namespace Umbraco.Web.Media.EmbedProviders public virtual T GetJsonResponse(string url) where T : class { var response = DownloadResponse(url); - return JsonConvert.DeserializeObject(response); + return _jsonSerializer.Deserialize(response); } public virtual XmlDocument GetXmlResponse(string url) diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/EmbedProvidersCollection.cs b/src/Umbraco.Core/Media/EmbedProviders/EmbedProvidersCollection.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/EmbedProvidersCollection.cs rename to src/Umbraco.Core/Media/EmbedProviders/EmbedProvidersCollection.cs diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/EmbedProvidersCollectionBuilder.cs b/src/Umbraco.Core/Media/EmbedProviders/EmbedProvidersCollectionBuilder.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/EmbedProvidersCollectionBuilder.cs rename to src/Umbraco.Core/Media/EmbedProviders/EmbedProvidersCollectionBuilder.cs diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Flickr.cs b/src/Umbraco.Core/Media/EmbedProviders/Flickr.cs similarity index 90% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Flickr.cs rename to src/Umbraco.Core/Media/EmbedProviders/Flickr.cs index d067060014..a6ead2df3a 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Flickr.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Flickr.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Net; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -27,5 +28,9 @@ namespace Umbraco.Web.Media.EmbedProviders return string.Format("\"{3}\"", imageUrl, imageWidth, imageHeight, WebUtility.HtmlEncode(imageTitle)); } + + public Flickr(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/GettyImages.cs b/src/Umbraco.Core/Media/EmbedProviders/GettyImages.cs similarity index 86% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/GettyImages.cs rename to src/Umbraco.Core/Media/EmbedProviders/GettyImages.cs index 34b383614d..0db0a97b8e 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/GettyImages.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/GettyImages.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -23,5 +24,9 @@ namespace Umbraco.Web.Media.EmbedProviders return oembed.GetHtml(); } + + public GettyImages(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Giphy.cs b/src/Umbraco.Core/Media/EmbedProviders/Giphy.cs similarity index 83% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Giphy.cs rename to src/Umbraco.Core/Media/EmbedProviders/Giphy.cs index 1069de749c..319afda5b6 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Giphy.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Giphy.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -28,5 +25,9 @@ namespace Umbraco.Web.Media.EmbedProviders return oembed.GetHtml(); } + + public Giphy(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Hulu.cs b/src/Umbraco.Core/Media/EmbedProviders/Hulu.cs similarity index 85% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Hulu.cs rename to src/Umbraco.Core/Media/EmbedProviders/Hulu.cs index 150439832a..4deea8c23d 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Hulu.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Hulu.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -10,7 +11,7 @@ namespace Umbraco.Web.Media.EmbedProviders { @"hulu.com/watch/.*" }; - + public override Dictionary RequestParams => new Dictionary(); public override string GetMarkup(string url, int maxWidth = 0, int maxHeight = 0) @@ -20,5 +21,9 @@ namespace Umbraco.Web.Media.EmbedProviders return oembed.GetHtml(); } + + public Hulu(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Issuu.cs b/src/Umbraco.Core/Media/EmbedProviders/Issuu.cs similarity index 86% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Issuu.cs rename to src/Umbraco.Core/Media/EmbedProviders/Issuu.cs index 2b33473453..3baaf7ea35 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Issuu.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Issuu.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -10,7 +11,7 @@ namespace Umbraco.Web.Media.EmbedProviders { @"issuu.com/.*/docs/.*" }; - + public override Dictionary RequestParams => new Dictionary() { //ApiUrl/?format=xml @@ -24,5 +25,9 @@ namespace Umbraco.Web.Media.EmbedProviders return GetXmlProperty(xmlDocument, "/oembed/html"); } + + public Issuu(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Kickstarter.cs b/src/Umbraco.Core/Media/EmbedProviders/Kickstarter.cs similarity index 84% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Kickstarter.cs rename to src/Umbraco.Core/Media/EmbedProviders/Kickstarter.cs index 4de45ae2e3..ef75b6ebe8 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Kickstarter.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Kickstarter.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -20,5 +21,9 @@ namespace Umbraco.Web.Media.EmbedProviders return oembed.GetHtml(); } + + public Kickstarter(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/OEmbedResponse.cs b/src/Umbraco.Core/Media/EmbedProviders/OEmbedResponse.cs similarity index 78% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/OEmbedResponse.cs rename to src/Umbraco.Core/Media/EmbedProviders/OEmbedResponse.cs index cc3e34931e..8178a97742 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/OEmbedResponse.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/OEmbedResponse.cs @@ -1,11 +1,12 @@ using System.Net; -using Newtonsoft.Json; +using System.Runtime.Serialization; namespace Umbraco.Web.Media.EmbedProviders { /// /// Wrapper class for OEmbed response /// + [DataContract] public class OEmbedResponse { public string Type { get; set; } @@ -14,25 +15,25 @@ namespace Umbraco.Web.Media.EmbedProviders public string Title { get; set; } - [JsonProperty("author_name")] + [DataMember(Name ="author_name")] public string AuthorName { get; set; } - [JsonProperty("author_url")] + [DataMember(Name ="author_url")] public string AuthorUrl { get; set; } - [JsonProperty("provider_name")] + [DataMember(Name ="provider_name")] public string ProviderName { get; set; } - [JsonProperty("provider_url")] + [DataMember(Name ="provider_url")] public string ProviderUrl { get; set; } - [JsonProperty("thumbnail_url")] + [DataMember(Name ="thumbnail_url")] public string ThumbnailUrl { get; set; } - [JsonProperty("thumbnail_height")] + [DataMember(Name ="thumbnail_height")] public double? ThumbnailHeight { get; set; } - [JsonProperty("thumbnail_width")] + [DataMember(Name ="thumbnail_width")] public double? ThumbnailWidth { get; set; } public string Html { get; set; } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Slideshare.cs b/src/Umbraco.Core/Media/EmbedProviders/Slideshare.cs similarity index 85% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Slideshare.cs rename to src/Umbraco.Core/Media/EmbedProviders/Slideshare.cs index 6d3a010c7a..7fa149d145 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Slideshare.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Slideshare.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -20,5 +21,9 @@ namespace Umbraco.Web.Media.EmbedProviders return GetXmlProperty(xmlDocument, "/oembed/html"); } + + public Slideshare(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/SoundCloud.cs b/src/Umbraco.Core/Media/EmbedProviders/SoundCloud.cs similarity index 84% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/SoundCloud.cs rename to src/Umbraco.Core/Media/EmbedProviders/SoundCloud.cs index 080437a246..43cc92b0b4 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/SoundCloud.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/SoundCloud.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -10,7 +11,7 @@ namespace Umbraco.Web.Media.EmbedProviders { @"soundcloud.com\/*" }; - + public override Dictionary RequestParams => new Dictionary(); public override string GetMarkup(string url, int maxWidth = 0, int maxHeight = 0) @@ -20,5 +21,9 @@ namespace Umbraco.Web.Media.EmbedProviders return GetXmlProperty(xmlDocument, "/oembed/html"); } + + public Soundcloud(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Ted.cs b/src/Umbraco.Core/Media/EmbedProviders/Ted.cs similarity index 85% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Ted.cs rename to src/Umbraco.Core/Media/EmbedProviders/Ted.cs index aa14423349..cd4b78d065 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Ted.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Ted.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -10,7 +11,7 @@ namespace Umbraco.Web.Media.EmbedProviders { @"ted.com\/talks\/*" }; - + public override Dictionary RequestParams => new Dictionary(); public override string GetMarkup(string url, int maxWidth = 0, int maxHeight = 0) @@ -20,5 +21,9 @@ namespace Umbraco.Web.Media.EmbedProviders return GetXmlProperty(xmlDocument, "/oembed/html"); } + + public Ted(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Twitter.cs b/src/Umbraco.Core/Media/EmbedProviders/Twitter.cs similarity index 85% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Twitter.cs rename to src/Umbraco.Core/Media/EmbedProviders/Twitter.cs index 9286934a4d..2bb4203411 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Twitter.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Twitter.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -20,5 +21,9 @@ namespace Umbraco.Web.Media.EmbedProviders return oembed.GetHtml(); } + + public Twitter(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Vimeo.cs b/src/Umbraco.Core/Media/EmbedProviders/Vimeo.cs similarity index 85% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Vimeo.cs rename to src/Umbraco.Core/Media/EmbedProviders/Vimeo.cs index 806f40a10c..709ba61b3b 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Vimeo.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Vimeo.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -10,7 +11,7 @@ namespace Umbraco.Web.Media.EmbedProviders { @"vimeo\.com/" }; - + public override Dictionary RequestParams => new Dictionary(); public override string GetMarkup(string url, int maxWidth = 0, int maxHeight = 0) @@ -20,5 +21,9 @@ namespace Umbraco.Web.Media.EmbedProviders return GetXmlProperty(xmlDocument, "/oembed/html"); } + + public Vimeo(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/EmbedProviders/Youtube.cs b/src/Umbraco.Core/Media/EmbedProviders/Youtube.cs similarity index 86% rename from src/Umbraco.Infrastructure/Media/EmbedProviders/Youtube.cs rename to src/Umbraco.Core/Media/EmbedProviders/Youtube.cs index 4e6f437047..30b83caa88 100644 --- a/src/Umbraco.Infrastructure/Media/EmbedProviders/Youtube.cs +++ b/src/Umbraco.Core/Media/EmbedProviders/Youtube.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Umbraco.Core.Serialization; namespace Umbraco.Web.Media.EmbedProviders { @@ -11,7 +12,7 @@ namespace Umbraco.Web.Media.EmbedProviders @"youtu.be/.*", @"youtube.com/watch.*" }; - + public override Dictionary RequestParams => new Dictionary() { //ApiUrl/?format=json @@ -25,5 +26,9 @@ namespace Umbraco.Web.Media.EmbedProviders return oembed.GetHtml(); } + + public YouTube(IJsonSerializer jsonSerializer) : base(jsonSerializer) + { + } } } diff --git a/src/Umbraco.Infrastructure/Media/Exif/BitConverterEx.cs b/src/Umbraco.Core/Media/Exif/BitConverterEx.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/BitConverterEx.cs rename to src/Umbraco.Core/Media/Exif/BitConverterEx.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifBitConverter.cs b/src/Umbraco.Core/Media/Exif/ExifBitConverter.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifBitConverter.cs rename to src/Umbraco.Core/Media/Exif/ExifBitConverter.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifEnums.cs b/src/Umbraco.Core/Media/Exif/ExifEnums.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifEnums.cs rename to src/Umbraco.Core/Media/Exif/ExifEnums.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifExceptions.cs b/src/Umbraco.Core/Media/Exif/ExifExceptions.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifExceptions.cs rename to src/Umbraco.Core/Media/Exif/ExifExceptions.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifExtendedProperty.cs b/src/Umbraco.Core/Media/Exif/ExifExtendedProperty.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifExtendedProperty.cs rename to src/Umbraco.Core/Media/Exif/ExifExtendedProperty.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifFileTypeDescriptor.cs b/src/Umbraco.Core/Media/Exif/ExifFileTypeDescriptor.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifFileTypeDescriptor.cs rename to src/Umbraco.Core/Media/Exif/ExifFileTypeDescriptor.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifInterOperability.cs b/src/Umbraco.Core/Media/Exif/ExifInterOperability.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifInterOperability.cs rename to src/Umbraco.Core/Media/Exif/ExifInterOperability.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifProperty.cs b/src/Umbraco.Core/Media/Exif/ExifProperty.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifProperty.cs rename to src/Umbraco.Core/Media/Exif/ExifProperty.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifPropertyCollection.cs b/src/Umbraco.Core/Media/Exif/ExifPropertyCollection.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifPropertyCollection.cs rename to src/Umbraco.Core/Media/Exif/ExifPropertyCollection.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifPropertyFactory.cs b/src/Umbraco.Core/Media/Exif/ExifPropertyFactory.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifPropertyFactory.cs rename to src/Umbraco.Core/Media/Exif/ExifPropertyFactory.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifTag.cs b/src/Umbraco.Core/Media/Exif/ExifTag.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifTag.cs rename to src/Umbraco.Core/Media/Exif/ExifTag.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ExifTagFactory.cs b/src/Umbraco.Core/Media/Exif/ExifTagFactory.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ExifTagFactory.cs rename to src/Umbraco.Core/Media/Exif/ExifTagFactory.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/IFD.cs b/src/Umbraco.Core/Media/Exif/IFD.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/IFD.cs rename to src/Umbraco.Core/Media/Exif/IFD.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ImageFile.cs b/src/Umbraco.Core/Media/Exif/ImageFile.cs similarity index 94% rename from src/Umbraco.Infrastructure/Media/Exif/ImageFile.cs rename to src/Umbraco.Core/Media/Exif/ImageFile.cs index acd8ce8eec..f59f9dc73f 100644 --- a/src/Umbraco.Infrastructure/Media/Exif/ImageFile.cs +++ b/src/Umbraco.Core/Media/Exif/ImageFile.cs @@ -1,5 +1,4 @@ using System.ComponentModel; -using System.Drawing; using System.IO; using System.Text; using Umbraco.Web.Media.TypeDetector; @@ -52,11 +51,6 @@ namespace Umbraco.Web.Media.Exif #endregion #region Instance Methods - /// - /// Converts the to a . - /// - /// Returns a containing image data. - public abstract Image ToImage (); /// /// Saves the to the specified file. diff --git a/src/Umbraco.Infrastructure/Media/Exif/ImageFileDirectory.cs b/src/Umbraco.Core/Media/Exif/ImageFileDirectory.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ImageFileDirectory.cs rename to src/Umbraco.Core/Media/Exif/ImageFileDirectory.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ImageFileDirectoryEntry.cs b/src/Umbraco.Core/Media/Exif/ImageFileDirectoryEntry.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ImageFileDirectoryEntry.cs rename to src/Umbraco.Core/Media/Exif/ImageFileDirectoryEntry.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/ImageFileFormat.cs b/src/Umbraco.Core/Media/Exif/ImageFileFormat.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/ImageFileFormat.cs rename to src/Umbraco.Core/Media/Exif/ImageFileFormat.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/JFIFEnums.cs b/src/Umbraco.Core/Media/Exif/JFIFEnums.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/JFIFEnums.cs rename to src/Umbraco.Core/Media/Exif/JFIFEnums.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/JFIFExtendedProperty.cs b/src/Umbraco.Core/Media/Exif/JFIFExtendedProperty.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/JFIFExtendedProperty.cs rename to src/Umbraco.Core/Media/Exif/JFIFExtendedProperty.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/JFIFThumbnail.cs b/src/Umbraco.Core/Media/Exif/JFIFThumbnail.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/JFIFThumbnail.cs rename to src/Umbraco.Core/Media/Exif/JFIFThumbnail.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/JPEGExceptions.cs b/src/Umbraco.Core/Media/Exif/JPEGExceptions.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/JPEGExceptions.cs rename to src/Umbraco.Core/Media/Exif/JPEGExceptions.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/JPEGFile.cs b/src/Umbraco.Core/Media/Exif/JPEGFile.cs similarity index 99% rename from src/Umbraco.Infrastructure/Media/Exif/JPEGFile.cs rename to src/Umbraco.Core/Media/Exif/JPEGFile.cs index 35c3788abd..83e6a81eec 100644 --- a/src/Umbraco.Infrastructure/Media/Exif/JPEGFile.cs +++ b/src/Umbraco.Core/Media/Exif/JPEGFile.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Drawing; using System.IO; using System.Text; @@ -260,15 +259,6 @@ namespace Umbraco.Web.Media.Exif Save(stream, true); } - /// - /// Returns a System.Drawing.Image created with image data. - /// - public override Image ToImage() - { - MemoryStream stream = new MemoryStream(); - Save(stream); - return Image.FromStream(stream); - } #endregion #region Private Helper Methods diff --git a/src/Umbraco.Infrastructure/Media/Exif/JPEGMarker.cs b/src/Umbraco.Core/Media/Exif/JPEGMarker.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/JPEGMarker.cs rename to src/Umbraco.Core/Media/Exif/JPEGMarker.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/JPEGSection.cs b/src/Umbraco.Core/Media/Exif/JPEGSection.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/JPEGSection.cs rename to src/Umbraco.Core/Media/Exif/JPEGSection.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/MathEx.cs b/src/Umbraco.Core/Media/Exif/MathEx.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/MathEx.cs rename to src/Umbraco.Core/Media/Exif/MathEx.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/SvgFile.cs b/src/Umbraco.Core/Media/Exif/SvgFile.cs similarity index 86% rename from src/Umbraco.Infrastructure/Media/Exif/SvgFile.cs rename to src/Umbraco.Core/Media/Exif/SvgFile.cs index 8916ac0801..1213bb513f 100644 --- a/src/Umbraco.Infrastructure/Media/Exif/SvgFile.cs +++ b/src/Umbraco.Core/Media/Exif/SvgFile.cs @@ -1,6 +1,4 @@ -using System; -using System.Drawing; -using System.IO; +using System.IO; using System.Linq; using System.Xml.Linq; @@ -29,9 +27,5 @@ namespace Umbraco.Web.Media.Exif { } - public override Image ToImage() - { - throw new NotImplementedException(); - } } } diff --git a/src/Umbraco.Infrastructure/Media/Exif/TIFFFile.cs b/src/Umbraco.Core/Media/Exif/TIFFFile.cs similarity index 93% rename from src/Umbraco.Infrastructure/Media/Exif/TIFFFile.cs rename to src/Umbraco.Core/Media/Exif/TIFFFile.cs index 4f5301d526..19575eaff2 100644 --- a/src/Umbraco.Infrastructure/Media/Exif/TIFFFile.cs +++ b/src/Umbraco.Core/Media/Exif/TIFFFile.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Drawing; using System.IO; namespace Umbraco.Web.Media.Exif @@ -162,16 +161,6 @@ namespace Umbraco.Web.Media.Exif } } - /// - /// Converts the to a . - /// - /// Returns a containing image data. - public override Image ToImage() - { - MemoryStream stream = new MemoryStream(); - Save(stream); - return Image.FromStream(stream); - } #endregion } } diff --git a/src/Umbraco.Infrastructure/Media/Exif/TIFFHeader.cs b/src/Umbraco.Core/Media/Exif/TIFFHeader.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/TIFFHeader.cs rename to src/Umbraco.Core/Media/Exif/TIFFHeader.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/TIFFStrip.cs b/src/Umbraco.Core/Media/Exif/TIFFStrip.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/TIFFStrip.cs rename to src/Umbraco.Core/Media/Exif/TIFFStrip.cs diff --git a/src/Umbraco.Infrastructure/Media/Exif/Utility.cs b/src/Umbraco.Core/Media/Exif/Utility.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/Exif/Utility.cs rename to src/Umbraco.Core/Media/Exif/Utility.cs diff --git a/src/Umbraco.Core/Media/ExifImageDimensionExtractor.cs b/src/Umbraco.Core/Media/ExifImageDimensionExtractor.cs new file mode 100644 index 0000000000..441d2d6170 --- /dev/null +++ b/src/Umbraco.Core/Media/ExifImageDimensionExtractor.cs @@ -0,0 +1,26 @@ +using System; +using System.IO; +using Umbraco.Web.Media.Exif; + +namespace Umbraco.Core.Media +{ + public static class ExifImageDimensionExtractor + { + public static bool TryGetDimensions(Stream stream, out int width, out int height) + { + var jpgInfo = ImageFile.FromStream(stream); + height = -1; + width = -1; + if (jpgInfo != null + && jpgInfo.Format != ImageFileFormat.Unknown + && jpgInfo.Properties.ContainsKey(ExifTag.PixelYDimension) + && jpgInfo.Properties.ContainsKey(ExifTag.PixelXDimension)) + { + height = Convert.ToInt32(jpgInfo.Properties[ExifTag.PixelYDimension].Value); + width = Convert.ToInt32(jpgInfo.Properties[ExifTag.PixelXDimension].Value); + } + + return height > 0 && width > 0; + } + } +} diff --git a/src/Umbraco.Infrastructure/Media/TypeDetector/JpegDetector.cs b/src/Umbraco.Core/Media/TypeDetector/JpegDetector.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/TypeDetector/JpegDetector.cs rename to src/Umbraco.Core/Media/TypeDetector/JpegDetector.cs diff --git a/src/Umbraco.Infrastructure/Media/TypeDetector/RasterizedTypeDetector.cs b/src/Umbraco.Core/Media/TypeDetector/RasterizedTypeDetector.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/TypeDetector/RasterizedTypeDetector.cs rename to src/Umbraco.Core/Media/TypeDetector/RasterizedTypeDetector.cs diff --git a/src/Umbraco.Infrastructure/Media/TypeDetector/SvgDetector.cs b/src/Umbraco.Core/Media/TypeDetector/SvgDetector.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/TypeDetector/SvgDetector.cs rename to src/Umbraco.Core/Media/TypeDetector/SvgDetector.cs diff --git a/src/Umbraco.Infrastructure/Media/TypeDetector/TIFFDetector.cs b/src/Umbraco.Core/Media/TypeDetector/TIFFDetector.cs similarity index 100% rename from src/Umbraco.Infrastructure/Media/TypeDetector/TIFFDetector.cs rename to src/Umbraco.Core/Media/TypeDetector/TIFFDetector.cs diff --git a/src/Umbraco.Infrastructure/Services/Implement/IInstallationService.cs b/src/Umbraco.Core/Services/IInstallationService.cs similarity index 100% rename from src/Umbraco.Infrastructure/Services/Implement/IInstallationService.cs rename to src/Umbraco.Core/Services/IInstallationService.cs diff --git a/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs b/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs index 96e4a9ae34..234f414f5f 100644 --- a/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs +++ b/src/Umbraco.Infrastructure/Install/InstallSteps/NewInstallStep.cs @@ -7,7 +7,6 @@ using Microsoft.Extensions.Options; using Newtonsoft.Json; using Umbraco.Core; using Umbraco.Core.BackOffice; -using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Migrations.Install; using Umbraco.Core.Services; @@ -25,7 +24,7 @@ namespace Umbraco.Web.Install.InstallSteps /// display a simple continue installation view. /// [InstallSetupStep(InstallationType.NewInstall, "User", 20, "")] - internal class NewInstallStep : InstallSetupStep + public class NewInstallStep : InstallSetupStep { private readonly IUserService _userService; private readonly DatabaseBuilder _databaseBuilder; diff --git a/src/Umbraco.Infrastructure/Media/IImageDimensionExtractor.cs b/src/Umbraco.Infrastructure/Media/IImageDimensionExtractor.cs new file mode 100644 index 0000000000..3da7f37393 --- /dev/null +++ b/src/Umbraco.Infrastructure/Media/IImageDimensionExtractor.cs @@ -0,0 +1,9 @@ +using System.IO; + +namespace Umbraco.Web.Media +{ + public interface IImageDimensionExtractor + { + public ImageSize GetDimensions(Stream stream); + } +} diff --git a/src/Umbraco.Infrastructure/Media/ImageHelper.cs b/src/Umbraco.Infrastructure/Media/ImageDimensionExtractor.cs similarity index 58% rename from src/Umbraco.Infrastructure/Media/ImageHelper.cs rename to src/Umbraco.Infrastructure/Media/ImageDimensionExtractor.cs index ee01ec4a1c..538c559cf6 100644 --- a/src/Umbraco.Infrastructure/Media/ImageHelper.cs +++ b/src/Umbraco.Infrastructure/Media/ImageDimensionExtractor.cs @@ -2,11 +2,11 @@ using System.Drawing; using System.IO; using Umbraco.Core; -using Umbraco.Web.Media.Exif; +using Umbraco.Core.Media; namespace Umbraco.Web.Media { - public static class ImageHelper + internal class ImageDimensionExtractor : IImageDimensionExtractor { /// /// Gets the dimensions of an image. @@ -16,24 +16,14 @@ namespace Umbraco.Web.Media /// First try with EXIF as it is faster and does not load the entire image /// in memory. Fallback to GDI which means loading the image in memory and thus /// use potentially large amounts of memory. - public static Size GetDimensions(Stream stream) + public ImageSize GetDimensions(Stream stream) { //Try to load with exif try { - var jpgInfo = ImageFile.FromStream(stream); - - if (jpgInfo != null - && jpgInfo.Format != ImageFileFormat.Unknown - && jpgInfo.Properties.ContainsKey(ExifTag.PixelYDimension) - && jpgInfo.Properties.ContainsKey(ExifTag.PixelXDimension)) + if (ExifImageDimensionExtractor.TryGetDimensions(stream, out var width, out var height)) { - var height = Convert.ToInt32(jpgInfo.Properties[ExifTag.PixelYDimension].Value); - var width = Convert.ToInt32(jpgInfo.Properties[ExifTag.PixelXDimension].Value); - if (height > 0 && width > 0) - { - return new Size(width, height); - } + return new ImageSize(width, height); } } catch @@ -48,7 +38,7 @@ namespace Umbraco.Web.Media { var fileWidth = image.Width; var fileHeight = image.Height; - return new Size(fileWidth, fileHeight); + return new ImageSize(fileWidth, fileHeight); } } catch (Exception) @@ -56,7 +46,7 @@ namespace Umbraco.Web.Media //We will just swallow, just means we can't read via GDI, we don't want to log an error either } - return new Size(Constants.Conventions.Media.DefaultSize, Constants.Conventions.Media.DefaultSize); + return new ImageSize(Constants.Conventions.Media.DefaultSize, Constants.Conventions.Media.DefaultSize); } } } diff --git a/src/Umbraco.Infrastructure/Media/ImageSize.cs b/src/Umbraco.Infrastructure/Media/ImageSize.cs new file mode 100644 index 0000000000..6d073ac196 --- /dev/null +++ b/src/Umbraco.Infrastructure/Media/ImageSize.cs @@ -0,0 +1,15 @@ +namespace Umbraco.Web.Media +{ + public struct ImageSize + { + public int Width { get; } + public int Height { get; } + + + public ImageSize(int width, int height) + { + Width = width; + Height = height; + } + } +} diff --git a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs index deeed7a07c..44d5f5c8c3 100644 --- a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs +++ b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs @@ -1,5 +1,4 @@ using System; -using System.Drawing; using System.IO; using Microsoft.Extensions.Logging; using Umbraco.Core; @@ -18,15 +17,18 @@ namespace Umbraco.Web.Media private readonly IMediaFileSystem _mediaFileSystem; private readonly ILogger _logger; private readonly IImageUrlGenerator _imageUrlGenerator; + private readonly IImageDimensionExtractor _imageDimensionExtractor; public UploadAutoFillProperties( IMediaFileSystem mediaFileSystem, ILogger logger, - IImageUrlGenerator imageUrlGenerator) + IImageUrlGenerator imageUrlGenerator, + IImageDimensionExtractor imageDimensionExtractor) { _mediaFileSystem = mediaFileSystem ?? throw new ArgumentNullException(nameof(mediaFileSystem)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _imageUrlGenerator = imageUrlGenerator ?? throw new ArgumentNullException(nameof(imageUrlGenerator)); + _imageDimensionExtractor = imageDimensionExtractor ?? throw new ArgumentNullException(nameof(imageDimensionExtractor)); } /// @@ -71,7 +73,7 @@ namespace Umbraco.Web.Media using (var filestream = _mediaFileSystem.OpenFile(filepath)) { var extension = (Path.GetExtension(filepath) ?? "").TrimStart('.'); - var size = _imageUrlGenerator.IsSupportedImageFormat(extension) ? (Size?)ImageHelper.GetDimensions(filestream) : null; + var size = _imageUrlGenerator.IsSupportedImageFormat(extension) ? (ImageSize?)_imageDimensionExtractor.GetDimensions(filestream) : null; SetProperties(content, autoFillConfig, size, filestream.Length, extension, culture, segment); } } @@ -105,12 +107,12 @@ namespace Umbraco.Web.Media else { var extension = (Path.GetExtension(filepath) ?? "").TrimStart('.'); - var size = _imageUrlGenerator.IsSupportedImageFormat(extension) ? (Size?)ImageHelper.GetDimensions(filestream) : null; + var size = _imageUrlGenerator.IsSupportedImageFormat(extension) ? (ImageSize?)_imageDimensionExtractor.GetDimensions(filestream) : null; SetProperties(content, autoFillConfig, size, filestream.Length, extension, culture, segment); } } - private static void SetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, Size? size, long length, string extension, string culture, string segment) + private static void SetProperties(IContentBase content, ImagingAutoFillUploadField autoFillConfig, ImageSize? size, long length, string extension, string culture, string segment) { if (content == null) throw new ArgumentNullException(nameof(content)); if (autoFillConfig == null) throw new ArgumentNullException(nameof(autoFillConfig)); diff --git a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs index 2a988a70a4..b199a7e8dc 100644 --- a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs +++ b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs @@ -1,6 +1,7 @@ using System; using Examine; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Umbraco.Core.Cache; using Umbraco.Core.Composing; @@ -9,6 +10,7 @@ using Umbraco.Core.Configuration; using Umbraco.Core.Configuration.Grid; using Umbraco.Core.Configuration.Models; using Umbraco.Core.Dashboards; +using Umbraco.Core.DependencyInjection; using Umbraco.Core.Dictionary; using Umbraco.Core.Events; using Umbraco.Core.Hosting; @@ -25,6 +27,7 @@ using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.Validators; using Umbraco.Core.PropertyEditors.ValueConverters; using Umbraco.Core.Scoping; +using Umbraco.Core.Security; using Umbraco.Core.Serialization; using Umbraco.Core.Services; using Umbraco.Core.Services.Implement; @@ -56,11 +59,7 @@ using Umbraco.Web.Sections; using Umbraco.Web.Services; using Umbraco.Web.Templates; using Umbraco.Web.Trees; -using IntegerValidator = Umbraco.Core.PropertyEditors.Validators.IntegerValidator; using TextStringValueConverter = Umbraco.Core.PropertyEditors.ValueConverters.TextStringValueConverter; -using Microsoft.Extensions.Logging; -using Umbraco.Core.DependencyInjection; -using Umbraco.Core.Security; namespace Umbraco.Core.Runtime { @@ -379,6 +378,7 @@ namespace Umbraco.Core.Runtime builder.Services.AddUnique(); builder.Services.AddUnique(); builder.Services.AddUnique(); + builder.Services.AddUnique(); } } }