TmdbSeasonProvider.cs 4.5 KB

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