using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Providers.Music { public class ManualLastFmImageProvider : IImageProvider { public string Name { get { return ProviderName; } } public static string ProviderName { get { return "last.fm"; } } public bool Supports(BaseItem item) { return item is MusicAlbum || item is MusicArtist || item is Artist; } public async Task> GetImages(BaseItem item, ImageType imageType, CancellationToken cancellationToken) { var images = await GetAllImages(item, cancellationToken).ConfigureAwait(false); return images.Where(i => i.Type == imageType); } public Task> GetAllImages(BaseItem item, CancellationToken cancellationToken) { var list = new List(); RemoteImageInfo info = null; var artist = item as Artist; if (artist != null) { info = GetInfo(artist.LastFmImageUrl, artist.LastFmImageSize); } var album = item as MusicAlbum; if (album != null) { info = GetInfo(album.LastFmImageUrl, album.LastFmImageSize); } var musicArtist = item as MusicArtist; if (musicArtist != null) { info = GetInfo(musicArtist.LastFmImageUrl, musicArtist.LastFmImageSize); } if (info != null) { list.Add(info); } // The only info we have is size return Task.FromResult>(list.OrderByDescending(i => i.Width ?? 0)); } private RemoteImageInfo GetInfo(string url, string size) { if (string.IsNullOrEmpty(url)) { return null; } var info = new RemoteImageInfo { ProviderName = Name, Url = url }; if (string.Equals(size, "mega", StringComparison.OrdinalIgnoreCase)) { } else if (string.Equals(size, "extralarge", StringComparison.OrdinalIgnoreCase)) { } else if (string.Equals(size, "large", StringComparison.OrdinalIgnoreCase)) { } else if (string.Equals(size, "medium", StringComparison.OrdinalIgnoreCase)) { } return info; } public int Priority { get { return 0; } } } }