TvdbPersonImageProvider.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using MediaBrowser.Controller.Configuration;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Controller.Providers;
  4. using MediaBrowser.Model.Entities;
  5. using MediaBrowser.Model.Logging;
  6. using MediaBrowser.Model.Providers;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. namespace MediaBrowser.Providers.TV
  13. {
  14. public class TvdbPersonImageProvider : BaseMetadataProvider
  15. {
  16. private readonly IProviderManager _providerManager;
  17. public TvdbPersonImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager)
  18. : base(logManager, configurationManager)
  19. {
  20. _providerManager = providerManager;
  21. }
  22. protected override bool RefreshOnVersionChange
  23. {
  24. get
  25. {
  26. return true;
  27. }
  28. }
  29. protected override string ProviderVersion
  30. {
  31. get
  32. {
  33. return "2";
  34. }
  35. }
  36. public override bool RequiresInternet
  37. {
  38. get
  39. {
  40. return true;
  41. }
  42. }
  43. public override bool Supports(BaseItem item)
  44. {
  45. return item is Person;
  46. }
  47. /// <summary>
  48. /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
  49. /// </summary>
  50. /// <param name="item">The item.</param>
  51. /// <param name="force">if set to <c>true</c> [force].</param>
  52. /// <param name="cancellationToken">The cancellation token.</param>
  53. /// <returns>Task{System.Boolean}.</returns>
  54. public override async Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken)
  55. {
  56. if (string.IsNullOrEmpty(item.PrimaryImagePath))
  57. {
  58. cancellationToken.ThrowIfCancellationRequested();
  59. var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbPersonImageProvider.ProviderName).ConfigureAwait(false);
  60. await DownloadImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
  61. SetLastRefreshed(item, DateTime.UtcNow);
  62. return true;
  63. }
  64. SetLastRefreshed(item, DateTime.UtcNow);
  65. return true;
  66. }
  67. private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, CancellationToken cancellationToken)
  68. {
  69. if (!item.HasImage(ImageType.Primary))
  70. {
  71. var image = images.FirstOrDefault(i => i.Type == ImageType.Primary);
  72. if (image != null)
  73. {
  74. await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Primary, null, cancellationToken)
  75. .ConfigureAwait(false);
  76. }
  77. }
  78. }
  79. public override MetadataProviderPriority Priority
  80. {
  81. get { return MetadataProviderPriority.Third; }
  82. }
  83. }
  84. }