1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- using System;
- using System.Collections.Generic;
- using MediaBrowser.Controller.Entities;
- using MediaBrowser.Controller.Entities.Movies;
- using MediaBrowser.Controller.Entities.TV;
- using MediaBrowser.Controller.Providers;
- using MediaBrowser.Model.Entities;
- using TMDbLib.Objects.TvShows;
- namespace MediaBrowser.Providers.Plugins.Tmdb;
- /// <summary>
- /// External URLs for TMDb.
- /// </summary>
- public class TmdbExternalUrlProvider : IExternalUrlProvider
- {
- /// <inheritdoc/>
- public string Name => "TMDB";
- /// <inheritdoc/>
- public IEnumerable<string> GetExternalUrls(BaseItem item)
- {
- switch (item)
- {
- case Series:
- if (item.TryGetProviderId(MetadataProvider.Tmdb, out var externalId))
- {
- yield return TmdbUtils.BaseTmdbUrl + $"tv/{externalId}";
- }
- break;
- case Season season:
- if (season.Series?.TryGetProviderId(MetadataProvider.Tmdb, out var seriesExternalId) == true)
- {
- var orderString = season.Series.DisplayOrder;
- var seasonNumber = season.IndexNumber;
- if (string.IsNullOrEmpty(orderString) && seasonNumber is not null)
- {
- // Default order is airdate
- yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{seasonNumber}";
- }
- if (Enum.TryParse<TvGroupType>(season.Series.DisplayOrder, out var order))
- {
- if (order.Equals(TvGroupType.OriginalAirDate) && seasonNumber is not null)
- {
- yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{seasonNumber}";
- }
- }
- }
- break;
- case Episode episode:
- if (episode.Series?.TryGetProviderId(MetadataProvider.Tmdb, out seriesExternalId) == true)
- {
- var orderString = episode.Series.DisplayOrder;
- var seasonNumber = episode.Season?.IndexNumber;
- var episodeNumber = episode.IndexNumber;
- if (string.IsNullOrEmpty(orderString) && seasonNumber is not null && episodeNumber is not null)
- {
- // Default order is airdate
- yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{seasonNumber}/episode/{episodeNumber}";
- }
- if (Enum.TryParse<TvGroupType>(orderString, out var order))
- {
- if (order.Equals(TvGroupType.OriginalAirDate) && seasonNumber is not null && episodeNumber is not null)
- {
- yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{seasonNumber}/episode/{episodeNumber}";
- }
- }
- }
- break;
- case Movie:
- if (item.TryGetProviderId(MetadataProvider.Tmdb, out externalId))
- {
- yield return TmdbUtils.BaseTmdbUrl + $"movie/{externalId}";
- }
- break;
- case Person:
- if (item.TryGetProviderId(MetadataProvider.Tmdb, out externalId))
- {
- yield return TmdbUtils.BaseTmdbUrl + $"person/{externalId}";
- }
- break;
- case BoxSet:
- if (item.TryGetProviderId(MetadataProvider.Tmdb, out externalId))
- {
- yield return TmdbUtils.BaseTmdbUrl + $"collection/{externalId}";
- }
- break;
- }
- }
- }
|