| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.LiveTv;using MediaBrowser.Controller.Providers;using MediaBrowser.Model.Entities;using System;using System.Collections.Generic;using System.Linq;using System.Threading;using System.Threading.Tasks;namespace MediaBrowser.Server.Implementations.LiveTv{    public class ProgramImageProvider : IDynamicImageProvider, IHasItemChangeMonitor, IHasOrder    {        private readonly ILiveTvManager _liveTvManager;        public ProgramImageProvider(ILiveTvManager liveTvManager)        {            _liveTvManager = liveTvManager;        }        public IEnumerable<ImageType> GetSupportedImages(IHasImages item)        {            return new[] { ImageType.Primary };        }        public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken)        {            var liveTvItem = (LiveTvProgram)item;            var imageResponse = new DynamicImageResponse();            var service = _liveTvManager.Services.FirstOrDefault(i => string.Equals(i.Name, liveTvItem.ServiceName, StringComparison.OrdinalIgnoreCase));            if (service != null)            {                try                {                    var channel = _liveTvManager.GetInternalChannel(liveTvItem.ChannelId);                    var response = await service.GetProgramImageAsync(liveTvItem.ExternalId, channel.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 LiveTvProgram;        }        public int Order        {            get            {                // Let the better providers run first                return 100;            }        }        public bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService)        {            var liveTvItem = item as LiveTvProgram;            if (liveTvItem != null)            {                return !liveTvItem.HasImage(ImageType.Primary);            }            return false;        }    }}
 |