diff --git a/src/NzbDrone.Core/MediaCover/MediaCoverService.cs b/src/NzbDrone.Core/MediaCover/MediaCoverService.cs index 18e8a6ccd..c6811a513 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); + void ConvertToLocalUrls(int entityId, MediaCoverEntity coverEntity, ICollection covers); string GetCoverPath(int entityId, MediaCoverEntity coverEntity, MediaCoverTypes coverType, string extension, int? height = null); bool EnsureAlbumCovers(Album album); } @@ -82,7 +82,7 @@ public string GetCoverPath(int entityId, MediaCoverEntity coverEntity, MediaCove return Path.Combine(GetArtistCoverPath(entityId), coverType.ToString().ToLower() + heightSuffix + GetExtension(coverType, extension)); } - public void ConvertToLocalUrls(int entityId, MediaCoverEntity coverEntity, IEnumerable covers) + public void ConvertToLocalUrls(int entityId, MediaCoverEntity coverEntity, ICollection covers) { if (entityId == 0) { @@ -92,34 +92,39 @@ public void ConvertToLocalUrls(int entityId, MediaCoverEntity coverEntity, IEnum mediaCover.RemoteUrl = mediaCover.Url; mediaCover.Url = _mediaCoverProxy.RegisterUrl(mediaCover.RemoteUrl); } + + return; } - else + + if (!covers.Any()) { - foreach (var mediaCover in covers) + PopulateCoverWithCache(entityId, coverEntity, covers); + } + + foreach (var mediaCover in covers) + { + if (mediaCover.CoverType == MediaCoverTypes.Unknown) { - if (mediaCover.CoverType == MediaCoverTypes.Unknown) - { - continue; - } + continue; + } - var filePath = GetCoverPath(entityId, coverEntity, mediaCover.CoverType, mediaCover.Extension, null); + var filePath = GetCoverPath(entityId, coverEntity, mediaCover.CoverType, mediaCover.Extension, null); - mediaCover.RemoteUrl = mediaCover.Url; + mediaCover.RemoteUrl = mediaCover.Url; - if (coverEntity == MediaCoverEntity.Album) - { - mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/Albums/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + GetExtension(mediaCover.CoverType, mediaCover.Extension); - } - else - { - mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + GetExtension(mediaCover.CoverType, mediaCover.Extension); - } + if (coverEntity == MediaCoverEntity.Album) + { + mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/Albums/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + GetExtension(mediaCover.CoverType, mediaCover.Extension); + } + else + { + mediaCover.Url = _configFileProvider.UrlBase + @"/MediaCover/" + entityId + "/" + mediaCover.CoverType.ToString().ToLower() + GetExtension(mediaCover.CoverType, mediaCover.Extension); + } - if (_diskProvider.FileExists(filePath)) - { - var lastWrite = _diskProvider.FileGetLastWrite(filePath); - mediaCover.Url += "?lastWrite=" + lastWrite.Ticks; - } + if (_diskProvider.FileExists(filePath)) + { + var lastWrite = _diskProvider.FileGetLastWrite(filePath); + mediaCover.Url += "?lastWrite=" + lastWrite.Ticks; } } } @@ -194,6 +199,35 @@ private bool EnsureArtistCovers(Artist artist) return updated; } + private void PopulateCoverWithCache(int entityId, MediaCoverEntity coverEntity, ICollection covers) + { + var folderPath = coverEntity == MediaCoverEntity.Album ? GetAlbumCoverPath(entityId) : GetArtistCoverPath(entityId); + + if (_diskProvider.FolderExists(folderPath)) + { + foreach (var fileInfo in _diskProvider.GetFileInfos(folderPath)) + { + var fileName = Path.GetFileNameWithoutExtension(fileInfo.Name); + var extension = Path.GetExtension(fileInfo.Name); + if (fileName.Contains('-')) + { + continue; + } + + if (Enum.TryParse(fileName, true, out MediaCoverTypes coverType) && !covers.Any(c => c.CoverType == coverType)) + { + var filePath = fileInfo.FullName; + var diskCover = new MediaCover(coverType, filePath) + { + RemoteUrl = filePath + }; + + covers.Add(diskCover); + } + } + } + } + public bool EnsureAlbumCovers(Album album) { var updated = false;