using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; using MediaBrowser.Providers.Genres; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MediaBrowser.Providers.Folders { public class DefaultImageProvider : IRemoteImageProvider, IHasItemChangeMonitor { private readonly IHttpClient _httpClient; public DefaultImageProvider(IHttpClient httpClient) { _httpClient = httpClient; } public IEnumerable GetSupportedImages(IHasImages item) { return new List { ImageType.Primary, ImageType.Thumb }; } public Task> GetImages(IHasImages item, CancellationToken cancellationToken) { var view = item as UserView; if (view != null) { return GetImages(view.ViewType, cancellationToken); } var folder = (ICollectionFolder)item; return GetImages(folder.CollectionType, cancellationToken); } private Task> GetImages(string viewType, CancellationToken cancellationToken) { var url = GetImageUrl(viewType); var list = new List(); if (!string.IsNullOrWhiteSpace(url)) { list.AddRange(new List{ new RemoteImageInfo { ProviderName = Name, Url = url, Type = ImageType.Primary }, new RemoteImageInfo { ProviderName = Name, Url = url, Type = ImageType.Thumb } }); } return Task.FromResult>(list); } private string GetImageUrl(string viewType) { const string urlPrefix = "https://raw.githubusercontent.com/MediaBrowser/Emby.Resources/master/images/folders/"; if (string.Equals(viewType, CollectionType.Books, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "books.jpg"; } if (string.Equals(viewType, CollectionType.Games, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "games.jpg"; } if (string.Equals(viewType, CollectionType.Music, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "music.jpg"; } if (string.Equals(viewType, CollectionType.Photos, StringComparison.OrdinalIgnoreCase)) { //return urlPrefix + "photos.png"; } if (string.Equals(viewType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase)) { //return urlPrefix + "tv.jpg"; } if (string.Equals(viewType, CollectionType.Channels, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "channels.jpg"; } if (string.Equals(viewType, CollectionType.LiveTv, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "livetv.png"; } if (string.Equals(viewType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase)) { //return urlPrefix + "movies.jpg"; } if (string.Equals(viewType, CollectionType.Playlists, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "playlists.jpg"; } if (string.Equals(viewType, CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "homevideos.jpg"; } if (string.Equals(viewType, CollectionType.MusicVideos, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "musicvideos.jpg"; } if (string.Equals(viewType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase)) { return urlPrefix + "collections.jpg"; } if (string.IsNullOrWhiteSpace(viewType)) { return urlPrefix + "generic.jpg"; } return null; } public string Name { get { return "Default Image Provider"; } } public bool Supports(IHasImages item) { var view = item as UserView; if (view != null) { return !string.IsNullOrWhiteSpace(GetImageUrl(view.ViewType)); } var folder = item as ICollectionFolder; if (folder != null) { return !string.IsNullOrWhiteSpace(GetImageUrl(folder.CollectionType)); } return false; } public Task GetImageResponse(string url, CancellationToken cancellationToken) { return _httpClient.GetResponse(new HttpRequestOptions { CancellationToken = cancellationToken, Url = url, ResourcePool = GenreImageProvider.ImageDownloadResourcePool }); } public bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService) { return GetSupportedImages(item).Any(i => !item.HasImage(i)); } } }