TmdbSeasonProvider.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #pragma warning disable CS1591
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. using System.Linq;
  6. using System.Net.Http;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using MediaBrowser.Common.Net;
  10. using MediaBrowser.Controller.Entities;
  11. using MediaBrowser.Controller.Entities.TV;
  12. using MediaBrowser.Controller.Providers;
  13. using MediaBrowser.Model.Entities;
  14. using MediaBrowser.Model.Providers;
  15. namespace MediaBrowser.Providers.Plugins.Tmdb.TV
  16. {
  17. public class TmdbSeasonProvider : IRemoteMetadataProvider<Season, SeasonInfo>
  18. {
  19. private readonly IHttpClientFactory _httpClientFactory;
  20. private readonly TmdbClientManager _tmdbClientManager;
  21. public TmdbSeasonProvider(IHttpClientFactory httpClientFactory, TmdbClientManager tmdbClientManager)
  22. {
  23. _httpClientFactory = httpClientFactory;
  24. _tmdbClientManager = tmdbClientManager;
  25. }
  26. public string Name => TmdbUtils.ProviderName;
  27. public async Task<MetadataResult<Season>> GetMetadata(SeasonInfo info, CancellationToken cancellationToken)
  28. {
  29. var result = new MetadataResult<Season>();
  30. info.SeriesProviderIds.TryGetValue(MetadataProvider.Tmdb.ToString(), out string? seriesTmdbId);
  31. var seasonNumber = info.IndexNumber;
  32. if (string.IsNullOrWhiteSpace(seriesTmdbId) || !seasonNumber.HasValue)
  33. {
  34. return result;
  35. }
  36. var seasonResult = await _tmdbClientManager
  37. .GetSeasonAsync(Convert.ToInt32(seriesTmdbId, CultureInfo.InvariantCulture), seasonNumber.Value, info.MetadataLanguage, TmdbUtils.GetImageLanguagesParam(info.MetadataLanguage), cancellationToken)
  38. .ConfigureAwait(false);
  39. if (seasonResult == null)
  40. {
  41. return result;
  42. }
  43. result.HasMetadata = true;
  44. result.Item = new Season
  45. {
  46. IndexNumber = seasonNumber,
  47. Overview = seasonResult.Overview
  48. };
  49. if (!string.IsNullOrEmpty(seasonResult.ExternalIds?.TvdbId))
  50. {
  51. result.Item.SetProviderId(MetadataProvider.Tvdb, seasonResult.ExternalIds.TvdbId);
  52. }
  53. // TODO why was this disabled?
  54. var credits = seasonResult.Credits;
  55. if (credits?.Cast != null)
  56. {
  57. var cast = credits.Cast.OrderBy(c => c.Order).Take(TmdbUtils.MaxCastMembers).ToList();
  58. for (var i = 0; i < cast.Count; i++)
  59. {
  60. result.AddPerson(new PersonInfo
  61. {
  62. Name = cast[i].Name.Trim(),
  63. Role = cast[i].Character,
  64. Type = PersonType.Actor,
  65. SortOrder = cast[i].Order
  66. });
  67. }
  68. }
  69. if (credits?.Crew != null)
  70. {
  71. foreach (var person in credits.Crew)
  72. {
  73. // Normalize this
  74. var type = TmdbUtils.MapCrewToPersonType(person);
  75. if (!TmdbUtils.WantedCrewTypes.Contains(type, StringComparer.OrdinalIgnoreCase)
  76. && !TmdbUtils.WantedCrewTypes.Contains(person.Job ?? string.Empty, StringComparer.OrdinalIgnoreCase))
  77. {
  78. continue;
  79. }
  80. result.AddPerson(new PersonInfo
  81. {
  82. Name = person.Name.Trim(),
  83. Role = person.Job,
  84. Type = type
  85. });
  86. }
  87. }
  88. result.Item.PremiereDate = seasonResult.AirDate;
  89. result.Item.ProductionYear = seasonResult.AirDate?.Year;
  90. return result;
  91. }
  92. public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeasonInfo searchInfo, CancellationToken cancellationToken)
  93. {
  94. return Task.FromResult(Enumerable.Empty<RemoteSearchResult>());
  95. }
  96. public Task<HttpResponseMessage> GetImageResponse(string url, CancellationToken cancellationToken)
  97. {
  98. return _httpClientFactory.CreateClient(NamedClient.Default).GetAsync(url, cancellationToken);
  99. }
  100. }
  101. }