diff --git a/src/NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs b/src/NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs index 814226af0..b82c224d3 100644 --- a/src/NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs +++ b/src/NzbDrone.Core.Test/MediaCoverTests/MediaCoverServiceFixture.cs @@ -41,12 +41,17 @@ namespace NzbDrone.Core.Test.MediaCoverTests Mocker.GetMock().Setup(c => c.Head(It.IsAny())).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 { - new MediaCover.MediaCover {CoverType = MediaCoverTypes.Banner} + new MediaCover.MediaCover + { + Url = "http://dummy.com/test" + extension, + CoverType = MediaCoverTypes.Banner + } }; Mocker.GetMock().Setup(c => c.FileGetLastWrite(It.IsAny())) @@ -58,15 +63,20 @@ namespace NzbDrone.Core.Test.MediaCoverTests 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 { - new MediaCover.MediaCover {CoverType = MediaCoverTypes.Disc} + new MediaCover.MediaCover + { + Url = "http://dummy.com/test" + extension, + CoverType = MediaCoverTypes.Disc + } }; Mocker.GetMock().Setup(c => c.FileGetLastWrite(It.IsAny())) @@ -78,22 +88,27 @@ namespace NzbDrone.Core.Test.MediaCoverTests 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 { - 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] diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs index 801b57c62..11618a6af 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Roksbox/RoksboxMetadata.cs @@ -165,7 +165,7 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Roksbox return new List(); ; } - 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{ new ImageFileResult(destination, source) }; diff --git a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs index 91a2392e5..e5e0a9992 100644 --- a/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs +++ b/src/NzbDrone.Core/Extras/Metadata/Consumers/Xbmc/XbmcMetadata.cs @@ -205,11 +205,11 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc { 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 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc { // 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); } diff --git a/src/NzbDrone.Core/MediaCover/MediaCover.cs b/src/NzbDrone.Core/MediaCover/MediaCover.cs index 3829cb450..ea77a9e44 100644 --- a/src/NzbDrone.Core/MediaCover/MediaCover.cs +++ b/src/NzbDrone.Core/MediaCover/MediaCover.cs @@ -1,3 +1,4 @@ +using System.IO; using NzbDrone.Core.Datastore; namespace NzbDrone.Core.MediaCover @@ -26,6 +27,7 @@ namespace NzbDrone.Core.MediaCover { public MediaCoverTypes CoverType { get; set; } public string Url { get; set; } + public string Extension => Path.GetExtension(Url); public MediaCover() { diff --git a/src/NzbDrone.Core/MediaCover/MediaCoverService.cs b/src/NzbDrone.Core/MediaCover/MediaCoverService.cs index 467f42606..ec90e4cfb 100644 --- a/src/NzbDrone.Core/MediaCover/MediaCoverService.cs +++ b/src/NzbDrone.Core/MediaCover/MediaCoverService.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Core.MediaCover public interface IMapCoversToLocal { void ConvertToLocalUrls(int entityId, MediaCoverEntity coverEntity, IEnumerable 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 @@ namespace NzbDrone.Core.MediaCover _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 @@ namespace NzbDrone.Core.MediaCover { 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 @@ namespace NzbDrone.Core.MediaCover { 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 @@ namespace NzbDrone.Core.MediaCover { 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 @@ namespace NzbDrone.Core.MediaCover 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 @@ namespace NzbDrone.Core.MediaCover 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 @@ namespace NzbDrone.Core.MediaCover 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 @@ namespace NzbDrone.Core.MediaCover 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) {