diff --git a/MediaBrowser.Controller/Providers/IExternalId.cs b/MediaBrowser.Controller/Providers/IExternalId.cs
index d7e337bdab..5e38446bc9 100644
--- a/MediaBrowser.Controller/Providers/IExternalId.cs
+++ b/MediaBrowser.Controller/Providers/IExternalId.cs
@@ -1,15 +1,45 @@
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Controller.Providers
{
+ ///
+ /// Represents an identifier for an external provider.
+ ///
public interface IExternalId
{
- string Name { get; }
+ ///
+ /// Gets the display name of the provider associated with this ID type.
+ ///
+ string ProviderName { get; }
+ ///
+ /// Gets the unique key to distinguish this provider/type pair. This should be unique across providers.
+ ///
+ // TODO: This property is not actually unique across the concrete types at the moment. It should be updated to be unique.
string Key { get; }
+ ///
+ /// Gets the specific media type for this id. This is used to distinguish between the different
+ /// external id types for providers with multiple ids.
+ /// A null value indicates there is no specific media type associated with the external id, or this is the
+ /// default id for the external provider so there is no need to specify a type.
+ ///
+ ///
+ /// This can be used along with the to localize the external id on the client.
+ ///
+ ExternalIdMediaType? Type { get; }
+
+ ///
+ /// Gets the URL format string for this id.
+ ///
string UrlFormatString { get; }
+ ///
+ /// Determines whether this id supports a given item type.
+ ///
+ /// The item.
+ /// True if this item is supported, otherwise false.
bool Supports(IHasProviderIds item);
}
}
diff --git a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs
index e11ceb826d..4ac2498400 100644
--- a/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs
+++ b/MediaBrowser.LocalMetadata/Parsers/BaseItemXmlParser.cs
@@ -81,7 +81,7 @@ namespace MediaBrowser.LocalMetadata.Parsers
var id = info.Key + "Id";
if (!_validProviderIds.ContainsKey(id))
{
- _validProviderIds.Add(id, info.Key);
+ _validProviderIds.Add(id, info.Key!);
}
}
diff --git a/MediaBrowser.Model/Providers/ExternalIdInfo.cs b/MediaBrowser.Model/Providers/ExternalIdInfo.cs
index f2e6d8ef32..01784554f9 100644
--- a/MediaBrowser.Model/Providers/ExternalIdInfo.cs
+++ b/MediaBrowser.Model/Providers/ExternalIdInfo.cs
@@ -1,26 +1,36 @@
-#nullable disable
-#pragma warning disable CS1591
-
namespace MediaBrowser.Model.Providers
{
+ ///
+ /// Represents the external id information for serialization to the client.
+ ///
public class ExternalIdInfo
{
///
- /// Gets or sets the name.
+ /// Gets or sets the display name of the external id provider (IE: IMDB, MusicBrainz, etc).
+ ///
+ // TODO: This should be renamed to ProviderName
+ public string? Name { get; set; }
+
+ ///
+ /// Gets or sets the unique key for this id. This key should be unique across all providers.
///
- /// The name.
- public string Name { get; set; }
+ // TODO: This property is not actually unique across the concrete types at the moment. It should be updated to be unique.
+ public string? Key { get; set; }
///
- /// Gets or sets the key.
+ /// Gets or sets the specific media type for this id. This is used to distinguish between the different
+ /// external id types for providers with multiple ids.
+ /// A null value indicates there is no specific media type associated with the external id, or this is the
+ /// default id for the external provider so there is no need to specify a type.
///
- /// The key.
- public string Key { get; set; }
+ ///
+ /// This can be used along with the to localize the external id on the client.
+ ///
+ public ExternalIdMediaType? Type { get; set; }
///
/// Gets or sets the URL format string.
///
- /// The URL format string.
- public string UrlFormatString { get; set; }
+ public string? UrlFormatString { get; set; }
}
}
diff --git a/MediaBrowser.Model/Providers/ExternalIdMediaType.cs b/MediaBrowser.Model/Providers/ExternalIdMediaType.cs
new file mode 100644
index 0000000000..5303c8f58b
--- /dev/null
+++ b/MediaBrowser.Model/Providers/ExternalIdMediaType.cs
@@ -0,0 +1,71 @@
+namespace MediaBrowser.Model.Providers
+{
+ ///
+ /// The specific media type of an .
+ ///
+ ///
+ /// Client applications may use this as a translation key.
+ ///
+ public enum ExternalIdMediaType
+ {
+ ///
+ /// A music album.
+ ///
+ Album = 1,
+
+ ///
+ /// The artist of a music album.
+ ///
+ AlbumArtist = 2,
+
+ ///
+ /// The artist of a media item.
+ ///
+ Artist = 3,
+
+ ///
+ /// A boxed set of media.
+ ///
+ BoxSet = 4,
+
+ ///
+ /// A series episode.
+ ///
+ Episode = 5,
+
+ ///
+ /// A movie.
+ ///
+ Movie = 6,
+
+ ///
+ /// An alternative artist apart from the main artist.
+ ///
+ OtherArtist = 7,
+
+ ///
+ /// A person.
+ ///
+ Person = 8,
+
+ ///
+ /// A release group.
+ ///
+ ReleaseGroup = 9,
+
+ ///
+ /// A single season of a series.
+ ///
+ Season = 10,
+
+ ///
+ /// A series.
+ ///
+ Series = 11,
+
+ ///
+ /// A music track.
+ ///
+ Track = 12
+ }
+}
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index a51007a0e3..86a182fe50 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -102,7 +102,7 @@ namespace MediaBrowser.Providers.Manager
_metadataServices = metadataServices.OrderBy(i => i.Order).ToArray();
_metadataProviders = metadataProviders.ToArray();
- _externalIds = externalIds.OrderBy(i => i.Name).ToArray();
+ _externalIds = externalIds.OrderBy(i => i.ProviderName).ToArray();
_savers = metadataSavers.Where(i =>
{
@@ -900,7 +900,7 @@ namespace MediaBrowser.Providers.Manager
return new ExternalUrl
{
- Name = i.Name,
+ Name = i.ProviderName,
Url = string.Format(
CultureInfo.InvariantCulture,
i.UrlFormatString,
@@ -914,8 +914,9 @@ namespace MediaBrowser.Providers.Manager
return GetExternalIds(item)
.Select(i => new ExternalIdInfo
{
- Name = i.Name,
+ Name = i.ProviderName,
Key = i.Key,
+ Type = i.Type,
UrlFormatString = i.UrlFormatString
});
}
diff --git a/MediaBrowser.Providers/Movies/MovieExternalIds.cs b/MediaBrowser.Providers/Movies/MovieExternalIds.cs
index 4a0cca35e7..14080841c2 100644
--- a/MediaBrowser.Providers/Movies/MovieExternalIds.cs
+++ b/MediaBrowser.Providers/Movies/MovieExternalIds.cs
@@ -6,17 +6,21 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Movies
{
public class ImdbExternalId : IExternalId
{
///
- public string Name => "IMDb";
+ public string ProviderName => "IMDb";
///
public string Key => MetadataProvider.Imdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => null;
+
///
public string UrlFormatString => "https://www.imdb.com/title/{0}";
@@ -36,11 +40,14 @@ namespace MediaBrowser.Providers.Movies
public class ImdbPersonExternalId : IExternalId
{
///
- public string Name => "IMDb";
+ public string ProviderName => "IMDb";
///
public string Key => MetadataProvider.Imdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Person;
+
///
public string UrlFormatString => "https://www.imdb.com/name/{0}";
diff --git a/MediaBrowser.Providers/Music/MusicExternalIds.cs b/MediaBrowser.Providers/Music/MusicExternalIds.cs
index 30c69dd0e5..a1726b9965 100644
--- a/MediaBrowser.Providers/Music/MusicExternalIds.cs
+++ b/MediaBrowser.Providers/Music/MusicExternalIds.cs
@@ -3,17 +3,21 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Music
{
public class ImvdbId : IExternalId
{
///
- public string Name => "IMVDb";
+ public string ProviderName => "IMVDb";
///
public string Key => "IMVDb";
+ ///
+ public ExternalIdMediaType? Type => null;
+
///
public string UrlFormatString => null;
diff --git a/MediaBrowser.Providers/Plugins/AudioDb/ExternalIds.cs b/MediaBrowser.Providers/Plugins/AudioDb/ExternalIds.cs
index 770dfe80fb..1cc1f0fa18 100644
--- a/MediaBrowser.Providers/Plugins/AudioDb/ExternalIds.cs
+++ b/MediaBrowser.Providers/Plugins/AudioDb/ExternalIds.cs
@@ -3,17 +3,21 @@
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Plugins.AudioDb
{
public class AudioDbAlbumExternalId : IExternalId
{
///
- public string Name => "TheAudioDb";
+ public string ProviderName => "TheAudioDb";
///
public string Key => MetadataProvider.AudioDbAlbum.ToString();
+ ///
+ public ExternalIdMediaType? Type => null;
+
///
public string UrlFormatString => "https://www.theaudiodb.com/album/{0}";
@@ -24,11 +28,14 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
public class AudioDbOtherAlbumExternalId : IExternalId
{
///
- public string Name => "TheAudioDb Album";
+ public string ProviderName => "TheAudioDb";
///
public string Key => MetadataProvider.AudioDbAlbum.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Album;
+
///
public string UrlFormatString => "https://www.theaudiodb.com/album/{0}";
@@ -39,11 +46,14 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
public class AudioDbArtistExternalId : IExternalId
{
///
- public string Name => "TheAudioDb";
+ public string ProviderName => "TheAudioDb";
///
public string Key => MetadataProvider.AudioDbArtist.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Artist;
+
///
public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}";
@@ -54,11 +64,14 @@ namespace MediaBrowser.Providers.Plugins.AudioDb
public class AudioDbOtherArtistExternalId : IExternalId
{
///
- public string Name => "TheAudioDb Artist";
+ public string ProviderName => "TheAudioDb";
///
public string Key => MetadataProvider.AudioDbArtist.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist;
+
///
public string UrlFormatString => "https://www.theaudiodb.com/artist/{0}";
diff --git a/MediaBrowser.Providers/Plugins/MusicBrainz/ExternalIds.cs b/MediaBrowser.Providers/Plugins/MusicBrainz/ExternalIds.cs
index 8857cb6182..5600c389c0 100644
--- a/MediaBrowser.Providers/Plugins/MusicBrainz/ExternalIds.cs
+++ b/MediaBrowser.Providers/Plugins/MusicBrainz/ExternalIds.cs
@@ -3,6 +3,7 @@
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
using MediaBrowser.Providers.Plugins.MusicBrainz;
namespace MediaBrowser.Providers.Music
@@ -10,11 +11,14 @@ namespace MediaBrowser.Providers.Music
public class MusicBrainzReleaseGroupExternalId : IExternalId
{
///
- public string Name => "MusicBrainz Release Group";
+ public string ProviderName => "MusicBrainz";
///
public string Key => MetadataProvider.MusicBrainzReleaseGroup.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.ReleaseGroup;
+
///
public string UrlFormatString => Plugin.Instance.Configuration.Server + "/release-group/{0}";
@@ -25,11 +29,14 @@ namespace MediaBrowser.Providers.Music
public class MusicBrainzAlbumArtistExternalId : IExternalId
{
///
- public string Name => "MusicBrainz Album Artist";
+ public string ProviderName => "MusicBrainz";
///
public string Key => MetadataProvider.MusicBrainzAlbumArtist.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.AlbumArtist;
+
///
public string UrlFormatString => Plugin.Instance.Configuration.Server + "/artist/{0}";
@@ -40,11 +47,14 @@ namespace MediaBrowser.Providers.Music
public class MusicBrainzAlbumExternalId : IExternalId
{
///
- public string Name => "MusicBrainz Album";
+ public string ProviderName => "MusicBrainz";
///
public string Key => MetadataProvider.MusicBrainzAlbum.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Album;
+
///
public string UrlFormatString => Plugin.Instance.Configuration.Server + "/release/{0}";
@@ -55,11 +65,14 @@ namespace MediaBrowser.Providers.Music
public class MusicBrainzArtistExternalId : IExternalId
{
///
- public string Name => "MusicBrainz";
+ public string ProviderName => "MusicBrainz";
///
public string Key => MetadataProvider.MusicBrainzArtist.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Artist;
+
///
public string UrlFormatString => Plugin.Instance.Configuration.Server + "/artist/{0}";
@@ -70,12 +83,15 @@ namespace MediaBrowser.Providers.Music
public class MusicBrainzOtherArtistExternalId : IExternalId
{
///
- public string Name => "MusicBrainz Artist";
+ public string ProviderName => "MusicBrainz";
///
public string Key => MetadataProvider.MusicBrainzArtist.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.OtherArtist;
+
///
public string UrlFormatString => Plugin.Instance.Configuration.Server + "/artist/{0}";
@@ -86,11 +102,14 @@ namespace MediaBrowser.Providers.Music
public class MusicBrainzTrackId : IExternalId
{
///
- public string Name => "MusicBrainz Track";
+ public string ProviderName => "MusicBrainz";
///
public string Key => MetadataProvider.MusicBrainzTrack.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Track;
+
///
public string UrlFormatString => Plugin.Instance.Configuration.Server + "/track/{0}";
diff --git a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs
index 629f95d536..1f7ec64338 100644
--- a/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs
+++ b/MediaBrowser.Providers/Plugins/Tmdb/BoxSets/TmdbBoxSetExternalId.cs
@@ -1,20 +1,25 @@
-#pragma warning disable CS1591
-
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Plugins.Tmdb.BoxSets
{
+ ///
+ /// External ID for a TMDB box set.
+ ///
public class TmdbBoxSetExternalId : IExternalId
{
///
- public string Name => TmdbUtils.ProviderName;
+ public string ProviderName => TmdbUtils.ProviderName;
///
public string Key => MetadataProvider.TmdbCollection.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.BoxSet;
+
///
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "collection/{0}";
diff --git a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs
index 095f57398e..9610e40585 100644
--- a/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs
+++ b/MediaBrowser.Providers/Plugins/Tmdb/Movies/TmdbMovieExternalId.cs
@@ -1,21 +1,26 @@
-#pragma warning disable CS1591
-
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Plugins.Tmdb.Movies
{
+ ///
+ /// External ID for a TMBD movie.
+ ///
public class TmdbMovieExternalId : IExternalId
{
///
- public string Name => TmdbUtils.ProviderName;
+ public string ProviderName => TmdbUtils.ProviderName;
///
public string Key => MetadataProvider.Tmdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Movie;
+
///
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "movie/{0}";
diff --git a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs
index 2c6cf5db4e..de74a7a4c7 100644
--- a/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs
+++ b/MediaBrowser.Providers/Plugins/Tmdb/People/TmdbPersonExternalId.cs
@@ -1,19 +1,24 @@
-#pragma warning disable CS1591
-
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Plugins.Tmdb.People
{
+ ///
+ /// External ID for a TMDB person.
+ ///
public class TmdbPersonExternalId : IExternalId
{
///
- public string Name => TmdbUtils.ProviderName;
+ public string ProviderName => TmdbUtils.ProviderName;
///
public string Key => MetadataProvider.Tmdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Person;
+
///
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "person/{0}";
diff --git a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs
index 1da203fd74..6ecc055d71 100644
--- a/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs
+++ b/MediaBrowser.Providers/Plugins/Tmdb/TV/TmdbSeriesExternalId.cs
@@ -1,19 +1,24 @@
-#pragma warning disable CS1591
-
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Plugins.Tmdb.TV
{
+ ///
+ /// External ID for a TMDB series.
+ ///
public class TmdbSeriesExternalId : IExternalId
{
///
- public string Name => TmdbUtils.ProviderName;
+ public string ProviderName => TmdbUtils.ProviderName;
///
public string Key => MetadataProvider.Tmdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Series;
+
///
public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "tv/{0}";
diff --git a/MediaBrowser.Providers/TV/TvExternalIds.cs b/MediaBrowser.Providers/TV/TvExternalIds.cs
index 1d904a84c0..a6040edd15 100644
--- a/MediaBrowser.Providers/TV/TvExternalIds.cs
+++ b/MediaBrowser.Providers/TV/TvExternalIds.cs
@@ -3,6 +3,7 @@
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
using MediaBrowser.Providers.Plugins.TheTvdb;
namespace MediaBrowser.Providers.TV
@@ -10,11 +11,14 @@ namespace MediaBrowser.Providers.TV
public class Zap2ItExternalId : IExternalId
{
///
- public string Name => "Zap2It";
+ public string ProviderName => "Zap2It";
///
public string Key => MetadataProvider.Zap2It.ToString();
+ ///
+ public ExternalIdMediaType? Type => null;
+
///
public string UrlFormatString => "http://tvlistings.zap2it.com/overview.html?programSeriesId={0}";
@@ -25,11 +29,14 @@ namespace MediaBrowser.Providers.TV
public class TvdbExternalId : IExternalId
{
///
- public string Name => "TheTVDB";
+ public string ProviderName => "TheTVDB";
///
public string Key => MetadataProvider.Tvdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => null;
+
///
public string UrlFormatString => TvdbUtils.TvdbBaseUrl + "?tab=series&id={0}";
@@ -40,11 +47,14 @@ namespace MediaBrowser.Providers.TV
public class TvdbSeasonExternalId : IExternalId
{
///
- public string Name => "TheTVDB";
+ public string ProviderName => "TheTVDB";
///
public string Key => MetadataProvider.Tvdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Season;
+
///
public string UrlFormatString => null;
@@ -55,11 +65,14 @@ namespace MediaBrowser.Providers.TV
public class TvdbEpisodeExternalId : IExternalId
{
///
- public string Name => "TheTVDB";
+ public string ProviderName => "TheTVDB";
///
public string Key => MetadataProvider.Tvdb.ToString();
+ ///
+ public ExternalIdMediaType? Type => ExternalIdMediaType.Episode;
+
///
public string UrlFormatString => TvdbUtils.TvdbBaseUrl + "?tab=episode&id={0}";