diff options
| author | Joshua M. Boniface <joshua@boniface.me> | 2025-03-13 21:08:18 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-13 21:08:18 -0400 |
| commit | 79437f85c5033d965eab1282362e455f6e2c2a01 (patch) | |
| tree | d4cbca83395c10ece392226cfdcae4dc77835b70 /MediaBrowser.Providers/Plugins | |
| parent | 8cb5ea60d68bb49350a310857d043b67e10ab8b7 (diff) | |
| parent | 260f1323d8bf73d4fc671991ed743d90cfe4aade (diff) | |
Merge pull request #13175 from Shadowghost/external-url-providers
Migrate to IExternalUrlProvider
Diffstat (limited to 'MediaBrowser.Providers/Plugins')
24 files changed, 309 insertions, 55 deletions
diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalId.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalId.cs index 138cfef19..622bb1dba 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalId.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalId.cs @@ -19,9 +19,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb public ExternalIdMediaType? Type => null; /// <inheritdoc /> - public string UrlFormatString => "https://www.theaudiodb.com/album/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is MusicAlbum; } } diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalUrlProvider.cs new file mode 100644 index 000000000..01d284105 --- /dev/null +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumExternalUrlProvider.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Providers.Plugins.AudioDb; + +/// <summary> +/// External artist URLs for AudioDb. +/// </summary> +public class AudioDbAlbumExternalUrlProvider : IExternalUrlProvider +{ + /// <inheritdoc/> + public string Name => "TheAudioDb Album"; + + /// <inheritdoc/> + public IEnumerable<string> GetExternalUrls(BaseItem item) + { + if (item.TryGetProviderId(MetadataProvider.AudioDbAlbum, out var externalId)) + { + var baseUrl = "https://www.theaudiodb.com/"; + switch (item) + { + case MusicAlbum: + yield return baseUrl + $"album/{externalId}"; + break; + } + } + } +} diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumImageProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumImageProvider.cs index 8a516e1ce..d2eeb7f07 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbAlbumImageProvider.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net.Http; using System.Text.Json; using System.Threading; @@ -50,9 +49,7 @@ namespace MediaBrowser.Providers.Plugins.AudioDb /// <inheritdoc /> public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken) { - var id = item.GetProviderId(MetadataProvider.MusicBrainzReleaseGroup); - - if (!string.IsNullOrWhiteSpace(id)) + if (item.TryGetProviderId(MetadataProvider.MusicBrainzReleaseGroup, out var id)) { await AudioDbAlbumProvider.Current.EnsureInfo(id, cancellationToken).ConfigureAwait(false); @@ -70,7 +67,7 @@ namespace MediaBrowser.Providers.Plugins.AudioDb } } - return Enumerable.Empty<RemoteImageInfo>(); + return []; } private List<RemoteImageInfo> GetImages(AudioDbAlbumProvider.Album item) diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalId.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalId.cs index 8aceb48c0..3b5955b5b 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalId.cs @@ -19,9 +19,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb public ExternalIdMediaType? Type => ExternalIdMediaType.Artist; /// <inheritdoc /> - public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is MusicArtist; } } diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs new file mode 100644 index 000000000..56b0d9bcb --- /dev/null +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistExternalUrlProvider.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Providers.Plugins.AudioDb; + +/// <summary> +/// External artist URLs for AudioDb. +/// </summary> +public class AudioDbArtistExternalUrlProvider : IExternalUrlProvider +{ + /// <inheritdoc/> + public string Name => "TheAudioDb Artist"; + + /// <inheritdoc/> + public IEnumerable<string> GetExternalUrls(BaseItem item) + { + if (item.TryGetProviderId(MetadataProvider.AudioDbArtist, out var externalId)) + { + var baseUrl = "https://www.theaudiodb.com/"; + switch (item) + { + case MusicAlbum: + case Person: + yield return baseUrl + $"artist/{externalId}"; + break; + } + } + } +} diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistImageProvider.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistImageProvider.cs index 4e7757cd2..88730f34d 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistImageProvider.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbArtistImageProvider.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using System.IO; -using System.Linq; using System.Net.Http; using System.Text.Json; using System.Threading; @@ -43,21 +42,19 @@ namespace MediaBrowser.Providers.Plugins.AudioDb /// <inheritdoc /> public IEnumerable<ImageType> GetSupportedImages(BaseItem item) { - return new ImageType[] - { + return + [ ImageType.Primary, ImageType.Logo, ImageType.Banner, ImageType.Backdrop - }; + ]; } /// <inheritdoc /> public async Task<IEnumerable<RemoteImageInfo>> GetImages(BaseItem item, CancellationToken cancellationToken) { - var id = item.GetProviderId(MetadataProvider.MusicBrainzArtist); - - if (!string.IsNullOrWhiteSpace(id)) + if (item.TryGetProviderId(MetadataProvider.MusicBrainzArtist, out var id)) { await AudioDbArtistProvider.Current.EnsureArtistInfo(id, cancellationToken).ConfigureAwait(false); @@ -75,7 +72,7 @@ namespace MediaBrowser.Providers.Plugins.AudioDb } } - return Enumerable.Empty<RemoteImageInfo>(); + return []; } private List<RemoteImageInfo> GetImages(AudioDbArtistProvider.Artist item) diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherAlbumExternalId.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherAlbumExternalId.cs index 014481da2..fdfd330cd 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherAlbumExternalId.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherAlbumExternalId.cs @@ -19,9 +19,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb public ExternalIdMediaType? Type => ExternalIdMediaType.Album; /// <inheritdoc /> - public string UrlFormatString => "https://www.theaudiodb.com/album/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is Audio; } } diff --git a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherArtistExternalId.cs b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherArtistExternalId.cs index 787539104..5a39ec1cd 100644 --- a/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/AudioDb/AudioDbOtherArtistExternalId.cs @@ -19,9 +19,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist; /// <inheritdoc /> - public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is Audio || item is MusicAlbum; } } diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs index 825fe32fa..f1fc4a137 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalId.cs @@ -20,8 +20,5 @@ public class MusicBrainzAlbumArtistExternalId : IExternalId public ExternalIdMediaType? Type => ExternalIdMediaType.AlbumArtist; /// <inheritdoc /> - public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/artist/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is Audio; } diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalUrlProvider.cs new file mode 100644 index 000000000..f4b3f4f8c --- /dev/null +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumArtistExternalUrlProvider.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + +/// <summary> +/// External album artist URLs for MusicBrainz. +/// </summary> +public class MusicBrainzAlbumArtistExternalUrlProvider : IExternalUrlProvider +{ + /// <inheritdoc/> + public string Name => "MusicBrainz Album Artist"; + + /// <inheritdoc/> + public IEnumerable<string> GetExternalUrls(BaseItem item) + { + if (item is MusicAlbum) + { + if (item.TryGetProviderId(MetadataProvider.MusicBrainzAlbumArtist, out var externalId)) + { + yield return Plugin.Instance!.Configuration.Server + $"/artist/{externalId}"; + } + } + } +} diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs index b7d53984c..48784e0ec 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalId.cs @@ -20,8 +20,5 @@ public class MusicBrainzAlbumExternalId : IExternalId public ExternalIdMediaType? Type => ExternalIdMediaType.Album; /// <inheritdoc /> - public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/release/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is Audio || item is MusicAlbum; } diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalUrlProvider.cs new file mode 100644 index 000000000..b9d3b4835 --- /dev/null +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzAlbumExternalUrlProvider.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + +/// <summary> +/// External album URLs for MusicBrainz. +/// </summary> +public class MusicBrainzAlbumExternalUrlProvider : IExternalUrlProvider +{ + /// <inheritdoc/> + public string Name => "MusicBrainz Album"; + + /// <inheritdoc/> + public IEnumerable<string> GetExternalUrls(BaseItem item) + { + if (item is MusicAlbum) + { + if (item.TryGetProviderId(MetadataProvider.MusicBrainzAlbum, out var externalId)) + { + yield return Plugin.Instance!.Configuration.Server + $"/release/{externalId}"; + } + } + } +} diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs index b3f001618..bd5d67ed1 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalId.cs @@ -20,8 +20,5 @@ public class MusicBrainzArtistExternalId : IExternalId public ExternalIdMediaType? Type => ExternalIdMediaType.Artist; /// <inheritdoc /> - public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/artist/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is MusicArtist; } diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs new file mode 100644 index 000000000..ee5a597c6 --- /dev/null +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzArtistExternalUrlProvider.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + +/// <summary> +/// External artist URLs for MusicBrainz. +/// </summary> +public class MusicBrainzArtistExternalUrlProvider : IExternalUrlProvider +{ + /// <inheritdoc/> + public string Name => "MusicBrainz Artist"; + + /// <inheritdoc/> + public IEnumerable<string> GetExternalUrls(BaseItem item) + { + if (item.TryGetProviderId(MetadataProvider.MusicBrainzArtist, out var externalId)) + { + switch (item) + { + case MusicAlbum: + case Person: + yield return Plugin.Instance!.Configuration.Server + $"/artist/{externalId}"; + + break; + } + } + } +} diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs index a0a922293..470cdad66 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzOtherArtistExternalId.cs @@ -20,8 +20,5 @@ public class MusicBrainzOtherArtistExternalId : IExternalId public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist; /// <inheritdoc /> - public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/artist/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is Audio or MusicAlbum; } diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs index 47b6d6963..c19b62abf 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalId.cs @@ -20,8 +20,5 @@ public class MusicBrainzReleaseGroupExternalId : IExternalId public ExternalIdMediaType? Type => ExternalIdMediaType.ReleaseGroup; /// <inheritdoc /> - public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/release-group/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is Audio or MusicAlbum; } diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalUrlProvider.cs new file mode 100644 index 000000000..dd0a939f7 --- /dev/null +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzReleaseGroupExternalUrlProvider.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + +/// <summary> +/// External release group URLs for MusicBrainz. +/// </summary> +public class MusicBrainzReleaseGroupExternalUrlProvider : IExternalUrlProvider +{ + /// <inheritdoc/> + public string Name => "MusicBrainz Release Group"; + + /// <inheritdoc/> + public IEnumerable<string> GetExternalUrls(BaseItem item) + { + if (item is MusicAlbum) + { + if (item.TryGetProviderId(MetadataProvider.MusicBrainzReleaseGroup, out var externalId)) + { + yield return Plugin.Instance!.Configuration.Server + $"/release-group/{externalId}"; + } + } + } +} diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackExternalUrlProvider.cs new file mode 100644 index 000000000..59e6f42b1 --- /dev/null +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackExternalUrlProvider.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Providers.Plugins.MusicBrainz; + +/// <summary> +/// External track URLs for MusicBrainz. +/// </summary> +public class MusicBrainzTrackExternalUrlProvider : IExternalUrlProvider +{ + /// <inheritdoc/> + public string Name => "MusicBrainz Track"; + + /// <inheritdoc/> + public IEnumerable<string> GetExternalUrls(BaseItem item) + { + if (item is Audio) + { + if (item.TryGetProviderId(MetadataProvider.MusicBrainzTrack, out var externalId)) + { + yield return Plugin.Instance!.Configuration.Server + $"/track/{externalId}"; + } + } + } +} diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs index cb4345660..6a7b6f541 100644 --- a/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs +++ b/MediaBrowser.Providers/Plugins/MusicBrainz/MusicBrainzTrackId.cs @@ -20,8 +20,5 @@ public class MusicBrainzTrackId : IExternalId public ExternalIdMediaType? Type => ExternalIdMediaType.Track; /// <inheritdoc /> - public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/track/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) => item is Audio; } diff --git a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs index d453a4ff4..2076589d3 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs @@ -21,9 +21,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets public ExternalIdMediaType? Type => ExternalIdMediaType.BoxSet; /// <inheritdoc /> - public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "collection/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) { return item is Movie || item is MusicVideo || item is Trailer; diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs index 6d6032e8f..9a1d872ec 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs @@ -21,9 +21,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.Movies public ExternalIdMediaType? Type => ExternalIdMediaType.Movie; /// <inheritdoc /> - public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "movie/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) { // Supports images for tv movies diff --git a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs index d26a70028..2c0787b15 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs @@ -20,9 +20,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.People public ExternalIdMediaType? Type => ExternalIdMediaType.Person; /// <inheritdoc /> - public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "person/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) { return item is Person; diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs index 5f2d7909a..840cec984 100644 --- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs +++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs @@ -20,9 +20,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.TV public ExternalIdMediaType? Type => ExternalIdMediaType.Series; /// <inheritdoc /> - public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "tv/{0}"; - - /// <inheritdoc /> public bool Supports(IHasProviderIds item) { return item is Series; diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs b/MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs new file mode 100644 index 000000000..bec800c03 --- /dev/null +++ b/MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs @@ -0,0 +1,95 @@ +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)) + { + var orderString = season.Series.DisplayOrder; + if (string.IsNullOrEmpty(orderString)) + { + // Default order is airdate + yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{season.IndexNumber}"; + } + + if (Enum.TryParse<TvGroupType>(season.Series.DisplayOrder, out var order)) + { + if (order.Equals(TvGroupType.OriginalAirDate)) + { + yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{season.IndexNumber}"; + } + } + } + + break; + case Episode episode: + if (episode.Series.TryGetProviderId(MetadataProvider.Imdb, out seriesExternalId)) + { + var orderString = episode.Series.DisplayOrder; + if (string.IsNullOrEmpty(orderString)) + { + // Default order is airdate + yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{episode.Season.IndexNumber}/episode/{episode.IndexNumber}"; + } + + if (Enum.TryParse<TvGroupType>(orderString, out var order)) + { + if (order.Equals(TvGroupType.OriginalAirDate)) + { + yield return TmdbUtils.BaseTmdbUrl + $"tv/{seriesExternalId}/season/{episode.Season.IndexNumber}/episode/{episode.IndexNumber}"; + } + } + } + + 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; + } + } +} |
