| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | using MediaBrowser.Common;using MediaBrowser.Common.Net;using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.LiveTv;using MediaBrowser.Controller.Providers;using MediaBrowser.Model.Entities;using MediaBrowser.Model.Logging;using System;using System.Collections.Generic;using System.Linq;using System.Threading;using System.Threading.Tasks;namespace MediaBrowser.Server.Implementations.LiveTv{    public class ChannelImageProvider : IDynamicImageProvider, IHasItemChangeMonitor    {        private readonly ILiveTvManager _liveTvManager;        private readonly IHttpClient _httpClient;        private readonly ILogger _logger;        private readonly IApplicationHost _appHost;        public ChannelImageProvider(ILiveTvManager liveTvManager, IHttpClient httpClient, ILogger logger, IApplicationHost appHost)        {            _liveTvManager = liveTvManager;            _httpClient = httpClient;            _logger = logger;            _appHost = appHost;        }        public IEnumerable<ImageType> GetSupportedImages(IHasImages item)        {            return new[] { ImageType.Primary };        }        public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken)        {            var liveTvItem = (LiveTvChannel)item;            var imageResponse = new DynamicImageResponse();            if (!string.IsNullOrEmpty(liveTvItem.ProviderImagePath))            {                imageResponse.Path = liveTvItem.ProviderImagePath;                imageResponse.HasImage = true;            }            else if (!string.IsNullOrEmpty(liveTvItem.ProviderImageUrl))            {                var options = new HttpRequestOptions                {                    CancellationToken = cancellationToken,                    Url = liveTvItem.ProviderImageUrl,                    // Some image hosts require a user agent to be specified.                    UserAgent = "Emby Server/" + _appHost.ApplicationVersion                };                var response = await _httpClient.GetResponse(options).ConfigureAwait(false);                var contentType = response.ContentType;                if (contentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))                {                    imageResponse.HasImage = true;                    imageResponse.Stream = response.Content;                    imageResponse.SetFormatFromMimeType(contentType);                }                else                {                    _logger.Error("Provider did not return an image content type.");                }            }            else if (liveTvItem.HasProviderImage ?? true)            {                var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase));                if (service != null)                {                    try                    {                        var response = await service.GetChannelImageAsync(liveTvItem.ExternalId, cancellationToken).ConfigureAwait(false);                        if (response != null)                        {                            imageResponse.HasImage = true;                            imageResponse.Stream = response.Stream;                            imageResponse.Format = response.Format;                        }                    }                    catch (NotImplementedException)                    {                    }                }            }            return imageResponse;        }        public string Name        {            get { return "Live TV Service Provider"; }        }        public bool Supports(IHasImages item)        {            return item is LiveTvChannel;        }        public int Order        {            get { return 0; }        }        public bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService)        {            return GetSupportedImages(item).Any(i => !item.HasImage(i));        }    }}
 |