ChannelItemImageProvider.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using MediaBrowser.Common.Net;
  2. using MediaBrowser.Controller.Channels;
  3. using MediaBrowser.Controller.Entities;
  4. using MediaBrowser.Controller.Providers;
  5. using MediaBrowser.Model.Entities;
  6. using MediaBrowser.Model.Logging;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace MediaBrowser.Server.Implementations.Channels
  12. {
  13. public class ChannelItemImageProvider : IDynamicImageProvider, IHasItemChangeMonitor
  14. {
  15. private readonly IHttpClient _httpClient;
  16. private readonly ILogger _logger;
  17. public ChannelItemImageProvider(IHttpClient httpClient, ILogger logger)
  18. {
  19. _httpClient = httpClient;
  20. _logger = logger;
  21. }
  22. public IEnumerable<ImageType> GetSupportedImages(IHasImages item)
  23. {
  24. return new[] { ImageType.Primary };
  25. }
  26. public async Task<DynamicImageResponse> GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken)
  27. {
  28. var channelItem = (IChannelItem)item;
  29. var imageResponse = new DynamicImageResponse();
  30. if (!string.IsNullOrEmpty(channelItem.OriginalImageUrl))
  31. {
  32. var options = new HttpRequestOptions
  33. {
  34. CancellationToken = cancellationToken,
  35. Url = channelItem.OriginalImageUrl
  36. };
  37. var response = await _httpClient.GetResponse(options).ConfigureAwait(false);
  38. if (response.ContentType.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
  39. {
  40. imageResponse.HasImage = true;
  41. imageResponse.Stream = response.Content;
  42. imageResponse.SetFormatFromMimeType(response.ContentType);
  43. }
  44. else
  45. {
  46. _logger.Error("Provider did not return an image content type.");
  47. }
  48. }
  49. return imageResponse;
  50. }
  51. public string Name
  52. {
  53. get { return "Channel Image Provider"; }
  54. }
  55. public bool Supports(IHasImages item)
  56. {
  57. return item is IChannelItem;
  58. }
  59. public bool HasChanged(IHasMetadata item, MetadataStatus status, IDirectoryService directoryService)
  60. {
  61. var channelItem = item as IChannelItem;
  62. if (channelItem != null)
  63. {
  64. return !channelItem.HasImage(ImageType.Primary) && !string.IsNullOrWhiteSpace(channelItem.OriginalImageUrl);
  65. }
  66. return false;
  67. }
  68. }
  69. }