mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-05-31 12:14:21 -04:00
Migrate to IExternalUrlProvider
This commit is contained in:
parent
712908d53c
commit
5303445c9b
@ -31,12 +31,6 @@ namespace MediaBrowser.Controller.Providers
|
|||||||
/// </remarks>
|
/// </remarks>
|
||||||
ExternalIdMediaType? Type { get; }
|
ExternalIdMediaType? Type { get; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the URL format string for this id.
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete("Obsolete in 10.10, to be removed in 10.11")]
|
|
||||||
string? UrlFormatString { get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Determines whether this id supports a given item type.
|
/// Determines whether this id supports a given item type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Providers
|
namespace MediaBrowser.Model.Providers
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -13,15 +11,11 @@ namespace MediaBrowser.Model.Providers
|
|||||||
/// <param name="name">Name of the external id provider (IE: IMDB, MusicBrainz, etc).</param>
|
/// <param name="name">Name of the external id provider (IE: IMDB, MusicBrainz, etc).</param>
|
||||||
/// <param name="key">Key for this id. This key should be unique across all providers.</param>
|
/// <param name="key">Key for this id. This key should be unique across all providers.</param>
|
||||||
/// <param name="type">Specific media type for this id.</param>
|
/// <param name="type">Specific media type for this id.</param>
|
||||||
/// <param name="urlFormatString">URL format string.</param>
|
public ExternalIdInfo(string name, string key, ExternalIdMediaType? type)
|
||||||
public ExternalIdInfo(string name, string key, ExternalIdMediaType? type, string? urlFormatString)
|
|
||||||
{
|
{
|
||||||
Name = name;
|
Name = name;
|
||||||
Key = key;
|
Key = key;
|
||||||
Type = type;
|
Type = type;
|
||||||
#pragma warning disable CS0618 // Type or member is obsolete - Remove 10.11
|
|
||||||
UrlFormatString = urlFormatString;
|
|
||||||
#pragma warning restore CS0618 // Type or member is obsolete
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -46,11 +40,5 @@ namespace MediaBrowser.Model.Providers
|
|||||||
/// This can be used along with the <see cref="Name"/> to localize the external id on the client.
|
/// This can be used along with the <see cref="Name"/> to localize the external id on the client.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public ExternalIdMediaType? Type { get; set; }
|
public ExternalIdMediaType? Type { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the URL format string.
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete("Obsolete in 10.10, to be removed in 10.11")]
|
|
||||||
public string? UrlFormatString { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -899,35 +899,10 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public IEnumerable<ExternalUrl> GetExternalUrls(BaseItem item)
|
public IEnumerable<ExternalUrl> GetExternalUrls(BaseItem item)
|
||||||
{
|
{
|
||||||
#pragma warning disable CS0618 // Type or member is obsolete - Remove 10.11
|
return _externalUrlProviders
|
||||||
var legacyExternalIdUrls = GetExternalIds(item)
|
|
||||||
.Select(i =>
|
|
||||||
{
|
|
||||||
var urlFormatString = i.UrlFormatString;
|
|
||||||
if (string.IsNullOrEmpty(urlFormatString)
|
|
||||||
|| !item.TryGetProviderId(i.Key, out var providerId))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ExternalUrl
|
|
||||||
{
|
|
||||||
Name = i.ProviderName,
|
|
||||||
Url = string.Format(
|
|
||||||
CultureInfo.InvariantCulture,
|
|
||||||
urlFormatString,
|
|
||||||
providerId)
|
|
||||||
};
|
|
||||||
})
|
|
||||||
.OfType<ExternalUrl>();
|
|
||||||
#pragma warning restore CS0618 // Type or member is obsolete
|
|
||||||
|
|
||||||
var externalUrls = _externalUrlProviders
|
|
||||||
.SelectMany(p => p
|
.SelectMany(p => p
|
||||||
.GetExternalUrls(item)
|
.GetExternalUrls(item)
|
||||||
.Select(externalUrl => new ExternalUrl { Name = p.Name, Url = externalUrl }));
|
.Select(externalUrl => new ExternalUrl { Name = p.Name, Url = externalUrl }));
|
||||||
|
|
||||||
return legacyExternalIdUrls.Concat(externalUrls).OrderBy(u => u.Name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
@ -937,10 +912,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
.Select(i => new ExternalIdInfo(
|
.Select(i => new ExternalIdInfo(
|
||||||
name: i.ProviderName,
|
name: i.ProviderName,
|
||||||
key: i.Key,
|
key: i.Key,
|
||||||
type: i.Type,
|
type: i.Type));
|
||||||
#pragma warning disable CS0618 // Type or member is obsolete - Remove 10.11
|
|
||||||
urlFormatString: i.UrlFormatString));
|
|
||||||
#pragma warning restore CS0618 // Type or member is obsolete
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
|
@ -21,9 +21,6 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => null;
|
public ExternalIdMediaType? Type => null;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => "https://www.imdb.com/title/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
{
|
{
|
||||||
|
27
MediaBrowser.Providers/Movies/ImdbExternalUrlProvider.cs
Normal file
27
MediaBrowser.Providers/Movies/ImdbExternalUrlProvider.cs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Providers;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Providers.Movies;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// External URLs for IMDb.
|
||||||
|
/// </summary>
|
||||||
|
public class ImdbExternalUrlProvider : IExternalUrlProvider
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public string Name => "IMDb";
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public IEnumerable<string> GetExternalUrls(BaseItem item)
|
||||||
|
{
|
||||||
|
var baseUrl = "https://www.imdb.com/";
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.Imdb);
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return baseUrl + $"title/{externalId}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,9 +18,6 @@ namespace MediaBrowser.Providers.Movies
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Person;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Person;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => "https://www.imdb.com/name/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Person;
|
public bool Supports(IHasProviderIds item) => item is Person;
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,6 @@ namespace MediaBrowser.Providers.Music
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => null;
|
public ExternalIdMediaType? Type => null;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string? UrlFormatString => null;
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
=> item is MusicVideo;
|
=> item is MusicVideo;
|
||||||
|
@ -18,9 +18,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => null;
|
public ExternalIdMediaType? Type => null;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => "https://www.theaudiodb.com/album/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is MusicAlbum;
|
public bool Supports(IHasProviderIds item) => item is MusicAlbum;
|
||||||
}
|
}
|
||||||
|
@ -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 AudioDbAlbumExternalUrlProvider : IExternalUrlProvider
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public string Name => "TheAudioDb Album";
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public IEnumerable<string> GetExternalUrls(BaseItem item)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.AudioDbAlbum);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
var baseUrl = "https://www.theaudiodb.com/";
|
||||||
|
switch (item)
|
||||||
|
{
|
||||||
|
case MusicAlbum:
|
||||||
|
yield return baseUrl + $"album/{externalId}";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,9 +18,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Artist;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Artist;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is MusicArtist;
|
public bool Supports(IHasProviderIds item) => item is MusicArtist;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
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)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.AudioDbArtist);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
var baseUrl = "https://www.theaudiodb.com/";
|
||||||
|
switch (item)
|
||||||
|
{
|
||||||
|
case MusicAlbum:
|
||||||
|
case Person:
|
||||||
|
yield return baseUrl + $"artist/{externalId}";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,9 +18,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Album;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Album;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => "https://www.theaudiodb.com/album/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Audio;
|
public bool Supports(IHasProviderIds item) => item is Audio;
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,6 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Audio || item is MusicAlbum;
|
public bool Supports(IHasProviderIds item) => item is Audio || item is MusicAlbum;
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,6 @@ public class MusicBrainzAlbumArtistExternalId : IExternalId
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.AlbumArtist;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.AlbumArtist;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/artist/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Audio;
|
public bool Supports(IHasProviderIds item) => item is Audio;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
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)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.MusicBrainzAlbumArtist);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return Plugin.Instance!.Configuration.Server + $"/artist/{externalId}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,9 +19,6 @@ public class MusicBrainzAlbumExternalId : IExternalId
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Album;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Album;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/release/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Audio || item is MusicAlbum;
|
public bool Supports(IHasProviderIds item) => item is Audio || item is MusicAlbum;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
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)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.MusicBrainzArtist);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return Plugin.Instance!.Configuration.Server + $"/release/{externalId}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,9 +19,6 @@ public class MusicBrainzArtistExternalId : IExternalId
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Artist;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Artist;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/artist/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is MusicArtist;
|
public bool Supports(IHasProviderIds item) => item is MusicArtist;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
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)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.MusicBrainzArtist);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
switch (item)
|
||||||
|
{
|
||||||
|
case MusicAlbum:
|
||||||
|
case Person:
|
||||||
|
yield return Plugin.Instance!.Configuration.Server + $"/artist/{externalId}";
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,9 +19,6 @@ public class MusicBrainzOtherArtistExternalId : IExternalId
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/artist/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Audio or MusicAlbum;
|
public bool Supports(IHasProviderIds item) => item is Audio or MusicAlbum;
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,6 @@ public class MusicBrainzReleaseGroupExternalId : IExternalId
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.ReleaseGroup;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.ReleaseGroup;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/release-group/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Audio or MusicAlbum;
|
public bool Supports(IHasProviderIds item) => item is Audio or MusicAlbum;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
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)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.MusicBrainzReleaseGroup);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return Plugin.Instance!.Configuration.Server + $"/release-group/{externalId}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
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)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.MusicBrainzArtist);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return Plugin.Instance!.Configuration.Server + $"/track/{externalId}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,9 +19,6 @@ public class MusicBrainzTrackId : IExternalId
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Track;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Track;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => Plugin.Instance!.Configuration.Server + "/track/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Audio;
|
public bool Supports(IHasProviderIds item) => item is Audio;
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.BoxSet;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.BoxSet;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "collection/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
{
|
{
|
||||||
|
@ -20,9 +20,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.Movies
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Movie;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Movie;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "movie/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
{
|
{
|
||||||
|
@ -19,9 +19,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.People
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Person;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Person;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "person/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
{
|
{
|
||||||
|
@ -19,9 +19,6 @@ namespace MediaBrowser.Providers.Plugins.Tmdb.TV
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => ExternalIdMediaType.Series;
|
public ExternalIdMediaType? Type => ExternalIdMediaType.Series;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "tv/{0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
{
|
{
|
||||||
|
101
MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs
Normal file
101
MediaBrowser.Providers/Plugins/Tmdb/TmdbExternalUrlProvider.cs
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
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:
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.Tmdb);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return TmdbUtils.BaseTmdbUrl + $"tv/{externalId}";
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case Season season:
|
||||||
|
var seriesExternalId = season.Series.GetProviderId(MetadataProvider.Tmdb);
|
||||||
|
if (!string.IsNullOrEmpty(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:
|
||||||
|
seriesExternalId = episode.Series.GetProviderId(MetadataProvider.Tmdb);
|
||||||
|
if (!string.IsNullOrEmpty(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:
|
||||||
|
externalId = item.GetProviderId(MetadataProvider.Tmdb);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return TmdbUtils.BaseTmdbUrl + $"movie/{externalId}";
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case Person:
|
||||||
|
externalId = item.GetProviderId(MetadataProvider.Tmdb);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return TmdbUtils.BaseTmdbUrl + $"person/{externalId}";
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case BoxSet:
|
||||||
|
externalId = item.GetProviderId(MetadataProvider.Tmdb);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return TmdbUtils.BaseTmdbUrl + $"collection/{externalId}";
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -18,9 +18,6 @@ namespace MediaBrowser.Providers.TV
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ExternalIdMediaType? Type => null;
|
public ExternalIdMediaType? Type => null;
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public string UrlFormatString => "http://tvlistings.zap2it.com/overview.html?programSeriesId={0}";
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public bool Supports(IHasProviderIds item) => item is Series;
|
public bool Supports(IHasProviderIds item) => item is Series;
|
||||||
}
|
}
|
||||||
|
25
MediaBrowser.Providers/TV/Zap2ItExternalUrlProvider.cs
Normal file
25
MediaBrowser.Providers/TV/Zap2ItExternalUrlProvider.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using MediaBrowser.Controller.Entities;
|
||||||
|
using MediaBrowser.Controller.Providers;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Providers.TV;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// External URLs for TMDb.
|
||||||
|
/// </summary>
|
||||||
|
public class Zap2ItExternalUrlProvider : IExternalUrlProvider
|
||||||
|
{
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public string Name => "Zap2It";
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public IEnumerable<string> GetExternalUrls(BaseItem item)
|
||||||
|
{
|
||||||
|
var externalId = item.GetProviderId(MetadataProvider.Zap2It);
|
||||||
|
if (!string.IsNullOrEmpty(externalId))
|
||||||
|
{
|
||||||
|
yield return $"http://tvlistings.zap2it.com/overview.html?programSeriesId={externalId}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -26,7 +26,7 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers
|
|||||||
var providerManager = new Mock<IProviderManager>();
|
var providerManager = new Mock<IProviderManager>();
|
||||||
|
|
||||||
var imdbExternalId = new ImdbExternalId();
|
var imdbExternalId = new ImdbExternalId();
|
||||||
var externalIdInfo = new ExternalIdInfo(imdbExternalId.ProviderName, imdbExternalId.Key, imdbExternalId.Type, imdbExternalId.UrlFormatString);
|
var externalIdInfo = new ExternalIdInfo(imdbExternalId.ProviderName, imdbExternalId.Key, imdbExternalId.Type);
|
||||||
|
|
||||||
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
||||||
.Returns(new[] { externalIdInfo });
|
.Returns(new[] { externalIdInfo });
|
||||||
|
@ -34,7 +34,7 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers
|
|||||||
var providerManager = new Mock<IProviderManager>();
|
var providerManager = new Mock<IProviderManager>();
|
||||||
|
|
||||||
var tmdbExternalId = new TmdbMovieExternalId();
|
var tmdbExternalId = new TmdbMovieExternalId();
|
||||||
var externalIdInfo = new ExternalIdInfo(tmdbExternalId.ProviderName, tmdbExternalId.Key, tmdbExternalId.Type, tmdbExternalId.UrlFormatString);
|
var externalIdInfo = new ExternalIdInfo(tmdbExternalId.ProviderName, tmdbExternalId.Key, tmdbExternalId.Type);
|
||||||
|
|
||||||
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
||||||
.Returns(new[] { externalIdInfo });
|
.Returns(new[] { externalIdInfo });
|
||||||
|
@ -24,7 +24,7 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers
|
|||||||
var providerManager = new Mock<IProviderManager>();
|
var providerManager = new Mock<IProviderManager>();
|
||||||
|
|
||||||
var musicBrainzArtist = new MusicBrainzArtistExternalId();
|
var musicBrainzArtist = new MusicBrainzArtistExternalId();
|
||||||
var externalIdInfo = new ExternalIdInfo(musicBrainzArtist.ProviderName, musicBrainzArtist.Key, musicBrainzArtist.Type, "MusicBrainzServer");
|
var externalIdInfo = new ExternalIdInfo(musicBrainzArtist.ProviderName, musicBrainzArtist.Key, musicBrainzArtist.Type);
|
||||||
|
|
||||||
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
||||||
.Returns(new[] { externalIdInfo });
|
.Returns(new[] { externalIdInfo });
|
||||||
|
@ -24,7 +24,7 @@ namespace Jellyfin.XbmcMetadata.Tests.Parsers
|
|||||||
var providerManager = new Mock<IProviderManager>();
|
var providerManager = new Mock<IProviderManager>();
|
||||||
|
|
||||||
var musicBrainzArtist = new MusicBrainzArtistExternalId();
|
var musicBrainzArtist = new MusicBrainzArtistExternalId();
|
||||||
var externalIdInfo = new ExternalIdInfo(musicBrainzArtist.ProviderName, musicBrainzArtist.Key, musicBrainzArtist.Type, "MusicBrainzServer");
|
var externalIdInfo = new ExternalIdInfo(musicBrainzArtist.ProviderName, musicBrainzArtist.Key, musicBrainzArtist.Type);
|
||||||
|
|
||||||
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
providerManager.Setup(x => x.GetExternalIdInfos(It.IsAny<IHasProviderIds>()))
|
||||||
.Returns(new[] { externalIdInfo });
|
.Returns(new[] { externalIdInfo });
|
||||||
|
Loading…
x
Reference in New Issue
Block a user