mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-04 03:27:21 -05:00 
			
		
		
		
	Remove incorrect mime type image/jpg
This commit is contained in:
		
							parent
							
								
									c6a1dcf420
								
							
						
					
					
						commit
						dc222b75c5
					
				@ -9,6 +9,7 @@ using Emby.Dlna.Main;
 | 
				
			|||||||
using Jellyfin.Api.Attributes;
 | 
					using Jellyfin.Api.Attributes;
 | 
				
			||||||
using Jellyfin.Api.Constants;
 | 
					using Jellyfin.Api.Constants;
 | 
				
			||||||
using MediaBrowser.Controller.Dlna;
 | 
					using MediaBrowser.Controller.Dlna;
 | 
				
			||||||
 | 
					using MediaBrowser.Model.Net;
 | 
				
			||||||
using Microsoft.AspNetCore.Authorization;
 | 
					using Microsoft.AspNetCore.Authorization;
 | 
				
			||||||
using Microsoft.AspNetCore.Http;
 | 
					using Microsoft.AspNetCore.Http;
 | 
				
			||||||
using Microsoft.AspNetCore.Mvc;
 | 
					using Microsoft.AspNetCore.Mvc;
 | 
				
			||||||
@ -337,11 +338,7 @@ namespace Jellyfin.Api.Controllers
 | 
				
			|||||||
                return NotFound();
 | 
					                return NotFound();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var contentType = "image/" + Path.GetExtension(fileName)
 | 
					            return File(icon.Stream, MimeTypes.GetMimeType(fileName));
 | 
				
			||||||
                .TrimStart('.')
 | 
					 | 
				
			||||||
                .ToLowerInvariant();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return File(icon.Stream, contentType);
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private string GetAbsoluteUri()
 | 
					        private string GetAbsoluteUri()
 | 
				
			||||||
 | 
				
			|||||||
@ -1878,8 +1878,8 @@ namespace Jellyfin.Api.Controllers
 | 
				
			|||||||
            if (!supportsWebP)
 | 
					            if (!supportsWebP)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var userAgent = Request.Headers[HeaderNames.UserAgent].ToString();
 | 
					                var userAgent = Request.Headers[HeaderNames.UserAgent].ToString();
 | 
				
			||||||
                if (userAgent.IndexOf("crosswalk", StringComparison.OrdinalIgnoreCase) != -1 &&
 | 
					                if (userAgent.Contains("crosswalk", StringComparison.OrdinalIgnoreCase)
 | 
				
			||||||
                    userAgent.IndexOf("android", StringComparison.OrdinalIgnoreCase) != -1)
 | 
					                    && userAgent.Contains("android", StringComparison.OrdinalIgnoreCase))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    supportsWebP = true;
 | 
					                    supportsWebP = true;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -1905,10 +1905,7 @@ namespace Jellyfin.Api.Controllers
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        private bool SupportsFormat(IReadOnlyCollection<string> requestAcceptTypes, string acceptParam, ImageFormat format, bool acceptAll)
 | 
					        private bool SupportsFormat(IReadOnlyCollection<string> requestAcceptTypes, string acceptParam, ImageFormat format, bool acceptAll)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var normalized = format.ToString().ToLowerInvariant();
 | 
					            if (requestAcceptTypes.Contains(format.GetMimeType()))
 | 
				
			||||||
            var mimeType = "image/" + normalized;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (requestAcceptTypes.Contains(mimeType))
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -1918,6 +1915,8 @@ namespace Jellyfin.Api.Controllers
 | 
				
			|||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Review if this should be jpeg, jpg or both for ImageFormat.Jpg
 | 
				
			||||||
 | 
					            var normalized = format.ToString().ToLowerInvariant();
 | 
				
			||||||
            return string.Equals(acceptParam, normalized, StringComparison.OrdinalIgnoreCase);
 | 
					            return string.Equals(acceptParam, normalized, StringComparison.OrdinalIgnoreCase);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										27
									
								
								MediaBrowser.Model/Drawing/ImageFormatExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								MediaBrowser.Model/Drawing/ImageFormatExtensions.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					using System.ComponentModel;
 | 
				
			||||||
 | 
					using System.Net.Mime;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MediaBrowser.Model.Drawing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// <summary>
 | 
				
			||||||
 | 
					/// Extension class for the <see cref="ImageFormat" /> enum.
 | 
				
			||||||
 | 
					/// </summary>
 | 
				
			||||||
 | 
					public static class ImageFormatExtensions
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Returns the correct mime type for this <see cref="ImageFormat" />.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    /// <param name="format">This <see cref="ImageFormat" />.</param>
 | 
				
			||||||
 | 
					    /// <exception cref="InvalidEnumArgumentException">The <paramref name="format"/> is an invalid enumeration value.</exception>
 | 
				
			||||||
 | 
					    /// <returns>The correct mime type for this <see cref="ImageFormat" />.</returns>
 | 
				
			||||||
 | 
					    public static string GetMimeType(this ImageFormat format)
 | 
				
			||||||
 | 
					        => format switch
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ImageFormat.Bmp => "image/bmp",
 | 
				
			||||||
 | 
					            ImageFormat.Gif => MediaTypeNames.Image.Gif,
 | 
				
			||||||
 | 
					            ImageFormat.Jpg => MediaTypeNames.Image.Jpeg,
 | 
				
			||||||
 | 
					            ImageFormat.Png => "image/png",
 | 
				
			||||||
 | 
					            ImageFormat.Webp => "image/webp",
 | 
				
			||||||
 | 
					            _ => throw new InvalidEnumArgumentException(nameof(format), (int)format, typeof(ImageFormat))
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -116,7 +116,6 @@ namespace MediaBrowser.Model.Net
 | 
				
			|||||||
            { "audio/x-wavpack", ".wv" },
 | 
					            { "audio/x-wavpack", ".wv" },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Type image
 | 
					            // Type image
 | 
				
			||||||
            { "image/jpg", ".jpg" },
 | 
					 | 
				
			||||||
            { "image/jpeg", ".jpg" },
 | 
					            { "image/jpeg", ".jpg" },
 | 
				
			||||||
            { "image/x-png", ".png" },
 | 
					            { "image/x-png", ".png" },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -14,6 +14,7 @@ using MediaBrowser.Controller.Library;
 | 
				
			|||||||
using MediaBrowser.Controller.LiveTv;
 | 
					using MediaBrowser.Controller.LiveTv;
 | 
				
			||||||
using MediaBrowser.Controller.Providers;
 | 
					using MediaBrowser.Controller.Providers;
 | 
				
			||||||
using MediaBrowser.Model.Configuration;
 | 
					using MediaBrowser.Model.Configuration;
 | 
				
			||||||
 | 
					using MediaBrowser.Model.Drawing;
 | 
				
			||||||
using MediaBrowser.Model.Entities;
 | 
					using MediaBrowser.Model.Entities;
 | 
				
			||||||
using MediaBrowser.Model.IO;
 | 
					using MediaBrowser.Model.IO;
 | 
				
			||||||
using MediaBrowser.Model.MediaInfo;
 | 
					using MediaBrowser.Model.MediaInfo;
 | 
				
			||||||
@ -172,7 +173,13 @@ namespace MediaBrowser.Providers.Manager
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                        if (response.HasImage)
 | 
					                        if (response.HasImage)
 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                            if (!string.IsNullOrEmpty(response.Path))
 | 
					                            if (string.IsNullOrEmpty(response.Path))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                var mimeType = response.Format.GetMimeType();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                await _providerManager.SaveImage(item, response.Stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            else
 | 
				
			||||||
                            {
 | 
					                            {
 | 
				
			||||||
                                if (response.Protocol == MediaProtocol.Http)
 | 
					                                if (response.Protocol == MediaProtocol.Http)
 | 
				
			||||||
                                {
 | 
					                                {
 | 
				
			||||||
@ -195,12 +202,6 @@ namespace MediaBrowser.Providers.Manager
 | 
				
			|||||||
                                    await _providerManager.SaveImage(item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
 | 
					                                    await _providerManager.SaveImage(item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
 | 
				
			||||||
                                }
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            else
 | 
					 | 
				
			||||||
                            {
 | 
					 | 
				
			||||||
                                var mimeType = "image/" + response.Format.ToString().ToLowerInvariant();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                                await _providerManager.SaveImage(item, response.Stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            downloadedImages.Add(imageType);
 | 
					                            downloadedImages.Add(imageType);
 | 
				
			||||||
                            result.UpdateType |= ItemUpdateType.ImageUpdate;
 | 
					                            result.UpdateType |= ItemUpdateType.ImageUpdate;
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.ComponentModel;
 | 
				
			||||||
 | 
					using MediaBrowser.Model.Drawing;
 | 
				
			||||||
 | 
					using Xunit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Jellyfin.Model.Drawing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public static class ImageFormatExtensionsTests
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    private static TheoryData<ImageFormat> GetAllImageFormats()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var theoryTypes = new TheoryData<ImageFormat>();
 | 
				
			||||||
 | 
					        foreach (var x in Enum.GetValues<ImageFormat>())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            theoryTypes.Add(x);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return theoryTypes;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [Theory]
 | 
				
			||||||
 | 
					    [MemberData(nameof(GetAllImageFormats))]
 | 
				
			||||||
 | 
					    public static void GetMimeType_Valid_Valid(ImageFormat format)
 | 
				
			||||||
 | 
					        => Assert.Null(Record.Exception(() => format.GetMimeType()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    [Theory]
 | 
				
			||||||
 | 
					    [InlineData((ImageFormat)int.MinValue)]
 | 
				
			||||||
 | 
					    [InlineData((ImageFormat)int.MaxValue)]
 | 
				
			||||||
 | 
					    [InlineData((ImageFormat)(-1))]
 | 
				
			||||||
 | 
					    [InlineData((ImageFormat)5)]
 | 
				
			||||||
 | 
					    public static void GetMimeType_Valid_ThrowsInvalidEnumArgumentException(ImageFormat format)
 | 
				
			||||||
 | 
					        => Assert.Throws<InvalidEnumArgumentException>(() => format.GetMimeType());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -124,7 +124,6 @@ namespace Jellyfin.Model.Tests.Net
 | 
				
			|||||||
        [InlineData("font/woff2", ".woff2")]
 | 
					        [InlineData("font/woff2", ".woff2")]
 | 
				
			||||||
        [InlineData("image/bmp", ".bmp")]
 | 
					        [InlineData("image/bmp", ".bmp")]
 | 
				
			||||||
        [InlineData("image/gif", ".gif")]
 | 
					        [InlineData("image/gif", ".gif")]
 | 
				
			||||||
        [InlineData("image/jpg", ".jpg")]
 | 
					 | 
				
			||||||
        [InlineData("image/jpeg", ".jpg")]
 | 
					        [InlineData("image/jpeg", ".jpg")]
 | 
				
			||||||
        [InlineData("image/png", ".png")]
 | 
					        [InlineData("image/png", ".png")]
 | 
				
			||||||
        [InlineData("image/svg+xml", ".svg")]
 | 
					        [InlineData("image/svg+xml", ".svg")]
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user