using MediaBrowser.Common.Configuration; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Playlists; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Server.Implementations.Photos; using MoreLinq; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace MediaBrowser.Server.Implementations.Playlists { public class PlaylistImageProvider : BaseDynamicImageProvider { public PlaylistImageProvider(IFileSystem fileSystem, IProviderManager providerManager, IApplicationPaths applicationPaths, IImageProcessor imageProcessor) : base(fileSystem, providerManager, applicationPaths, imageProcessor) { } protected override Task> GetItemsWithImages(IHasImages item) { var playlist = (Playlist)item; var items = playlist.GetManageableItems() .Select(i => { var subItem = i.Item2; var episode = subItem as Episode; if (episode != null) { var series = episode.Series; if (series != null && series.HasImage(ImageType.Primary)) { return series; } } if (subItem.HasImage(ImageType.Primary)) { return subItem; } var parent = subItem.Parent; if (parent != null && parent.HasImage(ImageType.Primary)) { if (parent is MusicAlbum) { return parent; } } return null; }) .Where(i => i != null) .DistinctBy(i => i.Id) .ToList(); return Task.FromResult(GetFinalItems(items)); } } }