Merge pull request #7101 from Bond-009/imagejpg

Remove incorrect mime type image/jpg
This commit is contained in:
Cody Robibero 2022-01-08 04:45:58 -07:00 committed by GitHub
commit 9b1965b48a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 75 additions and 20 deletions

View File

@ -9,6 +9,7 @@ using Emby.Dlna.Main;
using Jellyfin.Api.Attributes;
using Jellyfin.Api.Constants;
using MediaBrowser.Controller.Dlna;
using MediaBrowser.Model.Net;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@ -337,11 +338,7 @@ namespace Jellyfin.Api.Controllers
return NotFound();
}
var contentType = "image/" + Path.GetExtension(fileName)
.TrimStart('.')
.ToLowerInvariant();
return File(icon.Stream, contentType);
return File(icon.Stream, MimeTypes.GetMimeType(fileName));
}
private string GetAbsoluteUri()

View File

@ -1878,8 +1878,8 @@ namespace Jellyfin.Api.Controllers
if (!supportsWebP)
{
var userAgent = Request.Headers[HeaderNames.UserAgent].ToString();
if (userAgent.IndexOf("crosswalk", StringComparison.OrdinalIgnoreCase) != -1 &&
userAgent.IndexOf("android", StringComparison.OrdinalIgnoreCase) != -1)
if (userAgent.Contains("crosswalk", StringComparison.OrdinalIgnoreCase)
&& userAgent.Contains("android", StringComparison.OrdinalIgnoreCase))
{
supportsWebP = true;
}
@ -1905,10 +1905,7 @@ namespace Jellyfin.Api.Controllers
private bool SupportsFormat(IReadOnlyCollection<string> requestAcceptTypes, string acceptParam, ImageFormat format, bool acceptAll)
{
var normalized = format.ToString().ToLowerInvariant();
var mimeType = "image/" + normalized;
if (requestAcceptTypes.Contains(mimeType))
if (requestAcceptTypes.Contains(format.GetMimeType()))
{
return true;
}
@ -1918,6 +1915,8 @@ namespace Jellyfin.Api.Controllers
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);
}

View 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))
};
}

View File

@ -116,7 +116,6 @@ namespace MediaBrowser.Model.Net
{ "audio/x-wavpack", ".wv" },
// Type image
{ "image/jpg", ".jpg" },
{ "image/jpeg", ".jpg" },
{ "image/x-png", ".png" },

View File

@ -14,6 +14,7 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.MediaInfo;
@ -172,7 +173,13 @@ namespace MediaBrowser.Providers.Manager
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)
{
@ -195,12 +202,6 @@ namespace MediaBrowser.Providers.Manager
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);
result.UpdateType |= ItemUpdateType.ImageUpdate;

View File

@ -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());
}

View File

@ -124,7 +124,6 @@ namespace Jellyfin.Model.Tests.Net
[InlineData("font/woff2", ".woff2")]
[InlineData("image/bmp", ".bmp")]
[InlineData("image/gif", ".gif")]
[InlineData("image/jpg", ".jpg")]
[InlineData("image/jpeg", ".jpg")]
[InlineData("image/png", ".png")]
[InlineData("image/svg+xml", ".svg")]