mirror of
https://github.com/lidarr/Lidarr
synced 2025-02-26 15:52:42 +00:00
Fixed: Don't force images to JPG and fix Kodi album art filenames
This commit is contained in:
parent
8b860bcb82
commit
8d780f4057
5 changed files with 63 additions and 32 deletions
|
@ -41,12 +41,17 @@ public void Setup()
|
|||
Mocker.GetMock<IHttpClient>().Setup(c => c.Head(It.IsAny<HttpRequest>())).Returns(_httpResponse);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_convert_cover_urls_to_local()
|
||||
[TestCase(".png")]
|
||||
[TestCase(".jpg")]
|
||||
public void should_convert_cover_urls_to_local(string extension)
|
||||
{
|
||||
var covers = new List<MediaCover.MediaCover>
|
||||
{
|
||||
new MediaCover.MediaCover {CoverType = MediaCoverTypes.Banner}
|
||||
new MediaCover.MediaCover
|
||||
{
|
||||
Url = "http://dummy.com/test" + extension,
|
||||
CoverType = MediaCoverTypes.Banner
|
||||
}
|
||||
};
|
||||
|
||||
Mocker.GetMock<IDiskProvider>().Setup(c => c.FileGetLastWrite(It.IsAny<string>()))
|
||||
|
@ -58,15 +63,20 @@ public void should_convert_cover_urls_to_local()
|
|||
Subject.ConvertToLocalUrls(12, MediaCoverEntity.Artist, covers);
|
||||
|
||||
|
||||
covers.Single().Url.Should().Be("/MediaCover/12/banner.jpg?lastWrite=1234");
|
||||
covers.Single().Url.Should().Be("/MediaCover/12/banner" + extension + "?lastWrite=1234");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_convert_album_cover_urls_to_local()
|
||||
[TestCase(".png")]
|
||||
[TestCase(".jpg")]
|
||||
public void should_convert_album_cover_urls_to_local(string extension)
|
||||
{
|
||||
var covers = new List<MediaCover.MediaCover>
|
||||
{
|
||||
new MediaCover.MediaCover {CoverType = MediaCoverTypes.Disc}
|
||||
new MediaCover.MediaCover
|
||||
{
|
||||
Url = "http://dummy.com/test" + extension,
|
||||
CoverType = MediaCoverTypes.Disc
|
||||
}
|
||||
};
|
||||
|
||||
Mocker.GetMock<IDiskProvider>().Setup(c => c.FileGetLastWrite(It.IsAny<string>()))
|
||||
|
@ -78,22 +88,27 @@ public void should_convert_album_cover_urls_to_local()
|
|||
Subject.ConvertToLocalUrls(6, MediaCoverEntity.Album, covers);
|
||||
|
||||
|
||||
covers.Single().Url.Should().Be("/MediaCover/Albums/6/disc.jpg?lastWrite=1234");
|
||||
covers.Single().Url.Should().Be("/MediaCover/Albums/6/disc" + extension + "?lastWrite=1234");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_convert_media_urls_to_local_without_time_if_file_doesnt_exist()
|
||||
[TestCase(".png")]
|
||||
[TestCase(".jpg")]
|
||||
public void should_convert_media_urls_to_local_without_time_if_file_doesnt_exist(string extension)
|
||||
{
|
||||
var covers = new List<MediaCover.MediaCover>
|
||||
{
|
||||
new MediaCover.MediaCover {CoverType = MediaCoverTypes.Banner}
|
||||
new MediaCover.MediaCover
|
||||
{
|
||||
Url = "http://dummy.com/test" + extension,
|
||||
CoverType = MediaCoverTypes.Banner
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Subject.ConvertToLocalUrls(12, MediaCoverEntity.Artist, covers);
|
||||
|
||||
|
||||
covers.Single().Url.Should().Be("/MediaCover/12/banner.jpg");
|
||||
covers.Single().Url.Should().Be("/MediaCover/12/banner" + extension);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
|
|
@ -165,7 +165,7 @@ public override List<ImageFileResult> ArtistImages(Artist artist)
|
|||
return new List<ImageFileResult>(); ;
|
||||
}
|
||||
|
||||
var source = _mediaCoverService.GetCoverPath(artist.Id, MediaCoverEntity.Artist, image.CoverType);
|
||||
var source = _mediaCoverService.GetCoverPath(artist.Id, MediaCoverEntity.Artist, image.CoverType, image.Extension);
|
||||
var destination = Path.GetFileName(artist.Path) + Path.GetExtension(source);
|
||||
|
||||
return new List<ImageFileResult>{ new ImageFileResult(destination, source) };
|
||||
|
|
|
@ -205,11 +205,11 @@ private IEnumerable<ImageFileResult> ProcessArtistImages(Artist artist)
|
|||
{
|
||||
foreach (var image in artist.Metadata.Value.Images)
|
||||
{
|
||||
var source = _mediaCoverService.GetCoverPath(artist.Id, MediaCoverEntity.Artist, image.CoverType);
|
||||
var destination = image.CoverType.ToString().ToLowerInvariant() + Path.GetExtension(image.Url);
|
||||
var source = _mediaCoverService.GetCoverPath(artist.Id, MediaCoverEntity.Artist, image.CoverType, image.Extension);
|
||||
var destination = image.CoverType.ToString().ToLowerInvariant() + image.Extension;
|
||||
if (image.CoverType == MediaCoverTypes.Poster)
|
||||
{
|
||||
destination = "folder" + Path.GetExtension(image.Url);
|
||||
destination = "folder" + image.Extension;
|
||||
}
|
||||
|
||||
yield return new ImageFileResult(destination, source);
|
||||
|
@ -222,7 +222,21 @@ private IEnumerable<ImageFileResult> ProcessAlbumImages(Artist artist, Album alb
|
|||
{
|
||||
// TODO: Make Source fallback to URL if local does not exist
|
||||
// var source = _mediaCoverService.GetCoverPath(album.ArtistId, image.CoverType, null, album.Id);
|
||||
var destination = Path.Combine(albumPath, image.CoverType.ToString().ToLowerInvariant() + Path.GetExtension(image.Url));
|
||||
string filename;
|
||||
|
||||
switch(image.CoverType)
|
||||
{
|
||||
case MediaCoverTypes.Cover:
|
||||
filename = "folder";
|
||||
break;
|
||||
case MediaCoverTypes.Disc:
|
||||
filename = "discart";
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
var destination = Path.Combine(albumPath, filename + image.Extension);
|
||||
|
||||
yield return new ImageFileResult(destination, image.Url);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System.IO;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Core.MediaCover
|
||||
|
@ -26,6 +27,7 @@ public class MediaCover : IEmbeddedDocument
|
|||
{
|
||||
public MediaCoverTypes CoverType { get; set; }
|
||||
public string Url { get; set; }
|
||||
public string Extension => Path.GetExtension(Url);
|
||||
|
||||
public MediaCover()
|
||||
{
|
||||
|
|
|
@ -18,7 +18,7 @@ namespace NzbDrone.Core.MediaCover
|
|||
public interface IMapCoversToLocal
|
||||
{
|
||||
void ConvertToLocalUrls(int entityId, MediaCoverEntity coverEntity, IEnumerable<MediaCover> covers);
|
||||
string GetCoverPath(int entityId, MediaCoverEntity coverEntity, MediaCoverTypes mediaCoverTypes, int? height = null);
|
||||
string GetCoverPath(int entityId, MediaCoverEntity coverEntity, MediaCoverTypes mediaCoverTypes, string extension, int? height = null);
|
||||
}
|
||||
|
||||
public class MediaCoverService :
|
||||
|
@ -59,17 +59,17 @@ public MediaCoverService(IImageResizer resizer,
|
|||
_coverRootFolder = appFolderInfo.GetMediaCoverPath();
|
||||
}
|
||||
|
||||
public string GetCoverPath(int entityId, MediaCoverEntity coverEntity, MediaCoverTypes coverTypes, int? height = null)
|
||||
public string GetCoverPath(int entityId, MediaCoverEntity coverEntity, MediaCoverTypes coverTypes, string extension, int? height = null)
|
||||
{
|
||||
var heightSuffix = height.HasValue ? "-" + height.ToString() : "";
|
||||
|
||||
if (coverEntity == MediaCoverEntity.Album)
|
||||
{
|
||||
return Path.Combine(GetAlbumCoverPath(entityId), coverTypes.ToString().ToLower() + heightSuffix + ".jpg");
|
||||
return Path.Combine(GetAlbumCoverPath(entityId), coverTypes.ToString().ToLower() + heightSuffix + extension);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Path.Combine(GetArtistCoverPath(entityId), coverTypes.ToString().ToLower() + heightSuffix + ".jpg");
|
||||
return Path.Combine(GetArtistCoverPath(entityId), coverTypes.ToString().ToLower() + heightSuffix + extension);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,15 +77,15 @@ public void ConvertToLocalUrls(int entityId, MediaCoverEntity coverEntity, IEnum
|
|||
{
|
||||
foreach (var mediaCover in covers)
|
||||
{
|
||||
var filePath = GetCoverPath(entityId, coverEntity, mediaCover.CoverType, null);
|
||||
var filePath = GetCoverPath(entityId, coverEntity, mediaCover.CoverType, mediaCover.Extension, null);
|
||||
|
||||
if (coverEntity == MediaCoverEntity.Album)
|
||||
{
|
||||
mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/Albums/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + ".jpg";
|
||||
mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/Albums/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + mediaCover.Extension;
|
||||
}
|
||||
else
|
||||
{
|
||||
mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + ".jpg";
|
||||
mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + mediaCover.Extension;
|
||||
}
|
||||
|
||||
if (_diskProvider.FileExists(filePath))
|
||||
|
@ -110,7 +110,7 @@ private void EnsureArtistCovers(Artist artist)
|
|||
{
|
||||
foreach (var cover in artist.Metadata.Value.Images)
|
||||
{
|
||||
var fileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType);
|
||||
var fileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType, cover.Extension);
|
||||
var alreadyExists = false;
|
||||
|
||||
try
|
||||
|
@ -141,7 +141,7 @@ private void EnsureAlbumCovers(Album album)
|
|||
{
|
||||
foreach (var cover in album.Images.Where(e => e.CoverType == MediaCoverTypes.Cover))
|
||||
{
|
||||
var fileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, null);
|
||||
var fileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, cover.Extension, null);
|
||||
var alreadyExists = false;
|
||||
try
|
||||
{
|
||||
|
@ -169,7 +169,7 @@ private void EnsureAlbumCovers(Album album)
|
|||
|
||||
private void DownloadCover(Artist artist, MediaCover cover, DateTime lastModified)
|
||||
{
|
||||
var fileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType);
|
||||
var fileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType, cover.Extension);
|
||||
|
||||
_logger.Info("Downloading {0} for {1} {2}", cover.CoverType, artist, cover.Url);
|
||||
_httpClient.DownloadFile(cover.Url, fileName);
|
||||
|
@ -186,7 +186,7 @@ private void DownloadCover(Artist artist, MediaCover cover, DateTime lastModifie
|
|||
|
||||
private void DownloadAlbumCover(Album album, MediaCover cover, DateTime lastModified)
|
||||
{
|
||||
var fileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, null);
|
||||
var fileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, cover.Extension, null);
|
||||
|
||||
_logger.Info("Downloading {0} for {1} {2}", cover.CoverType, album, cover.Url);
|
||||
_httpClient.DownloadFile(cover.Url, fileName);
|
||||
|
@ -207,8 +207,8 @@ private void EnsureResizedCovers(Artist artist, MediaCover cover, bool forceResi
|
|||
|
||||
foreach (var height in heights)
|
||||
{
|
||||
var mainFileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType);
|
||||
var resizeFileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType, height);
|
||||
var mainFileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType, cover.Extension);
|
||||
var resizeFileName = GetCoverPath(artist.Id, MediaCoverEntity.Artist, cover.CoverType, cover.Extension, height);
|
||||
|
||||
if (forceResize || !_diskProvider.FileExists(resizeFileName) || _diskProvider.GetFileSize(resizeFileName) == 0)
|
||||
{
|
||||
|
@ -232,8 +232,8 @@ private void EnsureResizedAlbumCovers(Album album, MediaCover cover, bool forceR
|
|||
|
||||
foreach (var height in heights)
|
||||
{
|
||||
var mainFileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, null);
|
||||
var resizeFileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, height);
|
||||
var mainFileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, cover.Extension, null);
|
||||
var resizeFileName = GetCoverPath(album.Id, MediaCoverEntity.Album, cover.CoverType, cover.Extension, height);
|
||||
|
||||
if (forceResize || !_diskProvider.FileExists(resizeFileName) || _diskProvider.GetFileSize(resizeFileName) == 0)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue