aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj5
-rw-r--r--MediaBrowser.Providers/Movies/MovieExternalIds.cs79
-rw-r--r--MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetExternalId.cs25
-rw-r--r--MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs (renamed from MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs)55
-rw-r--r--MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetProvider.cs (renamed from MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs)120
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Collections/CollectionImages.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Collections/CollectionResult.cs15
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Collections/Part.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Backdrop.cs13
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Crew.cs12
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/ExternalIds.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Genre.cs8
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Images.cs10
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Keyword.cs8
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Keywords.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Poster.cs13
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Profile.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Still.cs14
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/StillImages.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Video.cs14
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/General/Videos.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/BelongsToCollection.cs10
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/Cast.cs12
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/Casts.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/Country.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/MovieResult.cs49
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCompany.cs8
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCountry.cs8
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/Releases.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/SpokenLanguage.cs8
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/Trailers.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Movies/Youtube.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/People/PersonImages.cs10
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/People/PersonResult.cs23
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Search/ExternalIdLookupResult.cs10
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs65
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Search/PersonSearchResult.cs29
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Search/TmdbSearchResult.cs31
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/Search/TvResult.cs15
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/Cast.cs12
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/ContentRating.cs8
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/ContentRatings.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/CreatedBy.cs9
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/Credits.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/Episode.cs14
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/EpisodeCredits.cs12
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/EpisodeResult.cs23
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/GuestStar.cs12
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/Network.cs8
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/Season.cs11
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/SeasonImages.cs10
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/SeasonResult.cs21
-rw-r--r--MediaBrowser.Providers/Tmdb/Models/TV/SeriesResult.cs40
-rw-r--r--MediaBrowser.Providers/Tmdb/Movies/GenericTmdbMovieInfo.cs (renamed from MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs)136
-rw-r--r--MediaBrowser.Providers/Tmdb/Movies/TmdbImageProvider.cs (renamed from MediaBrowser.Providers/Movies/MovieDbImageProvider.cs)61
-rw-r--r--MediaBrowser.Providers/Tmdb/Movies/TmdbMovieExternalId.cs32
-rw-r--r--MediaBrowser.Providers/Tmdb/Movies/TmdbMovieProvider.cs (renamed from MediaBrowser.Providers/Movies/MovieDbProvider.cs)262
-rw-r--r--MediaBrowser.Providers/Tmdb/Movies/TmdbSearch.cs (renamed from MediaBrowser.Providers/Movies/MovieDbSearch.cs)198
-rw-r--r--MediaBrowser.Providers/Tmdb/Movies/TmdbSettings.cs (renamed from MediaBrowser.Providers/Movies/TmdbSettings.cs)2
-rw-r--r--MediaBrowser.Providers/Tmdb/Music/TmdbMusicVideoProvider.cs (renamed from MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs)9
-rw-r--r--MediaBrowser.Providers/Tmdb/People/TmdbPersonExternalId.cs24
-rw-r--r--MediaBrowser.Providers/Tmdb/People/TmdbPersonImageProvider.cs (renamed from MediaBrowser.Providers/People/MovieDbPersonImageProvider.cs)37
-rw-r--r--MediaBrowser.Providers/Tmdb/People/TmdbPersonProvider.cs (renamed from MediaBrowser.Providers/People/MovieDbPersonProvider.cs)188
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeImageProvider.cs (renamed from MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs)33
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeProvider.cs (renamed from MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs)71
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeProviderBase.cs (renamed from MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs)127
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs (renamed from MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs)131
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbSeriesExternalId.cs24
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbSeriesImageProvider.cs (renamed from MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs)56
-rw-r--r--MediaBrowser.Providers/Tmdb/TV/TmdbSeriesProvider.cs (renamed from MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs)334
-rw-r--r--MediaBrowser.Providers/Tmdb/TmdbUtils.cs31
-rw-r--r--MediaBrowser.Providers/Tmdb/Trailers/TmdbTrailerProvider.cs (renamed from MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs)14
72 files changed, 1344 insertions, 1415 deletions
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index ab4759c61..c8089d6f5 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -24,4 +24,9 @@
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
+ <PropertyGroup>
+ <!-- We need at least C# 7.1 -->
+ <LangVersion>latest</LangVersion>
+ </PropertyGroup>
+
</Project>
diff --git a/MediaBrowser.Providers/Movies/MovieExternalIds.cs b/MediaBrowser.Providers/Movies/MovieExternalIds.cs
index 3783c5032..09ed6034c 100644
--- a/MediaBrowser.Providers/Movies/MovieExternalIds.cs
+++ b/MediaBrowser.Providers/Movies/MovieExternalIds.cs
@@ -7,85 +7,6 @@ using MediaBrowser.Model.Entities;
namespace MediaBrowser.Providers.Movies
{
- public class MovieDbMovieExternalId : IExternalId
- {
- public const string BaseMovieDbUrl = "https://www.themoviedb.org/";
-
- public string Name => "TheMovieDb";
-
- public string Key => MetadataProviders.Tmdb.ToString();
-
- public string UrlFormatString => BaseMovieDbUrl + "movie/{0}";
-
- public bool Supports(IHasProviderIds item)
- {
- // Supports images for tv movies
- var tvProgram = item as LiveTvProgram;
- if (tvProgram != null && tvProgram.IsMovie)
- {
- return true;
- }
-
- return item is Movie || item is MusicVideo || item is Trailer;
- }
- }
-
- public class MovieDbSeriesExternalId : IExternalId
- {
- public string Name => "TheMovieDb";
-
- public string Key => MetadataProviders.Tmdb.ToString();
-
- public string UrlFormatString => MovieDbMovieExternalId.BaseMovieDbUrl + "tv/{0}";
-
- public bool Supports(IHasProviderIds item)
- {
- return item is Series;
- }
- }
-
- public class MovieDbMovieCollectionExternalId : IExternalId
- {
- public string Name => "TheMovieDb Collection";
-
- public string Key => MetadataProviders.TmdbCollection.ToString();
-
- public string UrlFormatString => MovieDbMovieExternalId.BaseMovieDbUrl + "collection/{0}";
-
- public bool Supports(IHasProviderIds item)
- {
- return item is Movie || item is MusicVideo || item is Trailer;
- }
- }
-
- public class MovieDbPersonExternalId : IExternalId
- {
- public string Name => "TheMovieDb";
-
- public string Key => MetadataProviders.Tmdb.ToString();
-
- public string UrlFormatString => MovieDbMovieExternalId.BaseMovieDbUrl + "person/{0}";
-
- public bool Supports(IHasProviderIds item)
- {
- return item is Person;
- }
- }
-
- public class MovieDbCollectionExternalId : IExternalId
- {
- public string Name => "TheMovieDb";
-
- public string Key => MetadataProviders.Tmdb.ToString();
-
- public string UrlFormatString => MovieDbMovieExternalId.BaseMovieDbUrl + "collection/{0}";
-
- public bool Supports(IHasProviderIds item)
- {
- return item is BoxSet;
- }
- }
-
public class ImdbExternalId : IExternalId
{
public string Name => "IMDb";
diff --git a/MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetExternalId.cs b/MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetExternalId.cs
new file mode 100644
index 000000000..187295e1e
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetExternalId.cs
@@ -0,0 +1,25 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+
+namespace MediaBrowser.Providers.Tmdb.BoxSets
+{
+ public class TmdbBoxSetExternalId : IExternalId
+ {
+ /// <inheritdoc />
+ public string Name => TmdbUtils.ProviderName;
+
+ /// <inheritdoc />
+ public string Key => MetadataProviders.TmdbCollection.ToString();
+
+ /// <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/BoxSets/MovieDbBoxSetImageProvider.cs b/MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs
index 4d12b2f4a..5db0edac2 100644
--- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs
@@ -11,21 +11,24 @@ using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Providers;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.Collections;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Movies;
-namespace MediaBrowser.Providers.BoxSets
+namespace MediaBrowser.Providers.Tmdb.BoxSets
{
- public class MovieDbBoxSetImageProvider : IRemoteImageProvider, IHasOrder
+ public class TmdbBoxSetImageProvider : IRemoteImageProvider, IHasOrder
{
private readonly IHttpClient _httpClient;
- public MovieDbBoxSetImageProvider(IHttpClient httpClient)
+ public TmdbBoxSetImageProvider(IHttpClient httpClient)
{
_httpClient = httpClient;
}
public string Name => ProviderName;
- public static string ProviderName => "TheMovieDb";
+ public static string ProviderName => TmdbUtils.ProviderName;
public bool Supports(BaseItem item)
{
@@ -49,11 +52,11 @@ namespace MediaBrowser.Providers.BoxSets
{
var language = item.GetPreferredMetadataLanguage();
- var mainResult = await MovieDbBoxSetProvider.Current.GetMovieDbResult(tmdbId, null, cancellationToken).ConfigureAwait(false);
+ var mainResult = await TmdbBoxSetProvider.Current.GetMovieDbResult(tmdbId, null, cancellationToken).ConfigureAwait(false);
if (mainResult != null)
{
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
@@ -64,20 +67,20 @@ namespace MediaBrowser.Providers.BoxSets
return new List<RemoteImageInfo>();
}
- private IEnumerable<RemoteImageInfo> GetImages(MovieDbBoxSetProvider.RootObject obj, string language, string baseUrl)
+ private IEnumerable<RemoteImageInfo> GetImages(CollectionResult obj, string language, string baseUrl)
{
var list = new List<RemoteImageInfo>();
- var images = obj.images ?? new MovieDbBoxSetProvider.Images();
+ var images = obj.Images ?? new CollectionImages();
list.AddRange(GetPosters(images).Select(i => new RemoteImageInfo
{
- Url = baseUrl + i.file_path,
- CommunityRating = i.vote_average,
- VoteCount = i.vote_count,
- Width = i.width,
- Height = i.height,
- Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
+ Url = baseUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
+ Language = TmdbMovieProvider.AdjustImageLanguage(i.Iso_639_1, language),
ProviderName = Name,
Type = ImageType.Primary,
RatingType = RatingType.Score
@@ -85,11 +88,11 @@ namespace MediaBrowser.Providers.BoxSets
list.AddRange(GetBackdrops(images).Select(i => new RemoteImageInfo
{
- Url = baseUrl + i.file_path,
- CommunityRating = i.vote_average,
- VoteCount = i.vote_count,
- Width = i.width,
- Height = i.height,
+ Url = baseUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
ProviderName = Name,
Type = ImageType.Backdrop,
RatingType = RatingType.Score
@@ -125,9 +128,9 @@ namespace MediaBrowser.Providers.BoxSets
/// </summary>
/// <param name="images">The images.</param>
/// <returns>IEnumerable{MovieDbProvider.Poster}.</returns>
- private IEnumerable<MovieDbBoxSetProvider.Poster> GetPosters(MovieDbBoxSetProvider.Images images)
+ private IEnumerable<Poster> GetPosters(CollectionImages images)
{
- return images.posters ?? new List<MovieDbBoxSetProvider.Poster>();
+ return images.Posters ?? new List<Poster>();
}
/// <summary>
@@ -135,13 +138,13 @@ namespace MediaBrowser.Providers.BoxSets
/// </summary>
/// <param name="images">The images.</param>
/// <returns>IEnumerable{MovieDbProvider.Backdrop}.</returns>
- private IEnumerable<MovieDbBoxSetProvider.Backdrop> GetBackdrops(MovieDbBoxSetProvider.Images images)
+ private IEnumerable<Backdrop> GetBackdrops(CollectionImages images)
{
- var eligibleBackdrops = images.backdrops == null ? new List<MovieDbBoxSetProvider.Backdrop>() :
- images.backdrops;
+ var eligibleBackdrops = images.Backdrops == null ? new List<Backdrop>() :
+ images.Backdrops;
- return eligibleBackdrops.OrderByDescending(i => i.vote_average)
- .ThenByDescending(i => i.vote_count);
+ return eligibleBackdrops.OrderByDescending(i => i.Vote_Average)
+ .ThenByDescending(i => i.Vote_Count);
}
public int Order => 0;
diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs b/MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetProvider.cs
index 4e41694c4..a215177a9 100644
--- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetProvider.cs
@@ -16,16 +16,18 @@ using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
-using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.Collections;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Movies;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.BoxSets
+namespace MediaBrowser.Providers.Tmdb.BoxSets
{
- public class MovieDbBoxSetProvider : IRemoteMetadataProvider<BoxSet, BoxSetInfo>
+ public class TmdbBoxSetProvider : IRemoteMetadataProvider<BoxSet, BoxSetInfo>
{
- private const string GetCollectionInfo3 = MovieDbProvider.BaseMovieDbUrl + @"3/collection/{0}?api_key={1}&append_to_response=images";
+ private const string GetCollectionInfo3 = TmdbUtils.BaseTmdbApiUrl + @"3/collection/{0}?api_key={1}&append_to_response=images";
- internal static MovieDbBoxSetProvider Current;
+ internal static TmdbBoxSetProvider Current;
private readonly ILogger _logger;
private readonly IJsonSerializer _json;
@@ -35,7 +37,7 @@ namespace MediaBrowser.Providers.BoxSets
private readonly IHttpClient _httpClient;
private readonly ILibraryManager _libraryManager;
- public MovieDbBoxSetProvider(ILogger logger, IJsonSerializer json, IServerConfigurationManager config, IFileSystem fileSystem, ILocalizationManager localization, IHttpClient httpClient, ILibraryManager libraryManager)
+ public TmdbBoxSetProvider(ILogger logger, IJsonSerializer json, IServerConfigurationManager config, IFileSystem fileSystem, ILocalizationManager localization, IHttpClient httpClient, ILibraryManager libraryManager)
{
_logger = logger;
_json = json;
@@ -58,29 +60,29 @@ namespace MediaBrowser.Providers.BoxSets
await EnsureInfo(tmdbId, searchInfo.MetadataLanguage, cancellationToken).ConfigureAwait(false);
var dataFilePath = GetDataFilePath(_config.ApplicationPaths, tmdbId, searchInfo.MetadataLanguage);
- var info = _json.DeserializeFromFile<RootObject>(dataFilePath);
+ var info = _json.DeserializeFromFile<CollectionResult>(dataFilePath);
- var images = (info.images ?? new Images()).posters ?? new List<Poster>();
+ var images = (info.Images ?? new CollectionImages()).Posters ?? new List<Poster>();
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
var result = new RemoteSearchResult
{
- Name = info.name,
+ Name = info.Name,
SearchProviderName = Name,
- ImageUrl = images.Count == 0 ? null : (tmdbImageUrl + images[0].file_path)
+ ImageUrl = images.Count == 0 ? null : (tmdbImageUrl + images[0].File_Path)
};
- result.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture));
+ result.SetProviderId(MetadataProviders.Tmdb, info.Id.ToString(_usCulture));
return new[] { result };
}
- return await new MovieDbSearch(_logger, _json, _libraryManager).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
+ return await new TmdbSearch(_logger, _json, _libraryManager).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
}
public async Task<MetadataResult<BoxSet>> GetMetadata(BoxSetInfo id, CancellationToken cancellationToken)
@@ -90,7 +92,7 @@ namespace MediaBrowser.Providers.BoxSets
// We don't already have an Id, need to fetch it
if (string.IsNullOrEmpty(tmdbId))
{
- var searchResults = await new MovieDbSearch(_logger, _json, _libraryManager).GetSearchResults(id, cancellationToken).ConfigureAwait(false);
+ var searchResults = await new TmdbSearch(_logger, _json, _libraryManager).GetSearchResults(id, cancellationToken).ConfigureAwait(false);
var searchResult = searchResults.FirstOrDefault();
@@ -116,7 +118,7 @@ namespace MediaBrowser.Providers.BoxSets
return result;
}
- internal async Task<RootObject> GetMovieDbResult(string tmdbId, string language, CancellationToken cancellationToken)
+ internal async Task<CollectionResult> GetMovieDbResult(string tmdbId, string language, CancellationToken cancellationToken)
{
if (string.IsNullOrEmpty(tmdbId))
{
@@ -129,21 +131,21 @@ namespace MediaBrowser.Providers.BoxSets
if (!string.IsNullOrEmpty(dataFilePath))
{
- return _json.DeserializeFromFile<RootObject>(dataFilePath);
+ return _json.DeserializeFromFile<CollectionResult>(dataFilePath);
}
return null;
}
- private BoxSet GetItem(RootObject obj)
+ private BoxSet GetItem(CollectionResult obj)
{
var item = new BoxSet
{
- Name = obj.name,
- Overview = obj.overview
+ Name = obj.Name,
+ Overview = obj.Overview
};
- item.SetProviderId(MetadataProviders.Tmdb, obj.id.ToString(_usCulture));
+ item.SetProviderId(MetadataProviders.Tmdb, obj.Id.ToString(_usCulture));
return item;
}
@@ -161,61 +163,61 @@ namespace MediaBrowser.Providers.BoxSets
_json.SerializeToFile(mainResult, dataFilePath);
}
- private async Task<RootObject> FetchMainResult(string id, string language, CancellationToken cancellationToken)
+ private async Task<CollectionResult> FetchMainResult(string id, string language, CancellationToken cancellationToken)
{
- var url = string.Format(GetCollectionInfo3, id, MovieDbProvider.ApiKey);
+ var url = string.Format(GetCollectionInfo3, id, TmdbUtils.ApiKey);
if (!string.IsNullOrEmpty(language))
{
- url += string.Format("&language={0}", MovieDbProvider.NormalizeLanguage(language));
+ url += string.Format("&language={0}", TmdbMovieProvider.NormalizeLanguage(language));
// Get images in english and with no language
- url += "&include_image_language=" + MovieDbProvider.GetImageLanguagesParam(language);
+ url += "&include_image_language=" + TmdbMovieProvider.GetImageLanguagesParam(language);
}
cancellationToken.ThrowIfCancellationRequested();
- RootObject mainResult = null;
+ CollectionResult mainResult;
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbSearch.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- mainResult = await _json.DeserializeFromStreamAsync<RootObject>(json).ConfigureAwait(false);
+ mainResult = await _json.DeserializeFromStreamAsync<CollectionResult>(json).ConfigureAwait(false);
}
}
cancellationToken.ThrowIfCancellationRequested();
- if (mainResult != null && string.IsNullOrEmpty(mainResult.name))
+ if (mainResult != null && string.IsNullOrEmpty(mainResult.Name))
{
if (!string.IsNullOrEmpty(language) && !string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
{
- url = string.Format(GetCollectionInfo3, id, MovieDbSearch.ApiKey) + "&language=en";
+ url = string.Format(GetCollectionInfo3, id, TmdbUtils.ApiKey) + "&language=en";
if (!string.IsNullOrEmpty(language))
{
// Get images in english and with no language
- url += "&include_image_language=" + MovieDbProvider.GetImageLanguagesParam(language);
+ url += "&include_image_language=" + TmdbMovieProvider.GetImageLanguagesParam(language);
}
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbSearch.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- mainResult = await _json.DeserializeFromStreamAsync<RootObject>(json).ConfigureAwait(false);
+ mainResult = await _json.DeserializeFromStreamAsync<CollectionResult>(json).ConfigureAwait(false);
}
}
}
@@ -241,7 +243,7 @@ namespace MediaBrowser.Providers.BoxSets
return DownloadInfo(tmdbId, preferredMetadataLanguage, cancellationToken);
}
- public string Name => "TheMovieDb";
+ public string Name => TmdbUtils.ProviderName;
private static string GetDataFilePath(IApplicationPaths appPaths, string tmdbId, string preferredLanguage)
{
@@ -266,54 +268,6 @@ namespace MediaBrowser.Providers.BoxSets
return dataPath;
}
- internal class Part
- {
- public string title { get; set; }
- public int id { get; set; }
- public string release_date { get; set; }
- public string poster_path { get; set; }
- public string backdrop_path { get; set; }
- }
-
- internal class Backdrop
- {
- public double aspect_ratio { get; set; }
- public string file_path { get; set; }
- public int height { get; set; }
- public string iso_639_1 { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public int width { get; set; }
- }
-
- internal class Poster
- {
- public double aspect_ratio { get; set; }
- public string file_path { get; set; }
- public int height { get; set; }
- public string iso_639_1 { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public int width { get; set; }
- }
-
- internal class Images
- {
- public List<Backdrop> backdrops { get; set; }
- public List<Poster> posters { get; set; }
- }
-
- internal class RootObject
- {
- public int id { get; set; }
- public string name { get; set; }
- public string overview { get; set; }
- public string poster_path { get; set; }
- public string backdrop_path { get; set; }
- public List<Part> parts { get; set; }
- public Images images { get; set; }
- }
-
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
{
return _httpClient.GetResponse(new HttpRequestOptions
diff --git a/MediaBrowser.Providers/Tmdb/Models/Collections/CollectionImages.cs b/MediaBrowser.Providers/Tmdb/Models/Collections/CollectionImages.cs
new file mode 100644
index 000000000..18f26c397
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Collections/CollectionImages.cs
@@ -0,0 +1,11 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Collections
+{
+ public class CollectionImages
+ {
+ public List<Backdrop> Backdrops { get; set; }
+ public List<Poster> Posters { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Collections/CollectionResult.cs b/MediaBrowser.Providers/Tmdb/Models/Collections/CollectionResult.cs
new file mode 100644
index 000000000..53d2599f8
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Collections/CollectionResult.cs
@@ -0,0 +1,15 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Collections
+{
+ public class CollectionResult
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Overview { get; set; }
+ public string Poster_Path { get; set; }
+ public string Backdrop_Path { get; set; }
+ public List<Part> Parts { get; set; }
+ public CollectionImages Images { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Collections/Part.cs b/MediaBrowser.Providers/Tmdb/Models/Collections/Part.cs
new file mode 100644
index 000000000..ff19291c7
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Collections/Part.cs
@@ -0,0 +1,11 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Collections
+{
+ public class Part
+ {
+ public string Title { get; set; }
+ public int Id { get; set; }
+ public string Release_Date { get; set; }
+ public string Poster_Path { get; set; }
+ public string Backdrop_Path { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Backdrop.cs b/MediaBrowser.Providers/Tmdb/Models/General/Backdrop.cs
new file mode 100644
index 000000000..db4cd6681
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Backdrop.cs
@@ -0,0 +1,13 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Backdrop
+ {
+ public double Aspect_Ratio { get; set; }
+ public string File_Path { get; set; }
+ public int Height { get; set; }
+ public string Iso_639_1 { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ public int Width { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Crew.cs b/MediaBrowser.Providers/Tmdb/Models/General/Crew.cs
new file mode 100644
index 000000000..47b985403
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Crew.cs
@@ -0,0 +1,12 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Crew
+ {
+ public int Id { get; set; }
+ public string Credit_Id { get; set; }
+ public string Name { get; set; }
+ public string Department { get; set; }
+ public string Job { get; set; }
+ public string Profile_Path { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/ExternalIds.cs b/MediaBrowser.Providers/Tmdb/Models/General/ExternalIds.cs
new file mode 100644
index 000000000..37e37b0be
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/ExternalIds.cs
@@ -0,0 +1,11 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class ExternalIds
+ {
+ public string Imdb_Id { get; set; }
+ public object Freebase_Id { get; set; }
+ public string Freebase_Mid { get; set; }
+ public int Tvdb_Id { get; set; }
+ public int Tvrage_Id { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Genre.cs b/MediaBrowser.Providers/Tmdb/Models/General/Genre.cs
new file mode 100644
index 000000000..9a6686d50
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Genre.cs
@@ -0,0 +1,8 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Genre
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Images.cs b/MediaBrowser.Providers/Tmdb/Models/General/Images.cs
new file mode 100644
index 000000000..f1c99537d
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Images.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Images
+ {
+ public List<Backdrop> Backdrops { get; set; }
+ public List<Poster> Posters { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Keyword.cs b/MediaBrowser.Providers/Tmdb/Models/General/Keyword.cs
new file mode 100644
index 000000000..4e3011349
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Keyword.cs
@@ -0,0 +1,8 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Keyword
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Keywords.cs b/MediaBrowser.Providers/Tmdb/Models/General/Keywords.cs
new file mode 100644
index 000000000..1950a51b3
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Keywords.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Keywords
+ {
+ public List<Keyword> Results { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Poster.cs b/MediaBrowser.Providers/Tmdb/Models/General/Poster.cs
new file mode 100644
index 000000000..33401b15d
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Poster.cs
@@ -0,0 +1,13 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Poster
+ {
+ public double Aspect_Ratio { get; set; }
+ public string File_Path { get; set; }
+ public int Height { get; set; }
+ public string Iso_639_1 { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ public int Width { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Profile.cs b/MediaBrowser.Providers/Tmdb/Models/General/Profile.cs
new file mode 100644
index 000000000..73a049c73
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Profile.cs
@@ -0,0 +1,11 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Profile
+ {
+ public string File_Path { get; set; }
+ public int Width { get; set; }
+ public int Height { get; set; }
+ public object Iso_639_1 { get; set; }
+ public double Aspect_Ratio { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Still.cs b/MediaBrowser.Providers/Tmdb/Models/General/Still.cs
new file mode 100644
index 000000000..15ff4a099
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Still.cs
@@ -0,0 +1,14 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Still
+ {
+ public double Aspect_Ratio { get; set; }
+ public string File_Path { get; set; }
+ public int Height { get; set; }
+ public string Id { get; set; }
+ public string Iso_639_1 { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ public int Width { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/StillImages.cs b/MediaBrowser.Providers/Tmdb/Models/General/StillImages.cs
new file mode 100644
index 000000000..266965c47
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/StillImages.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class StillImages
+ {
+ public List<Still> Stills { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Video.cs b/MediaBrowser.Providers/Tmdb/Models/General/Video.cs
new file mode 100644
index 000000000..fb69e7767
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Video.cs
@@ -0,0 +1,14 @@
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Video
+ {
+ public string Id { get; set; }
+ public string Iso_639_1 { get; set; }
+ public string Iso_3166_1 { get; set; }
+ public string Key { get; set; }
+ public string Name { get; set; }
+ public string Site { get; set; }
+ public string Size { get; set; }
+ public string Type { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/General/Videos.cs b/MediaBrowser.Providers/Tmdb/Models/General/Videos.cs
new file mode 100644
index 000000000..26812780d
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/General/Videos.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.General
+{
+ public class Videos
+ {
+ public List<Video> Results { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/BelongsToCollection.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/BelongsToCollection.cs
new file mode 100644
index 000000000..ac673df61
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/BelongsToCollection.cs
@@ -0,0 +1,10 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class BelongsToCollection
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Poster_Path { get; set; }
+ public string Backdrop_Path { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/Cast.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/Cast.cs
new file mode 100644
index 000000000..44af9e568
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/Cast.cs
@@ -0,0 +1,12 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class Cast
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Character { get; set; }
+ public int Order { get; set; }
+ public int Cast_Id { get; set; }
+ public string Profile_Path { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/Casts.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/Casts.cs
new file mode 100644
index 000000000..7b5094fa3
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/Casts.cs
@@ -0,0 +1,11 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class Casts
+ {
+ public List<Cast> Cast { get; set; }
+ public List<Crew> Crew { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/Country.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/Country.cs
new file mode 100644
index 000000000..6f843addd
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/Country.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class Country
+ {
+ public string Iso_3166_1 { get; set; }
+ public string Certification { get; set; }
+ public DateTime Release_Date { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/MovieResult.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/MovieResult.cs
new file mode 100644
index 000000000..1b262946f
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/MovieResult.cs
@@ -0,0 +1,49 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class MovieResult
+ {
+ public bool Adult { get; set; }
+ public string Backdrop_Path { get; set; }
+ public BelongsToCollection Belongs_To_Collection { get; set; }
+ public int Budget { get; set; }
+ public List<Genre> Genres { get; set; }
+ public string Homepage { get; set; }
+ public int Id { get; set; }
+ public string Imdb_Id { get; set; }
+ public string Original_Title { get; set; }
+ public string Original_Name { get; set; }
+ public string Overview { get; set; }
+ public double Popularity { get; set; }
+ public string Poster_Path { get; set; }
+ public List<ProductionCompany> Production_Companies { get; set; }
+ public List<ProductionCountry> Production_Countries { get; set; }
+ public string Release_Date { get; set; }
+ public int Revenue { get; set; }
+ public int Runtime { get; set; }
+ public List<SpokenLanguage> Spoken_Languages { get; set; }
+ public string Status { get; set; }
+ public string Tagline { get; set; }
+ public string Title { get; set; }
+ public string Name { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ public Casts Casts { get; set; }
+ public Releases Releases { get; set; }
+ public Images Images { get; set; }
+ public Keywords Keywords { get; set; }
+ public Trailers Trailers { get; set; }
+
+ public string GetOriginalTitle()
+ {
+ return Original_Name ?? Original_Title;
+ }
+
+ public string GetTitle()
+ {
+ return Name ?? Title ?? GetOriginalTitle();
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCompany.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCompany.cs
new file mode 100644
index 000000000..c3382f305
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCompany.cs
@@ -0,0 +1,8 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class ProductionCompany
+ {
+ public string Name { get; set; }
+ public int Id { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCountry.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCountry.cs
new file mode 100644
index 000000000..78112c915
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/ProductionCountry.cs
@@ -0,0 +1,8 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class ProductionCountry
+ {
+ public string Iso_3166_1 { get; set; }
+ public string Name { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/Releases.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/Releases.cs
new file mode 100644
index 000000000..c44f31e46
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/Releases.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class Releases
+ {
+ public List<Country> Countries { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/SpokenLanguage.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/SpokenLanguage.cs
new file mode 100644
index 000000000..4bc5cfa48
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/SpokenLanguage.cs
@@ -0,0 +1,8 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class SpokenLanguage
+ {
+ public string Iso_639_1 { get; set; }
+ public string Name { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/Trailers.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/Trailers.cs
new file mode 100644
index 000000000..4bfa02f06
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/Trailers.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class Trailers
+ {
+ public List<Youtube> Youtube { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Movies/Youtube.cs b/MediaBrowser.Providers/Tmdb/Models/Movies/Youtube.cs
new file mode 100644
index 000000000..069572824
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Movies/Youtube.cs
@@ -0,0 +1,9 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Movies
+{
+ public class Youtube
+ {
+ public string Name { get; set; }
+ public string Size { get; set; }
+ public string Source { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/People/PersonImages.cs b/MediaBrowser.Providers/Tmdb/Models/People/PersonImages.cs
new file mode 100644
index 000000000..113f410b2
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/People/PersonImages.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.People
+{
+ public class PersonImages
+ {
+ public List<Profile> Profiles { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/People/PersonResult.cs b/MediaBrowser.Providers/Tmdb/Models/People/PersonResult.cs
new file mode 100644
index 000000000..6e997050f
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/People/PersonResult.cs
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.People
+{
+ public class PersonResult
+ {
+ public bool Adult { get; set; }
+ public List<string> Also_Known_As { get; set; }
+ public string Biography { get; set; }
+ public string Birthday { get; set; }
+ public string Deathday { get; set; }
+ public string Homepage { get; set; }
+ public int Id { get; set; }
+ public string Imdb_Id { get; set; }
+ public string Name { get; set; }
+ public string Place_Of_Birth { get; set; }
+ public double Popularity { get; set; }
+ public string Profile_Path { get; set; }
+ public PersonImages Images { get; set; }
+ public ExternalIds External_Ids { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Search/ExternalIdLookupResult.cs b/MediaBrowser.Providers/Tmdb/Models/Search/ExternalIdLookupResult.cs
new file mode 100644
index 000000000..6d9fe7081
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Search/ExternalIdLookupResult.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Movies;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Search
+{
+ public class ExternalIdLookupResult
+ {
+ public List<TvResult> Tv_Results { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs b/MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs
new file mode 100644
index 000000000..25a211fa8
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Search/MovieResult.cs
@@ -0,0 +1,65 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Search
+{
+ public class MovieResult
+ {
+ /// <summary>
+ /// Gets or sets a value indicating whether this <see cref="TmdbMovieSearchResult" /> is adult.
+ /// </summary>
+ /// <value><c>true</c> if adult; otherwise, <c>false</c>.</value>
+ public bool Adult { get; set; }
+ /// <summary>
+ /// Gets or sets the backdrop_path.
+ /// </summary>
+ /// <value>The backdrop_path.</value>
+ public string Backdrop_Path { get; set; }
+ /// <summary>
+ /// Gets or sets the id.
+ /// </summary>
+ /// <value>The id.</value>
+ public int Id { get; set; }
+ /// <summary>
+ /// Gets or sets the original_title.
+ /// </summary>
+ /// <value>The original_title.</value>
+ public string Original_Title { get; set; }
+ /// <summary>
+ /// Gets or sets the original_name.
+ /// </summary>
+ /// <value>The original_name.</value>
+ public string Original_Name { get; set; }
+ /// <summary>
+ /// Gets or sets the release_date.
+ /// </summary>
+ /// <value>The release_date.</value>
+ public string Release_Date { get; set; }
+ /// <summary>
+ /// Gets or sets the poster_path.
+ /// </summary>
+ /// <value>The poster_path.</value>
+ public string Poster_Path { get; set; }
+ /// <summary>
+ /// Gets or sets the popularity.
+ /// </summary>
+ /// <value>The popularity.</value>
+ public double Popularity { get; set; }
+ /// <summary>
+ /// Gets or sets the title.
+ /// </summary>
+ /// <value>The title.</value>
+ public string Title { get; set; }
+ /// <summary>
+ /// Gets or sets the vote_average.
+ /// </summary>
+ /// <value>The vote_average.</value>
+ public double Vote_Average { get; set; }
+ /// <summary>
+ /// For collection search results
+ /// </summary>
+ public string Name { get; set; }
+ /// <summary>
+ /// Gets or sets the vote_count.
+ /// </summary>
+ /// <value>The vote_count.</value>
+ public int Vote_Count { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Search/PersonSearchResult.cs b/MediaBrowser.Providers/Tmdb/Models/Search/PersonSearchResult.cs
new file mode 100644
index 000000000..93916068f
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Search/PersonSearchResult.cs
@@ -0,0 +1,29 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Search
+{
+ public class PersonSearchResult
+ {
+ /// <summary>
+ /// Gets or sets a value indicating whether this <see cref="PersonSearchResult" /> is adult.
+ /// </summary>
+ /// <value><c>true</c> if adult; otherwise, <c>false</c>.</value>
+ public bool Adult { get; set; }
+
+ /// <summary>
+ /// Gets or sets the id.
+ /// </summary>
+ /// <value>The id.</value>
+ public int Id { get; set; }
+
+ /// <summary>
+ /// Gets or sets the name.
+ /// </summary>
+ /// <value>The name.</value>
+ public string Name { get; set; }
+
+ /// <summary>
+ /// Gets or sets the profile_ path.
+ /// </summary>
+ /// <value>The profile_ path.</value>
+ public string Profile_Path { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Search/TmdbSearchResult.cs b/MediaBrowser.Providers/Tmdb/Models/Search/TmdbSearchResult.cs
new file mode 100644
index 000000000..a9f888e75
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Search/TmdbSearchResult.cs
@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.Search
+{
+ public class TmdbSearchResult<T>
+ {
+ /// <summary>
+ /// Gets or sets the page.
+ /// </summary>
+ /// <value>The page.</value>
+ public int Page { get; set; }
+
+ /// <summary>
+ /// Gets or sets the results.
+ /// </summary>
+ /// <value>The results.</value>
+ public List<T> Results { get; set; }
+
+ /// <summary>
+ /// Gets or sets the total_pages.
+ /// </summary>
+ /// <value>The total_pages.</value>
+ public int Total_Pages { get; set; }
+
+ /// <summary>
+ /// Gets or sets the total_results.
+ /// </summary>
+ /// <value>The total_results.</value>
+ public int Total_Results { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/Search/TvResult.cs b/MediaBrowser.Providers/Tmdb/Models/Search/TvResult.cs
new file mode 100644
index 000000000..ed140bedd
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/Search/TvResult.cs
@@ -0,0 +1,15 @@
+namespace MediaBrowser.Providers.Tmdb.Models.Search
+{
+ public class TvResult
+ {
+ public string Backdrop_Path { get; set; }
+ public string First_Air_Date { get; set; }
+ public int Id { get; set; }
+ public string Original_Name { get; set; }
+ public string Poster_Path { get; set; }
+ public double Popularity { get; set; }
+ public string Name { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/Cast.cs b/MediaBrowser.Providers/Tmdb/Models/TV/Cast.cs
new file mode 100644
index 000000000..c659df9ac
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/Cast.cs
@@ -0,0 +1,12 @@
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class Cast
+ {
+ public string Character { get; set; }
+ public string Credit_Id { get; set; }
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Profile_Path { get; set; }
+ public int Order { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/ContentRating.cs b/MediaBrowser.Providers/Tmdb/Models/TV/ContentRating.cs
new file mode 100644
index 000000000..3177cd71b
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/ContentRating.cs
@@ -0,0 +1,8 @@
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class ContentRating
+ {
+ public string Iso_3166_1 { get; set; }
+ public string Rating { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/ContentRatings.cs b/MediaBrowser.Providers/Tmdb/Models/TV/ContentRatings.cs
new file mode 100644
index 000000000..883e605c9
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/ContentRatings.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class ContentRatings
+ {
+ public List<ContentRating> Results { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/CreatedBy.cs b/MediaBrowser.Providers/Tmdb/Models/TV/CreatedBy.cs
new file mode 100644
index 000000000..21588d897
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/CreatedBy.cs
@@ -0,0 +1,9 @@
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class CreatedBy
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Profile_Path { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/Credits.cs b/MediaBrowser.Providers/Tmdb/Models/TV/Credits.cs
new file mode 100644
index 000000000..b62b5f605
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/Credits.cs
@@ -0,0 +1,11 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class Credits
+ {
+ public List<Cast> Cast { get; set; }
+ public List<Crew> Crew { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/Episode.cs b/MediaBrowser.Providers/Tmdb/Models/TV/Episode.cs
new file mode 100644
index 000000000..ab11a6cd2
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/Episode.cs
@@ -0,0 +1,14 @@
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class Episode
+ {
+ public string Air_Date { get; set; }
+ public int Episode_Number { get; set; }
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Overview { get; set; }
+ public string Still_Path { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/EpisodeCredits.cs b/MediaBrowser.Providers/Tmdb/Models/TV/EpisodeCredits.cs
new file mode 100644
index 000000000..1c86be0f4
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/EpisodeCredits.cs
@@ -0,0 +1,12 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class EpisodeCredits
+ {
+ public List<Cast> Cast { get; set; }
+ public List<Crew> Crew { get; set; }
+ public List<GuestStar> Guest_Stars { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/EpisodeResult.cs b/MediaBrowser.Providers/Tmdb/Models/TV/EpisodeResult.cs
new file mode 100644
index 000000000..0513ce7e2
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/EpisodeResult.cs
@@ -0,0 +1,23 @@
+using System;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class EpisodeResult
+ {
+ public DateTime Air_Date { get; set; }
+ public int Episode_Number { get; set; }
+ public string Name { get; set; }
+ public string Overview { get; set; }
+ public int Id { get; set; }
+ public object Production_Code { get; set; }
+ public int Season_Number { get; set; }
+ public string Still_Path { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ public StillImages Images { get; set; }
+ public ExternalIds External_Ids { get; set; }
+ public EpisodeCredits Credits { get; set; }
+ public Tmdb.Models.General.Videos Videos { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/GuestStar.cs b/MediaBrowser.Providers/Tmdb/Models/TV/GuestStar.cs
new file mode 100644
index 000000000..2dfe7a862
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/GuestStar.cs
@@ -0,0 +1,12 @@
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class GuestStar
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public string Credit_Id { get; set; }
+ public string Character { get; set; }
+ public int Order { get; set; }
+ public string Profile_Path { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/Network.cs b/MediaBrowser.Providers/Tmdb/Models/TV/Network.cs
new file mode 100644
index 000000000..f982682d1
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/Network.cs
@@ -0,0 +1,8 @@
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class Network
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/Season.cs b/MediaBrowser.Providers/Tmdb/Models/TV/Season.cs
new file mode 100644
index 000000000..976e3c97e
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/Season.cs
@@ -0,0 +1,11 @@
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class Season
+ {
+ public string Air_Date { get; set; }
+ public int Episode_Count { get; set; }
+ public int Id { get; set; }
+ public string Poster_Path { get; set; }
+ public int Season_Number { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/SeasonImages.cs b/MediaBrowser.Providers/Tmdb/Models/TV/SeasonImages.cs
new file mode 100644
index 000000000..9a93dd6ae
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/SeasonImages.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class SeasonImages
+ {
+ public List<Poster> Posters { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/SeasonResult.cs b/MediaBrowser.Providers/Tmdb/Models/TV/SeasonResult.cs
new file mode 100644
index 000000000..bc9213c04
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/SeasonResult.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class SeasonResult
+ {
+ public DateTime Air_Date { get; set; }
+ public List<Episode> Episodes { get; set; }
+ public string Name { get; set; }
+ public string Overview { get; set; }
+ public int Id { get; set; }
+ public string Poster_Path { get; set; }
+ public int Season_Number { get; set; }
+ public Credits Credits { get; set; }
+ public SeasonImages Images { get; set; }
+ public ExternalIds External_Ids { get; set; }
+ public General.Videos Videos { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Tmdb/Models/TV/SeriesResult.cs b/MediaBrowser.Providers/Tmdb/Models/TV/SeriesResult.cs
new file mode 100644
index 000000000..ad95e502e
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Models/TV/SeriesResult.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb.Models.TV
+{
+ public class SeriesResult
+ {
+ public string Backdrop_Path { get; set; }
+ public List<CreatedBy> Created_By { get; set; }
+ public List<int> Episode_Run_Time { get; set; }
+ public DateTime First_Air_Date { get; set; }
+ public List<Genre> Genres { get; set; }
+ public string Homepage { get; set; }
+ public int Id { get; set; }
+ public bool In_Production { get; set; }
+ public List<string> Languages { get; set; }
+ public DateTime Last_Air_Date { get; set; }
+ public string Name { get; set; }
+ public List<Network> Networks { get; set; }
+ public int Number_Of_Episodes { get; set; }
+ public int Number_Of_Seasons { get; set; }
+ public string Original_Name { get; set; }
+ public List<string> Origin_Country { get; set; }
+ public string Overview { get; set; }
+ public string Popularity { get; set; }
+ public string Poster_Path { get; set; }
+ public List<Season> Seasons { get; set; }
+ public string Status { get; set; }
+ public double Vote_Average { get; set; }
+ public int Vote_Count { get; set; }
+ public Credits Credits { get; set; }
+ public Images Images { get; set; }
+ public Keywords Keywords { get; set; }
+ public ExternalIds External_Ids { get; set; }
+ public General.Videos Videos { get; set; }
+ public ContentRatings Content_Ratings { get; set; }
+ public string ResultLanguage { get; set; }
+ }
+}
diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Tmdb/Movies/GenericTmdbMovieInfo.cs
index 4300b84a9..b7b447b68 100644
--- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs
+++ b/MediaBrowser.Providers/Tmdb/Movies/GenericTmdbMovieInfo.cs
@@ -14,11 +14,13 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
+using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.Movies;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.Movies
+namespace MediaBrowser.Providers.Tmdb.Movies
{
- public class GenericMovieDbInfo<T>
+ public class GenericTmdbMovieInfo<T>
where T : BaseItem, new()
{
private readonly ILogger _logger;
@@ -28,7 +30,7 @@ namespace MediaBrowser.Providers.Movies
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
- public GenericMovieDbInfo(ILogger logger, IJsonSerializer jsonSerializer, ILibraryManager libraryManager, IFileSystem fileSystem)
+ public GenericTmdbMovieInfo(ILogger logger, IJsonSerializer jsonSerializer, ILibraryManager libraryManager, IFileSystem fileSystem)
{
_logger = logger;
_jsonSerializer = jsonSerializer;
@@ -44,7 +46,7 @@ namespace MediaBrowser.Providers.Movies
// Don't search for music video id's because it is very easy to misidentify.
if (string.IsNullOrEmpty(tmdbId) && string.IsNullOrEmpty(imdbId) && typeof(T) != typeof(MusicVideo))
{
- var searchResults = await new MovieDbSearch(_logger, _jsonSerializer, _libraryManager).GetMovieSearchResults(itemId, cancellationToken).ConfigureAwait(false);
+ var searchResults = await new TmdbSearch(_logger, _jsonSerializer, _libraryManager).GetMovieSearchResults(itemId, cancellationToken).ConfigureAwait(false);
var searchResult = searchResults.FirstOrDefault();
@@ -81,17 +83,17 @@ namespace MediaBrowser.Providers.Movies
};
string dataFilePath = null;
- MovieDbProvider.CompleteMovieData movieInfo = null;
+ MovieResult movieInfo = null;
// Id could be ImdbId or TmdbId
if (string.IsNullOrEmpty(tmdbId))
{
- movieInfo = await MovieDbProvider.Current.FetchMainResult(imdbId, false, language, cancellationToken).ConfigureAwait(false);
+ movieInfo = await TmdbMovieProvider.Current.FetchMainResult(imdbId, false, language, cancellationToken).ConfigureAwait(false);
if (movieInfo != null)
{
- tmdbId = movieInfo.id.ToString(_usCulture);
+ tmdbId = movieInfo.Id.ToString(_usCulture);
- dataFilePath = MovieDbProvider.Current.GetDataFilePath(tmdbId, language);
+ dataFilePath = TmdbMovieProvider.Current.GetDataFilePath(tmdbId, language);
Directory.CreateDirectory(Path.GetDirectoryName(dataFilePath));
_jsonSerializer.SerializeToFile(movieInfo, dataFilePath);
}
@@ -99,12 +101,12 @@ namespace MediaBrowser.Providers.Movies
if (!string.IsNullOrWhiteSpace(tmdbId))
{
- await MovieDbProvider.Current.EnsureMovieInfo(tmdbId, language, cancellationToken).ConfigureAwait(false);
+ await TmdbMovieProvider.Current.EnsureMovieInfo(tmdbId, language, cancellationToken).ConfigureAwait(false);
- dataFilePath = dataFilePath ?? MovieDbProvider.Current.GetDataFilePath(tmdbId, language);
- movieInfo = movieInfo ?? _jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(dataFilePath);
+ dataFilePath = dataFilePath ?? TmdbMovieProvider.Current.GetDataFilePath(tmdbId, language);
+ movieInfo = movieInfo ?? _jsonSerializer.DeserializeFromFile<MovieResult>(dataFilePath);
- var settings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var settings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
ProcessMainInfo(item, settings, preferredCountryCode, movieInfo);
item.HasMetadata = true;
@@ -120,7 +122,7 @@ namespace MediaBrowser.Providers.Movies
/// <param name="settings">The settings.</param>
/// <param name="preferredCountryCode">The preferred country code.</param>
/// <param name="movieData">The movie data.</param>
- private void ProcessMainInfo(MetadataResult<T> resultItem, TmdbSettingsResult settings, string preferredCountryCode, MovieDbProvider.CompleteMovieData movieData)
+ private void ProcessMainInfo(MetadataResult<T> resultItem, TmdbSettingsResult settings, string preferredCountryCode, MovieResult movieData)
{
var movie = resultItem.Item;
@@ -128,41 +130,39 @@ namespace MediaBrowser.Providers.Movies
movie.OriginalTitle = movieData.GetOriginalTitle();
- movie.Overview = string.IsNullOrWhiteSpace(movieData.overview) ? null : WebUtility.HtmlDecode(movieData.overview);
+ movie.Overview = string.IsNullOrWhiteSpace(movieData.Overview) ? null : WebUtility.HtmlDecode(movieData.Overview);
movie.Overview = movie.Overview != null ? movie.Overview.Replace("\n\n", "\n") : null;
//movie.HomePageUrl = movieData.homepage;
- if (!string.IsNullOrEmpty(movieData.tagline))
+ if (!string.IsNullOrEmpty(movieData.Tagline))
{
- movie.Tagline = movieData.tagline;
+ movie.Tagline = movieData.Tagline;
}
- if (movieData.production_countries != null)
+ if (movieData.Production_Countries != null)
{
movie.ProductionLocations = movieData
- .production_countries
- .Select(i => i.name)
+ .Production_Countries
+ .Select(i => i.Name)
.ToArray();
}
- movie.SetProviderId(MetadataProviders.Tmdb, movieData.id.ToString(_usCulture));
- movie.SetProviderId(MetadataProviders.Imdb, movieData.imdb_id);
+ movie.SetProviderId(MetadataProviders.Tmdb, movieData.Id.ToString(_usCulture));
+ movie.SetProviderId(MetadataProviders.Imdb, movieData.Imdb_Id);
- if (movieData.belongs_to_collection != null)
+ if (movieData.Belongs_To_Collection != null)
{
movie.SetProviderId(MetadataProviders.TmdbCollection,
- movieData.belongs_to_collection.id.ToString(CultureInfo.InvariantCulture));
+ movieData.Belongs_To_Collection.Id.ToString(CultureInfo.InvariantCulture));
- var movieItem = movie as Movie;
-
- if (movieItem != null)
+ if (movie is Movie movieItem)
{
- movieItem.CollectionName = movieData.belongs_to_collection.name;
+ movieItem.CollectionName = movieData.Belongs_To_Collection.Name;
}
}
- string voteAvg = movieData.vote_average.ToString(CultureInfo.InvariantCulture);
+ string voteAvg = movieData.Vote_Average.ToString(CultureInfo.InvariantCulture);
if (float.TryParse(voteAvg, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var rating))
{
@@ -171,17 +171,17 @@ namespace MediaBrowser.Providers.Movies
//movie.VoteCount = movieData.vote_count;
- if (movieData.releases != null && movieData.releases.countries != null)
+ if (movieData.Releases != null && movieData.Releases.Countries != null)
{
- var releases = movieData.releases.countries.Where(i => !string.IsNullOrWhiteSpace(i.certification)).ToList();
+ var releases = movieData.Releases.Countries.Where(i => !string.IsNullOrWhiteSpace(i.Certification)).ToList();
- var ourRelease = releases.FirstOrDefault(c => string.Equals(c.iso_3166_1, preferredCountryCode, StringComparison.OrdinalIgnoreCase));
- var usRelease = releases.FirstOrDefault(c => string.Equals(c.iso_3166_1, "US", StringComparison.OrdinalIgnoreCase));
+ var ourRelease = releases.FirstOrDefault(c => string.Equals(c.Iso_3166_1, preferredCountryCode, StringComparison.OrdinalIgnoreCase));
+ var usRelease = releases.FirstOrDefault(c => string.Equals(c.Iso_3166_1, "US", StringComparison.OrdinalIgnoreCase));
if (ourRelease != null)
{
var ratingPrefix = string.Equals(preferredCountryCode, "us", StringComparison.OrdinalIgnoreCase) ? "" : preferredCountryCode + "-";
- var newRating = ratingPrefix + ourRelease.certification;
+ var newRating = ratingPrefix + ourRelease.Certification;
newRating = newRating.Replace("de-", "FSK-", StringComparison.OrdinalIgnoreCase);
@@ -189,14 +189,14 @@ namespace MediaBrowser.Providers.Movies
}
else if (usRelease != null)
{
- movie.OfficialRating = usRelease.certification;
+ movie.OfficialRating = usRelease.Certification;
}
}
- if (!string.IsNullOrWhiteSpace(movieData.release_date))
+ if (!string.IsNullOrWhiteSpace(movieData.Release_Date))
{
// These dates are always in this exact format
- if (DateTime.TryParse(movieData.release_date, _usCulture, DateTimeStyles.None, out var r))
+ if (DateTime.TryParse(movieData.Release_Date, _usCulture, DateTimeStyles.None, out var r))
{
movie.PremiereDate = r.ToUniversalTime();
movie.ProductionYear = movie.PremiereDate.Value.Year;
@@ -204,16 +204,16 @@ namespace MediaBrowser.Providers.Movies
}
//studios
- if (movieData.production_companies != null)
+ if (movieData.Production_Companies != null)
{
- movie.SetStudios(movieData.production_companies.Select(c => c.name));
+ movie.SetStudios(movieData.Production_Companies.Select(c => c.Name));
}
// genres
// Movies get this from imdb
- var genres = movieData.genres ?? new List<MovieDbProvider.GenreItem>();
+ var genres = movieData.Genres ?? new List<Tmdb.Models.General.Genre>();
- foreach (var genre in genres.Select(g => g.name))
+ foreach (var genre in genres.Select(g => g.Name))
{
movie.AddGenre(genre);
}
@@ -223,26 +223,26 @@ namespace MediaBrowser.Providers.Movies
//Actors, Directors, Writers - all in People
//actors come from cast
- if (movieData.casts != null && movieData.casts.cast != null)
+ if (movieData.Casts != null && movieData.Casts.Cast != null)
{
- foreach (var actor in movieData.casts.cast.OrderBy(a => a.order))
+ foreach (var actor in movieData.Casts.Cast.OrderBy(a => a.Order))
{
var personInfo = new PersonInfo
{
- Name = actor.name.Trim(),
- Role = actor.character,
+ Name = actor.Name.Trim(),
+ Role = actor.Character,
Type = PersonType.Actor,
- SortOrder = actor.order
+ SortOrder = actor.Order
};
- if (!string.IsNullOrWhiteSpace(actor.profile_path))
+ if (!string.IsNullOrWhiteSpace(actor.Profile_Path))
{
- personInfo.ImageUrl = tmdbImageUrl + actor.profile_path;
+ personInfo.ImageUrl = tmdbImageUrl + actor.Profile_Path;
}
- if (actor.id > 0)
+ if (actor.Id > 0)
{
- personInfo.SetProviderId(MetadataProviders.Tmdb, actor.id.ToString(CultureInfo.InvariantCulture));
+ personInfo.SetProviderId(MetadataProviders.Tmdb, actor.Id.ToString(CultureInfo.InvariantCulture));
}
resultItem.AddPerson(personInfo);
@@ -250,45 +250,41 @@ namespace MediaBrowser.Providers.Movies
}
//and the rest from crew
- if (movieData.casts != null && movieData.casts.crew != null)
+ if (movieData.Casts?.Crew != null)
{
var keepTypes = new[]
{
PersonType.Director,
- //PersonType.Writer,
- //PersonType.Producer
+ PersonType.Writer,
+ PersonType.Producer
};
- foreach (var person in movieData.casts.crew)
+ foreach (var person in movieData.Casts.Crew)
{
// Normalize this
- var type = person.department;
- if (string.Equals(type, "writing", StringComparison.OrdinalIgnoreCase))
- {
- type = PersonType.Writer;
- }
+ var type = TmdbUtils.MapCrewToPersonType(person);
- if (!keepTypes.Contains(type ?? string.Empty, StringComparer.OrdinalIgnoreCase) &&
- !keepTypes.Contains(person.job ?? string.Empty, StringComparer.OrdinalIgnoreCase))
+ if (!keepTypes.Contains(type, StringComparer.OrdinalIgnoreCase) &&
+ !keepTypes.Contains(person.Job ?? string.Empty, StringComparer.OrdinalIgnoreCase))
{
continue;
}
var personInfo = new PersonInfo
{
- Name = person.name.Trim(),
- Role = person.job,
+ Name = person.Name.Trim(),
+ Role = person.Job,
Type = type
};
- if (!string.IsNullOrWhiteSpace(person.profile_path))
+ if (!string.IsNullOrWhiteSpace(person.Profile_Path))
{
- personInfo.ImageUrl = tmdbImageUrl + person.profile_path;
+ personInfo.ImageUrl = tmdbImageUrl + person.Profile_Path;
}
- if (person.id > 0)
+ if (person.Id > 0)
{
- personInfo.SetProviderId(MetadataProviders.Tmdb, person.id.ToString(CultureInfo.InvariantCulture));
+ personInfo.SetProviderId(MetadataProviders.Tmdb, person.Id.ToString(CultureInfo.InvariantCulture));
}
resultItem.AddPerson(personInfo);
@@ -300,12 +296,12 @@ namespace MediaBrowser.Providers.Movies
// movie.Keywords = movieData.keywords.keywords.Select(i => i.name).ToList();
//}
- if (movieData.trailers != null && movieData.trailers.youtube != null)
+ if (movieData.Trailers != null && movieData.Trailers.Youtube != null)
{
- movie.RemoteTrailers = movieData.trailers.youtube.Select(i => new MediaUrl
+ movie.RemoteTrailers = movieData.Trailers.Youtube.Select(i => new MediaUrl
{
- Url = string.Format("https://www.youtube.com/watch?v={0}", i.source),
- Name = i.name
+ Url = string.Format("https://www.youtube.com/watch?v={0}", i.Source),
+ Name = i.Name
}).ToArray();
}
diff --git a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs b/MediaBrowser.Providers/Tmdb/Movies/TmdbImageProvider.cs
index 20b53d58a..cdb96e6ac 100644
--- a/MediaBrowser.Providers/Movies/MovieDbImageProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/Movies/TmdbImageProvider.cs
@@ -13,16 +13,19 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
+using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Models.Movies;
-namespace MediaBrowser.Providers.Movies
+namespace MediaBrowser.Providers.Tmdb.Movies
{
- public class MovieDbImageProvider : IRemoteImageProvider, IHasOrder
+ public class TmdbImageProvider : IRemoteImageProvider, IHasOrder
{
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
private readonly IFileSystem _fileSystem;
- public MovieDbImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem)
+ public TmdbImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem)
{
_jsonSerializer = jsonSerializer;
_httpClient = httpClient;
@@ -31,7 +34,7 @@ namespace MediaBrowser.Providers.Movies
public string Name => ProviderName;
- public static string ProviderName => "TheMovieDb";
+ public static string ProviderName => TmdbUtils.ProviderName;
public bool Supports(BaseItem item)
{
@@ -60,7 +63,7 @@ namespace MediaBrowser.Providers.Movies
return list;
}
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
@@ -70,12 +73,12 @@ namespace MediaBrowser.Providers.Movies
{
list.AddRange(GetPosters(results).Select(i => new RemoteImageInfo
{
- Url = tmdbImageUrl + i.file_path,
- CommunityRating = i.vote_average,
- VoteCount = i.vote_count,
- Width = i.width,
- Height = i.height,
- Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
+ Url = tmdbImageUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
+ Language = TmdbMovieProvider.AdjustImageLanguage(i.Iso_639_1, language),
ProviderName = Name,
Type = ImageType.Primary,
RatingType = RatingType.Score
@@ -86,11 +89,11 @@ namespace MediaBrowser.Providers.Movies
{
list.AddRange(GetBackdrops(results).Select(i => new RemoteImageInfo
{
- Url = tmdbImageUrl + i.file_path,
- CommunityRating = i.vote_average,
- VoteCount = i.vote_count,
- Width = i.width,
- Height = i.height,
+ Url = tmdbImageUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
ProviderName = Name,
Type = ImageType.Backdrop,
RatingType = RatingType.Score
@@ -127,9 +130,9 @@ namespace MediaBrowser.Providers.Movies
/// </summary>
/// <param name="images">The images.</param>
/// <returns>IEnumerable{MovieDbProvider.Poster}.</returns>
- private IEnumerable<MovieDbProvider.Poster> GetPosters(MovieDbProvider.Images images)
+ private IEnumerable<Poster> GetPosters(Images images)
{
- return images.posters ?? new List<MovieDbProvider.Poster>();
+ return images.Posters ?? new List<Poster>();
}
/// <summary>
@@ -137,13 +140,13 @@ namespace MediaBrowser.Providers.Movies
/// </summary>
/// <param name="images">The images.</param>
/// <returns>IEnumerable{MovieDbProvider.Backdrop}.</returns>
- private IEnumerable<MovieDbProvider.Backdrop> GetBackdrops(MovieDbProvider.Images images)
+ private IEnumerable<Backdrop> GetBackdrops(Images images)
{
- var eligibleBackdrops = images.backdrops == null ? new List<MovieDbProvider.Backdrop>() :
- images.backdrops;
+ var eligibleBackdrops = images.Backdrops == null ? new List<Backdrop>() :
+ images.Backdrops;
- return eligibleBackdrops.OrderByDescending(i => i.vote_average)
- .ThenByDescending(i => i.vote_count);
+ return eligibleBackdrops.OrderByDescending(i => i.Vote_Average)
+ .ThenByDescending(i => i.Vote_Count);
}
/// <summary>
@@ -154,7 +157,7 @@ namespace MediaBrowser.Providers.Movies
/// <param name="jsonSerializer">The json serializer.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{MovieImages}.</returns>
- private async Task<MovieDbProvider.Images> FetchImages(BaseItem item, string language, IJsonSerializer jsonSerializer, CancellationToken cancellationToken)
+ private async Task<Images> FetchImages(BaseItem item, string language, IJsonSerializer jsonSerializer, CancellationToken cancellationToken)
{
var tmdbId = item.GetProviderId(MetadataProviders.Tmdb);
@@ -163,10 +166,10 @@ namespace MediaBrowser.Providers.Movies
var imdbId = item.GetProviderId(MetadataProviders.Imdb);
if (!string.IsNullOrWhiteSpace(imdbId))
{
- var movieInfo = await MovieDbProvider.Current.FetchMainResult(imdbId, false, language, cancellationToken).ConfigureAwait(false);
+ var movieInfo = await TmdbMovieProvider.Current.FetchMainResult(imdbId, false, language, cancellationToken).ConfigureAwait(false);
if (movieInfo != null)
{
- tmdbId = movieInfo.id.ToString(CultureInfo.InvariantCulture);
+ tmdbId = movieInfo.Id.ToString(CultureInfo.InvariantCulture);
}
}
}
@@ -176,9 +179,9 @@ namespace MediaBrowser.Providers.Movies
return null;
}
- await MovieDbProvider.Current.EnsureMovieInfo(tmdbId, language, cancellationToken).ConfigureAwait(false);
+ await TmdbMovieProvider.Current.EnsureMovieInfo(tmdbId, language, cancellationToken).ConfigureAwait(false);
- var path = MovieDbProvider.Current.GetDataFilePath(tmdbId, language);
+ var path = TmdbMovieProvider.Current.GetDataFilePath(tmdbId, language);
if (!string.IsNullOrEmpty(path))
{
@@ -186,7 +189,7 @@ namespace MediaBrowser.Providers.Movies
if (fileInfo.Exists)
{
- return jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(path).images;
+ return jsonSerializer.DeserializeFromFile<MovieResult>(path).Images;
}
}
diff --git a/MediaBrowser.Providers/Tmdb/Movies/TmdbMovieExternalId.cs b/MediaBrowser.Providers/Tmdb/Movies/TmdbMovieExternalId.cs
new file mode 100644
index 000000000..fc7a4583f
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/Movies/TmdbMovieExternalId.cs
@@ -0,0 +1,32 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+
+namespace MediaBrowser.Providers.Tmdb.Movies
+{
+ public class TmdbMovieExternalId : IExternalId
+ {
+ /// <inheritdoc />
+ public string Name => TmdbUtils.ProviderName;
+
+ /// <inheritdoc />
+ public string Key => MetadataProviders.Tmdb.ToString();
+
+ /// <inheritdoc />
+ public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "movie/{0}";
+
+ /// <inheritdoc />
+ public bool Supports(IHasProviderIds item)
+ {
+ // Supports images for tv movies
+ if (item is LiveTvProgram tvProgram && tvProgram.IsMovie)
+ {
+ return true;
+ }
+
+ return item is Movie || item is MusicVideo || item is Trailer;
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Tmdb/Movies/TmdbMovieProvider.cs
index 3ff63a4bf..a1bea5847 100644
--- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/Movies/TmdbMovieProvider.cs
@@ -19,16 +19,18 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
+using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.Movies;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.Movies
+namespace MediaBrowser.Providers.Tmdb.Movies
{
/// <summary>
/// Class MovieDbProvider
/// </summary>
- public class MovieDbProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IHasOrder
+ public class TmdbMovieProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IHasOrder
{
- internal static MovieDbProvider Current { get; private set; }
+ internal static TmdbMovieProvider Current { get; private set; }
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
@@ -41,7 +43,7 @@ namespace MediaBrowser.Providers.Movies
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
- public MovieDbProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILogger logger, ILocalizationManager localization, ILibraryManager libraryManager, IApplicationHost appHost)
+ public TmdbMovieProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILogger logger, ILocalizationManager localization, ILibraryManager libraryManager, IApplicationHost appHost)
{
_jsonSerializer = jsonSerializer;
_httpClient = httpClient;
@@ -71,7 +73,7 @@ namespace MediaBrowser.Providers.Movies
var dataFilePath = GetDataFilePath(tmdbId, searchInfo.MetadataLanguage);
- var obj = _jsonSerializer.DeserializeFromFile<CompleteMovieData>(dataFilePath);
+ var obj = _jsonSerializer.DeserializeFromFile<MovieResult>(dataFilePath);
var tmdbSettings = await GetTmdbSettings(cancellationToken).ConfigureAwait(false);
@@ -81,30 +83,30 @@ namespace MediaBrowser.Providers.Movies
{
Name = obj.GetTitle(),
SearchProviderName = Name,
- ImageUrl = string.IsNullOrWhiteSpace(obj.poster_path) ? null : tmdbImageUrl + obj.poster_path
+ ImageUrl = string.IsNullOrWhiteSpace(obj.Poster_Path) ? null : tmdbImageUrl + obj.Poster_Path
};
- if (!string.IsNullOrWhiteSpace(obj.release_date))
+ if (!string.IsNullOrWhiteSpace(obj.Release_Date))
{
// These dates are always in this exact format
- if (DateTime.TryParse(obj.release_date, _usCulture, DateTimeStyles.None, out var r))
+ if (DateTime.TryParse(obj.Release_Date, _usCulture, DateTimeStyles.None, out var r))
{
remoteResult.PremiereDate = r.ToUniversalTime();
remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year;
}
}
- remoteResult.SetProviderId(MetadataProviders.Tmdb, obj.id.ToString(_usCulture));
+ remoteResult.SetProviderId(MetadataProviders.Tmdb, obj.Id.ToString(_usCulture));
- if (!string.IsNullOrWhiteSpace(obj.imdb_id))
+ if (!string.IsNullOrWhiteSpace(obj.Imdb_Id))
{
- remoteResult.SetProviderId(MetadataProviders.Imdb, obj.imdb_id);
+ remoteResult.SetProviderId(MetadataProviders.Imdb, obj.Imdb_Id);
}
return new[] { remoteResult };
}
- return await new MovieDbSearch(_logger, _jsonSerializer, _libraryManager).GetMovieSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
+ return await new TmdbSearch(_logger, _jsonSerializer, _libraryManager).GetMovieSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
}
public Task<MetadataResult<Movie>> GetMetadata(MovieInfo info, CancellationToken cancellationToken)
@@ -115,12 +117,12 @@ namespace MediaBrowser.Providers.Movies
public Task<MetadataResult<T>> GetItemMetadata<T>(ItemLookupInfo id, CancellationToken cancellationToken)
where T : BaseItem, new()
{
- var movieDb = new GenericMovieDbInfo<T>(_logger, _jsonSerializer, _libraryManager, _fileSystem);
+ var movieDb = new GenericTmdbMovieInfo<T>(_logger, _jsonSerializer, _libraryManager, _fileSystem);
return movieDb.GetMetadata(id, cancellationToken);
}
- public string Name => "TheMovieDb";
+ public string Name => TmdbUtils.ProviderName;
/// <summary>
/// The _TMDB settings task
@@ -140,9 +142,9 @@ namespace MediaBrowser.Providers.Movies
using (HttpResponseInfo response = await GetMovieDbResponse(new HttpRequestOptions
{
- Url = string.Format(TmdbConfigUrl, ApiKey),
+ Url = string.Format(TmdbConfigUrl, TmdbUtils.ApiKey),
CancellationToken = cancellationToken,
- AcceptHeader = AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
@@ -155,13 +157,8 @@ namespace MediaBrowser.Providers.Movies
}
}
- public const string BaseMovieDbUrl = "https://api.themoviedb.org/";
-
- private const string TmdbConfigUrl = BaseMovieDbUrl + "3/configuration?api_key={0}";
- private const string GetMovieInfo3 = BaseMovieDbUrl + @"3/movie/{0}?api_key={1}&append_to_response=casts,releases,images,keywords,trailers";
-
- internal static string ApiKey = "4219e299c89411838049ab0dab19ebd5";
- internal static string AcceptHeader = "application/json,image/*";
+ private const string TmdbConfigUrl = TmdbUtils.BaseTmdbApiUrl + "3/configuration?api_key={0}";
+ private const string GetMovieInfo3 = TmdbUtils.BaseTmdbApiUrl + @"3/movie/{0}?api_key={1}&append_to_response=casts,releases,images,keywords,trailers";
/// <summary>
/// Gets the movie data path.
@@ -314,9 +311,9 @@ namespace MediaBrowser.Providers.Movies
/// <param name="language">The language.</param>
/// <param name="cancellationToken">The cancellation token</param>
/// <returns>Task{CompleteMovieData}.</returns>
- internal async Task<CompleteMovieData> FetchMainResult(string id, bool isTmdbId, string language, CancellationToken cancellationToken)
+ internal async Task<MovieResult> FetchMainResult(string id, bool isTmdbId, string language, CancellationToken cancellationToken)
{
- var url = string.Format(GetMovieInfo3, id, ApiKey);
+ var url = string.Format(GetMovieInfo3, id, TmdbUtils.ApiKey);
if (!string.IsNullOrEmpty(language))
{
@@ -326,7 +323,7 @@ namespace MediaBrowser.Providers.Movies
url += "&include_image_language=" + GetImageLanguagesParam(language);
}
- CompleteMovieData mainResult;
+ MovieResult mainResult;
cancellationToken.ThrowIfCancellationRequested();
@@ -340,7 +337,7 @@ namespace MediaBrowser.Providers.Movies
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = AcceptHeader,
+ AcceptHeader = TmdbUtils.AcceptHeader,
CacheMode = cacheMode,
CacheLength = cacheLength
@@ -348,7 +345,7 @@ namespace MediaBrowser.Providers.Movies
{
using (var json = response.Content)
{
- mainResult = await _jsonSerializer.DeserializeFromStreamAsync<CompleteMovieData>(json).ConfigureAwait(false);
+ mainResult = await _jsonSerializer.DeserializeFromStreamAsync<MovieResult>(json).ConfigureAwait(false);
}
}
}
@@ -367,13 +364,13 @@ namespace MediaBrowser.Providers.Movies
// If the language preference isn't english, then have the overview fallback to english if it's blank
if (mainResult != null &&
- string.IsNullOrEmpty(mainResult.overview) &&
+ string.IsNullOrEmpty(mainResult.Overview) &&
!string.IsNullOrEmpty(language) &&
!string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
{
_logger.LogInformation("MovieDbProvider couldn't find meta for language " + language + ". Trying English...");
- url = string.Format(GetMovieInfo3, id, ApiKey) + "&language=en";
+ url = string.Format(GetMovieInfo3, id, TmdbUtils.ApiKey) + "&language=en";
if (!string.IsNullOrEmpty(language))
{
@@ -385,7 +382,7 @@ namespace MediaBrowser.Providers.Movies
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = AcceptHeader,
+ AcceptHeader = TmdbUtils.AcceptHeader,
CacheMode = cacheMode,
CacheLength = cacheLength
@@ -393,9 +390,9 @@ namespace MediaBrowser.Providers.Movies
{
using (var json = response.Content)
{
- var englishResult = await _jsonSerializer.DeserializeFromStreamAsync<CompleteMovieData>(json).ConfigureAwait(false);
+ var englishResult = await _jsonSerializer.DeserializeFromStreamAsync<MovieResult>(json).ConfigureAwait(false);
- mainResult.overview = englishResult.overview;
+ mainResult.Overview = englishResult.Overview;
}
}
}
@@ -429,205 +426,6 @@ namespace MediaBrowser.Providers.Movies
return await _httpClient.SendAsync(options, "GET").ConfigureAwait(false);
}
- /// <summary>
- /// Class TmdbTitle
- /// </summary>
- internal class TmdbTitle
- {
- /// <summary>
- /// Gets or sets the iso_3166_1.
- /// </summary>
- /// <value>The iso_3166_1.</value>
- public string iso_3166_1 { get; set; }
- /// <summary>
- /// Gets or sets the title.
- /// </summary>
- /// <value>The title.</value>
- public string title { get; set; }
- }
-
- /// <summary>
- /// Class TmdbAltTitleResults
- /// </summary>
- internal class TmdbAltTitleResults
- {
- /// <summary>
- /// Gets or sets the id.
- /// </summary>
- /// <value>The id.</value>
- public int id { get; set; }
- /// <summary>
- /// Gets or sets the titles.
- /// </summary>
- /// <value>The titles.</value>
- public List<TmdbTitle> titles { get; set; }
- }
-
- internal class BelongsToCollection
- {
- public int id { get; set; }
- public string name { get; set; }
- public string poster_path { get; set; }
- public string backdrop_path { get; set; }
- }
-
- internal class GenreItem
- {
- public int id { get; set; }
- public string name { get; set; }
- }
-
- internal class ProductionCompany
- {
- public string name { get; set; }
- public int id { get; set; }
- }
-
- internal class ProductionCountry
- {
- public string iso_3166_1 { get; set; }
- public string name { get; set; }
- }
-
- internal class SpokenLanguage
- {
- public string iso_639_1 { get; set; }
- public string name { get; set; }
- }
-
- internal class Cast
- {
- public int id { get; set; }
- public string name { get; set; }
- public string character { get; set; }
- public int order { get; set; }
- public int cast_id { get; set; }
- public string profile_path { get; set; }
- }
-
- internal class Crew
- {
- public int id { get; set; }
- public string name { get; set; }
- public string department { get; set; }
- public string job { get; set; }
- public string profile_path { get; set; }
- }
-
- internal class Casts
- {
- public List<Cast> cast { get; set; }
- public List<Crew> crew { get; set; }
- }
-
- internal class Country
- {
- public string iso_3166_1 { get; set; }
- public string certification { get; set; }
- public DateTime release_date { get; set; }
- }
-
- internal class Releases
- {
- public List<Country> countries { get; set; }
- }
-
- internal class Backdrop
- {
- public string file_path { get; set; }
- public int width { get; set; }
- public int height { get; set; }
- public object iso_639_1 { get; set; }
- public double aspect_ratio { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- }
-
- internal class Poster
- {
- public string file_path { get; set; }
- public int width { get; set; }
- public int height { get; set; }
- public string iso_639_1 { get; set; }
- public double aspect_ratio { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- }
-
- internal class Images
- {
- public List<Backdrop> backdrops { get; set; }
- public List<Poster> posters { get; set; }
- }
-
- internal class Keyword
- {
- public int id { get; set; }
- public string name { get; set; }
- }
-
- internal class Keywords
- {
- public List<Keyword> keywords { get; set; }
- }
-
- internal class Youtube
- {
- public string name { get; set; }
- public string size { get; set; }
- public string source { get; set; }
- }
-
- internal class Trailers
- {
- public List<object> quicktime { get; set; }
- public List<Youtube> youtube { get; set; }
- }
-
- internal class CompleteMovieData
- {
- public bool adult { get; set; }
- public string backdrop_path { get; set; }
- public BelongsToCollection belongs_to_collection { get; set; }
- public int budget { get; set; }
- public List<GenreItem> genres { get; set; }
- public string homepage { get; set; }
- public int id { get; set; }
- public string imdb_id { get; set; }
- public string original_title { get; set; }
- public string original_name { get; set; }
- public string overview { get; set; }
- public double popularity { get; set; }
- public string poster_path { get; set; }
- public List<ProductionCompany> production_companies { get; set; }
- public List<ProductionCountry> production_countries { get; set; }
- public string release_date { get; set; }
- public int revenue { get; set; }
- public int runtime { get; set; }
- public List<SpokenLanguage> spoken_languages { get; set; }
- public string status { get; set; }
- public string tagline { get; set; }
- public string title { get; set; }
- public string name { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public Casts casts { get; set; }
- public Releases releases { get; set; }
- public Images images { get; set; }
- public Keywords keywords { get; set; }
- public Trailers trailers { get; set; }
-
- public string GetOriginalTitle()
- {
- return original_name ?? original_title;
- }
-
- public string GetTitle()
- {
- return name ?? title ?? GetOriginalTitle();
- }
- }
-
public int Order => 1;
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
diff --git a/MediaBrowser.Providers/Movies/MovieDbSearch.cs b/MediaBrowser.Providers/Tmdb/Movies/TmdbSearch.cs
index e466d40a0..223cef086 100644
--- a/MediaBrowser.Providers/Movies/MovieDbSearch.cs
+++ b/MediaBrowser.Providers/Tmdb/Movies/TmdbSearch.cs
@@ -11,23 +11,21 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
+using MediaBrowser.Providers.Tmdb.Models.Search;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.Movies
+namespace MediaBrowser.Providers.Tmdb.Movies
{
- public class MovieDbSearch
+ public class TmdbSearch
{
private static readonly CultureInfo EnUs = new CultureInfo("en-US");
- private const string Search3 = MovieDbProvider.BaseMovieDbUrl + @"3/search/{3}?api_key={1}&query={0}&language={2}";
-
- internal static string ApiKey = "4219e299c89411838049ab0dab19ebd5";
- internal static string AcceptHeader = "application/json,image/*";
+ private const string Search3 = TmdbUtils.BaseTmdbApiUrl + @"3/search/{3}?api_key={1}&query={0}&language={2}";
private readonly ILogger _logger;
private readonly IJsonSerializer _json;
private readonly ILibraryManager _libraryManager;
- public MovieDbSearch(ILogger logger, IJsonSerializer json, ILibraryManager libraryManager)
+ public TmdbSearch(ILogger logger, IJsonSerializer json, ILibraryManager libraryManager)
{
_logger = logger;
_json = json;
@@ -59,7 +57,7 @@ namespace MediaBrowser.Providers.Movies
return new List<RemoteSearchResult>();
}
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
@@ -152,43 +150,43 @@ namespace MediaBrowser.Providers.Movies
throw new ArgumentException("name");
}
- var url3 = string.Format(Search3, WebUtility.UrlEncode(name), ApiKey, language, type);
+ var url3 = string.Format(Search3, WebUtility.UrlEncode(name), TmdbUtils.ApiKey, language, type);
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url3,
CancellationToken = cancellationToken,
- AcceptHeader = AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- var searchResults = await _json.DeserializeFromStreamAsync<TmdbMovieSearchResults>(json).ConfigureAwait(false);
+ var searchResults = await _json.DeserializeFromStreamAsync<TmdbSearchResult<MovieResult>>(json).ConfigureAwait(false);
- var results = searchResults.results ?? new List<TmdbMovieSearchResult>();
+ var results = searchResults.Results ?? new List<MovieResult>();
return results
.Select(i =>
{
var remoteResult = new RemoteSearchResult
{
- SearchProviderName = MovieDbProvider.Current.Name,
- Name = i.title ?? i.name ?? i.original_title,
- ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path
+ SearchProviderName = TmdbMovieProvider.Current.Name,
+ Name = i.Title ?? i.Name ?? i.Original_Title,
+ ImageUrl = string.IsNullOrWhiteSpace(i.Poster_Path) ? null : baseImageUrl + i.Poster_Path
};
- if (!string.IsNullOrWhiteSpace(i.release_date))
+ if (!string.IsNullOrWhiteSpace(i.Release_Date))
{
// These dates are always in this exact format
- if (DateTime.TryParseExact(i.release_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out var r))
+ if (DateTime.TryParseExact(i.Release_Date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out var r))
{
remoteResult.PremiereDate = r.ToUniversalTime();
remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year;
}
}
- remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(EnUs));
+ remoteResult.SetProviderId(MetadataProviders.Tmdb, i.Id.ToString(EnUs));
return remoteResult;
@@ -205,43 +203,43 @@ namespace MediaBrowser.Providers.Movies
throw new ArgumentException("name");
}
- var url3 = string.Format(Search3, WebUtility.UrlEncode(name), ApiKey, language, "tv");
+ var url3 = string.Format(Search3, WebUtility.UrlEncode(name), TmdbUtils.ApiKey, language, "tv");
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url3,
CancellationToken = cancellationToken,
- AcceptHeader = AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- var searchResults = await _json.DeserializeFromStreamAsync<TmdbTvSearchResults>(json).ConfigureAwait(false);
+ var searchResults = await _json.DeserializeFromStreamAsync<TmdbSearchResult<TvResult>>(json).ConfigureAwait(false);
- var results = searchResults.results ?? new List<TvResult>();
+ var results = searchResults.Results ?? new List<TvResult>();
return results
.Select(i =>
{
var remoteResult = new RemoteSearchResult
{
- SearchProviderName = MovieDbProvider.Current.Name,
- Name = i.name ?? i.original_name,
- ImageUrl = string.IsNullOrWhiteSpace(i.poster_path) ? null : baseImageUrl + i.poster_path
+ SearchProviderName = TmdbMovieProvider.Current.Name,
+ Name = i.Name ?? i.Original_Name,
+ ImageUrl = string.IsNullOrWhiteSpace(i.Poster_Path) ? null : baseImageUrl + i.Poster_Path
};
- if (!string.IsNullOrWhiteSpace(i.first_air_date))
+ if (!string.IsNullOrWhiteSpace(i.First_Air_Date))
{
// These dates are always in this exact format
- if (DateTime.TryParseExact(i.first_air_date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out var r))
+ if (DateTime.TryParseExact(i.First_Air_Date, "yyyy-MM-dd", EnUs, DateTimeStyles.None, out var r))
{
remoteResult.PremiereDate = r.ToUniversalTime();
remoteResult.ProductionYear = remoteResult.PremiereDate.Value.Year;
}
}
- remoteResult.SetProviderId(MetadataProviders.Tmdb, i.id.ToString(EnUs));
+ remoteResult.SetProviderId(MetadataProviders.Tmdb, i.Id.ToString(EnUs));
return remoteResult;
@@ -250,145 +248,5 @@ namespace MediaBrowser.Providers.Movies
}
}
}
-
- /// <summary>
- /// Class TmdbMovieSearchResult
- /// </summary>
- public class TmdbMovieSearchResult
- {
- /// <summary>
- /// Gets or sets a value indicating whether this <see cref="TmdbMovieSearchResult" /> is adult.
- /// </summary>
- /// <value><c>true</c> if adult; otherwise, <c>false</c>.</value>
- public bool adult { get; set; }
- /// <summary>
- /// Gets or sets the backdrop_path.
- /// </summary>
- /// <value>The backdrop_path.</value>
- public string backdrop_path { get; set; }
- /// <summary>
- /// Gets or sets the id.
- /// </summary>
- /// <value>The id.</value>
- public int id { get; set; }
- /// <summary>
- /// Gets or sets the original_title.
- /// </summary>
- /// <value>The original_title.</value>
- public string original_title { get; set; }
- /// <summary>
- /// Gets or sets the original_name.
- /// </summary>
- /// <value>The original_name.</value>
- public string original_name { get; set; }
- /// <summary>
- /// Gets or sets the release_date.
- /// </summary>
- /// <value>The release_date.</value>
- public string release_date { get; set; }
- /// <summary>
- /// Gets or sets the poster_path.
- /// </summary>
- /// <value>The poster_path.</value>
- public string poster_path { get; set; }
- /// <summary>
- /// Gets or sets the popularity.
- /// </summary>
- /// <value>The popularity.</value>
- public double popularity { get; set; }
- /// <summary>
- /// Gets or sets the title.
- /// </summary>
- /// <value>The title.</value>
- public string title { get; set; }
- /// <summary>
- /// Gets or sets the vote_average.
- /// </summary>
- /// <value>The vote_average.</value>
- public double vote_average { get; set; }
- /// <summary>
- /// For collection search results
- /// </summary>
- public string name { get; set; }
- /// <summary>
- /// Gets or sets the vote_count.
- /// </summary>
- /// <value>The vote_count.</value>
- public int vote_count { get; set; }
- }
-
- /// <summary>
- /// Class TmdbMovieSearchResults
- /// </summary>
- private class TmdbMovieSearchResults
- {
- /// <summary>
- /// Gets or sets the page.
- /// </summary>
- /// <value>The page.</value>
- public int page { get; set; }
- /// <summary>
- /// Gets or sets the results.
- /// </summary>
- /// <value>The results.</value>
- public List<TmdbMovieSearchResult> results { get; set; }
- /// <summary>
- /// Gets or sets the total_pages.
- /// </summary>
- /// <value>The total_pages.</value>
- public int total_pages { get; set; }
- /// <summary>
- /// Gets or sets the total_results.
- /// </summary>
- /// <value>The total_results.</value>
- public int total_results { get; set; }
- }
-
- public class TvResult
- {
- public string backdrop_path { get; set; }
- public string first_air_date { get; set; }
- public int id { get; set; }
- public string original_name { get; set; }
- public string poster_path { get; set; }
- public double popularity { get; set; }
- public string name { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- }
-
- /// <summary>
- /// Class TmdbTvSearchResults
- /// </summary>
- private class TmdbTvSearchResults
- {
- /// <summary>
- /// Gets or sets the page.
- /// </summary>
- /// <value>The page.</value>
- public int page { get; set; }
- /// <summary>
- /// Gets or sets the results.
- /// </summary>
- /// <value>The results.</value>
- public List<TvResult> results { get; set; }
- /// <summary>
- /// Gets or sets the total_pages.
- /// </summary>
- /// <value>The total_pages.</value>
- public int total_pages { get; set; }
- /// <summary>
- /// Gets or sets the total_results.
- /// </summary>
- /// <value>The total_results.</value>
- public int total_results { get; set; }
- }
-
- public class ExternalIdLookupResult
- {
- public List<object> movie_results { get; set; }
- public List<object> person_results { get; set; }
- public List<TvResult> tv_results { get; set; }
- }
}
}
diff --git a/MediaBrowser.Providers/Movies/TmdbSettings.cs b/MediaBrowser.Providers/Tmdb/Movies/TmdbSettings.cs
index 119bbfca6..dca406b99 100644
--- a/MediaBrowser.Providers/Movies/TmdbSettings.cs
+++ b/MediaBrowser.Providers/Tmdb/Movies/TmdbSettings.cs
@@ -1,6 +1,6 @@
using System.Collections.Generic;
-namespace MediaBrowser.Providers.Movies
+namespace MediaBrowser.Providers.Tmdb.Movies
{
internal class TmdbImageSettings
{
diff --git a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs b/MediaBrowser.Providers/Tmdb/Music/TmdbMusicVideoProvider.cs
index 506cbfb89..f3f8a92cf 100644
--- a/MediaBrowser.Providers/Music/MovieDbMusicVideoProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/Music/TmdbMusicVideoProvider.cs
@@ -7,14 +7,15 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Providers;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Movies;
-namespace MediaBrowser.Providers.Music
+namespace MediaBrowser.Providers.Tmdb.Music
{
- public class MovieDbMusicVideoProvider : IRemoteMetadataProvider<MusicVideo, MusicVideoInfo>
+ public class TmdbMusicVideoProvider : IRemoteMetadataProvider<MusicVideo, MusicVideoInfo>
{
public Task<MetadataResult<MusicVideo>> GetMetadata(MusicVideoInfo info, CancellationToken cancellationToken)
{
- return MovieDbProvider.Current.GetItemMetadata<MusicVideo>(info, cancellationToken);
+ return TmdbMovieProvider.Current.GetItemMetadata<MusicVideo>(info, cancellationToken);
}
public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(MusicVideoInfo searchInfo, CancellationToken cancellationToken)
@@ -22,7 +23,7 @@ namespace MediaBrowser.Providers.Music
return Task.FromResult((IEnumerable<RemoteSearchResult>)new List<RemoteSearchResult>());
}
- public string Name => MovieDbProvider.Current.Name;
+ public string Name => TmdbMovieProvider.Current.Name;
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
{
diff --git a/MediaBrowser.Providers/Tmdb/People/TmdbPersonExternalId.cs b/MediaBrowser.Providers/Tmdb/People/TmdbPersonExternalId.cs
new file mode 100644
index 000000000..2c61bc70a
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/People/TmdbPersonExternalId.cs
@@ -0,0 +1,24 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+
+namespace MediaBrowser.Providers.Tmdb.People
+{
+ public class TmdbPersonExternalId : IExternalId
+ {
+ /// <inheritdoc />
+ public string Name => TmdbUtils.ProviderName;
+
+ /// <inheritdoc />
+ public string Key => MetadataProviders.Tmdb.ToString();
+
+ /// <inheritdoc />
+ public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "person/{0}";
+
+ /// <inheritdoc />
+ public bool Supports(IHasProviderIds item)
+ {
+ return item is Person;
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/People/MovieDbPersonImageProvider.cs b/MediaBrowser.Providers/Tmdb/People/TmdbPersonImageProvider.cs
index 3019ee506..44ccbf453 100644
--- a/MediaBrowser.Providers/People/MovieDbPersonImageProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/People/TmdbPersonImageProvider.cs
@@ -11,16 +11,19 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Models.People;
+using MediaBrowser.Providers.Tmdb.Movies;
-namespace MediaBrowser.Providers.People
+namespace MediaBrowser.Providers.Tmdb.People
{
- public class MovieDbPersonImageProvider : IRemoteImageProvider, IHasOrder
+ public class TmdbPersonImageProvider : IRemoteImageProvider, IHasOrder
{
private readonly IServerConfigurationManager _config;
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
- public MovieDbPersonImageProvider(IServerConfigurationManager config, IJsonSerializer jsonSerializer, IHttpClient httpClient)
+ public TmdbPersonImageProvider(IServerConfigurationManager config, IJsonSerializer jsonSerializer, IHttpClient httpClient)
{
_config = config;
_jsonSerializer = jsonSerializer;
@@ -29,7 +32,7 @@ namespace MediaBrowser.Providers.People
public string Name => ProviderName;
- public static string ProviderName => "TheMovieDb";
+ public static string ProviderName => TmdbUtils.ProviderName;
public bool Supports(BaseItem item)
{
@@ -51,15 +54,15 @@ namespace MediaBrowser.Providers.People
if (!string.IsNullOrEmpty(id))
{
- await MovieDbPersonProvider.Current.EnsurePersonInfo(id, cancellationToken).ConfigureAwait(false);
+ await TmdbPersonProvider.Current.EnsurePersonInfo(id, cancellationToken).ConfigureAwait(false);
- var dataFilePath = MovieDbPersonProvider.GetPersonDataFilePath(_config.ApplicationPaths, id);
+ var dataFilePath = TmdbPersonProvider.GetPersonDataFilePath(_config.ApplicationPaths, id);
- var result = _jsonSerializer.DeserializeFromFile<MovieDbPersonProvider.PersonResult>(dataFilePath);
+ var result = _jsonSerializer.DeserializeFromFile<PersonResult>(dataFilePath);
- var images = result.images ?? new MovieDbPersonProvider.Images();
+ var images = result.Images ?? new PersonImages();
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
@@ -69,20 +72,20 @@ namespace MediaBrowser.Providers.People
return new List<RemoteImageInfo>();
}
- private IEnumerable<RemoteImageInfo> GetImages(MovieDbPersonProvider.Images images, string preferredLanguage, string baseImageUrl)
+ private IEnumerable<RemoteImageInfo> GetImages(PersonImages images, string preferredLanguage, string baseImageUrl)
{
var list = new List<RemoteImageInfo>();
- if (images.profiles != null)
+ if (images.Profiles != null)
{
- list.AddRange(images.profiles.Select(i => new RemoteImageInfo
+ list.AddRange(images.Profiles.Select(i => new RemoteImageInfo
{
ProviderName = Name,
Type = ImageType.Primary,
- Width = i.width,
- Height = i.height,
+ Width = i.Width,
+ Height = i.Height,
Language = GetLanguage(i),
- Url = baseImageUrl + i.file_path
+ Url = baseImageUrl + i.File_Path
}));
}
@@ -113,9 +116,9 @@ namespace MediaBrowser.Providers.People
.ThenByDescending(i => i.VoteCount ?? 0);
}
- private string GetLanguage(MovieDbPersonProvider.Profile profile)
+ private string GetLanguage(Profile profile)
{
- return profile.iso_639_1 == null ? null : profile.iso_639_1.ToString();
+ return profile.Iso_639_1?.ToString();
}
public int Order => 0;
diff --git a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs b/MediaBrowser.Providers/Tmdb/People/TmdbPersonProvider.cs
index 6d9d66f80..130403e4d 100644
--- a/MediaBrowser.Providers/People/MovieDbPersonProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/People/TmdbPersonProvider.cs
@@ -17,16 +17,19 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Net;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
-using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Models.People;
+using MediaBrowser.Providers.Tmdb.Models.Search;
+using MediaBrowser.Providers.Tmdb.Movies;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.People
+namespace MediaBrowser.Providers.Tmdb.People
{
- public class MovieDbPersonProvider : IRemoteMetadataProvider<Person, PersonLookupInfo>
+ public class TmdbPersonProvider : IRemoteMetadataProvider<Person, PersonLookupInfo>
{
const string DataFileName = "info.json";
- internal static MovieDbPersonProvider Current { get; private set; }
+ internal static TmdbPersonProvider Current { get; private set; }
private readonly IJsonSerializer _jsonSerializer;
private readonly IFileSystem _fileSystem;
@@ -34,7 +37,7 @@ namespace MediaBrowser.Providers.People
private readonly IHttpClient _httpClient;
private readonly ILogger _logger;
- public MovieDbPersonProvider(IFileSystem fileSystem, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogger logger)
+ public TmdbPersonProvider(IFileSystem fileSystem, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IHttpClient httpClient, ILogger logger)
{
_fileSystem = fileSystem;
_configurationManager = configurationManager;
@@ -44,13 +47,13 @@ namespace MediaBrowser.Providers.People
Current = this;
}
- public string Name => "TheMovieDb";
+ public string Name => TmdbUtils.ProviderName;
public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(PersonLookupInfo searchInfo, CancellationToken cancellationToken)
{
var tmdbId = searchInfo.GetProviderId(MetadataProviders.Tmdb);
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
@@ -61,19 +64,19 @@ namespace MediaBrowser.Providers.People
var dataFilePath = GetPersonDataFilePath(_configurationManager.ApplicationPaths, tmdbId);
var info = _jsonSerializer.DeserializeFromFile<PersonResult>(dataFilePath);
- var images = (info.images ?? new Images()).profiles ?? new List<Profile>();
+ var images = (info.Images ?? new PersonImages()).Profiles ?? new List<Profile>();
var result = new RemoteSearchResult
{
- Name = info.name,
+ Name = info.Name,
SearchProviderName = Name,
- ImageUrl = images.Count == 0 ? null : (tmdbImageUrl + images[0].file_path)
+ ImageUrl = images.Count == 0 ? null : (tmdbImageUrl + images[0].File_Path)
};
- result.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture));
- result.SetProviderId(MetadataProviders.Imdb, info.imdb_id);
+ result.SetProviderId(MetadataProviders.Tmdb, info.Id.ToString(_usCulture));
+ result.SetProviderId(MetadataProviders.Imdb, info.Imdb_Id);
return new[] { result };
}
@@ -84,20 +87,20 @@ namespace MediaBrowser.Providers.People
return new List<RemoteSearchResult>();
}
- var url = string.Format(MovieDbProvider.BaseMovieDbUrl + @"3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(searchInfo.Name), MovieDbProvider.ApiKey);
+ var url = string.Format(TmdbUtils.BaseTmdbApiUrl + @"3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(searchInfo.Name), TmdbUtils.ApiKey);
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- var result = await _jsonSerializer.DeserializeFromStreamAsync<PersonSearchResults>(json).ConfigureAwait(false) ??
- new PersonSearchResults();
+ var result = await _jsonSerializer.DeserializeFromStreamAsync<TmdbSearchResult<PersonSearchResult>>(json).ConfigureAwait(false) ??
+ new TmdbSearchResult<PersonSearchResult>();
return result.Results.Select(i => GetSearchResult(i, tmdbImageUrl));
}
@@ -112,7 +115,7 @@ namespace MediaBrowser.Providers.People
Name = i.Name,
- ImageUrl = string.IsNullOrEmpty(i.Profile_Path) ? null : (baseImageUrl + i.Profile_Path)
+ ImageUrl = string.IsNullOrEmpty(i.Profile_Path) ? null : baseImageUrl + i.Profile_Path
};
result.SetProviderId(MetadataProviders.Tmdb, i.Id.ToString(_usCulture));
@@ -161,27 +164,27 @@ namespace MediaBrowser.Providers.People
//item.HomePageUrl = info.homepage;
- if (!string.IsNullOrWhiteSpace(info.place_of_birth))
+ if (!string.IsNullOrWhiteSpace(info.Place_Of_Birth))
{
- item.ProductionLocations = new string[] { info.place_of_birth };
+ item.ProductionLocations = new string[] { info.Place_Of_Birth };
}
- item.Overview = info.biography;
+ item.Overview = info.Biography;
- if (DateTime.TryParseExact(info.birthday, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out var date))
+ if (DateTime.TryParseExact(info.Birthday, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out var date))
{
item.PremiereDate = date.ToUniversalTime();
}
- if (DateTime.TryParseExact(info.deathday, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out date))
+ if (DateTime.TryParseExact(info.Deathday, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out date))
{
item.EndDate = date.ToUniversalTime();
}
- item.SetProviderId(MetadataProviders.Tmdb, info.id.ToString(_usCulture));
+ item.SetProviderId(MetadataProviders.Tmdb, info.Id.ToString(_usCulture));
- if (!string.IsNullOrEmpty(info.imdb_id))
+ if (!string.IsNullOrEmpty(info.Imdb_Id))
{
- item.SetProviderId(MetadataProviders.Imdb, info.imdb_id);
+ item.SetProviderId(MetadataProviders.Imdb, info.Imdb_Id);
}
result.HasMetadata = true;
@@ -217,13 +220,13 @@ namespace MediaBrowser.Providers.People
return;
}
- var url = string.Format(MovieDbProvider.BaseMovieDbUrl + @"3/person/{1}?api_key={0}&append_to_response=credits,images,external_ids", MovieDbProvider.ApiKey, id);
+ var url = string.Format(TmdbUtils.BaseTmdbApiUrl + @"3/person/{1}?api_key={0}&append_to_response=credits,images,external_ids", TmdbUtils.ApiKey, id);
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
@@ -256,133 +259,6 @@ namespace MediaBrowser.Providers.People
return Path.Combine(appPaths.CachePath, "tmdb-people");
}
- #region Result Objects
- /// <summary>
- /// Class PersonSearchResult
- /// </summary>
- public class PersonSearchResult
- {
- /// <summary>
- /// Gets or sets a value indicating whether this <see cref="PersonSearchResult" /> is adult.
- /// </summary>
- /// <value><c>true</c> if adult; otherwise, <c>false</c>.</value>
- public bool Adult { get; set; }
- /// <summary>
- /// Gets or sets the id.
- /// </summary>
- /// <value>The id.</value>
- public int Id { get; set; }
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <value>The name.</value>
- public string Name { get; set; }
- /// <summary>
- /// Gets or sets the profile_ path.
- /// </summary>
- /// <value>The profile_ path.</value>
- public string Profile_Path { get; set; }
- }
-
- /// <summary>
- /// Class PersonSearchResults
- /// </summary>
- public class PersonSearchResults
- {
- /// <summary>
- /// Gets or sets the page.
- /// </summary>
- /// <value>The page.</value>
- public int Page { get; set; }
- /// <summary>
- /// Gets or sets the results.
- /// </summary>
- /// <value>The results.</value>
- public List<PersonSearchResult> Results { get; set; }
- /// <summary>
- /// Gets or sets the total_ pages.
- /// </summary>
- /// <value>The total_ pages.</value>
- public int Total_Pages { get; set; }
- /// <summary>
- /// Gets or sets the total_ results.
- /// </summary>
- /// <value>The total_ results.</value>
- public int Total_Results { get; set; }
- }
-
- public class Cast
- {
- public int id { get; set; }
- public string title { get; set; }
- public string character { get; set; }
- public string original_title { get; set; }
- public string poster_path { get; set; }
- public string release_date { get; set; }
- public bool adult { get; set; }
- }
-
- public class Crew
- {
- public int id { get; set; }
- public string title { get; set; }
- public string original_title { get; set; }
- public string department { get; set; }
- public string job { get; set; }
- public string poster_path { get; set; }
- public string release_date { get; set; }
- public bool adult { get; set; }
- }
-
- public class Credits
- {
- public List<Cast> cast { get; set; }
- public List<Crew> crew { get; set; }
- }
-
- public class Profile
- {
- public string file_path { get; set; }
- public int width { get; set; }
- public int height { get; set; }
- public object iso_639_1 { get; set; }
- public double aspect_ratio { get; set; }
- }
-
- public class Images
- {
- public List<Profile> profiles { get; set; }
- }
-
- public class ExternalIds
- {
- public string imdb_id { get; set; }
- public string freebase_mid { get; set; }
- public string freebase_id { get; set; }
- public int tvrage_id { get; set; }
- }
-
- public class PersonResult
- {
- public bool adult { get; set; }
- public List<object> also_known_as { get; set; }
- public string biography { get; set; }
- public string birthday { get; set; }
- public string deathday { get; set; }
- public string homepage { get; set; }
- public int id { get; set; }
- public string imdb_id { get; set; }
- public string name { get; set; }
- public string place_of_birth { get; set; }
- public double popularity { get; set; }
- public string profile_path { get; set; }
- public Credits credits { get; set; }
- public Images images { get; set; }
- public ExternalIds external_ids { get; set; }
- }
-
- #endregion
-
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
{
return _httpClient.GetResponse(new HttpRequestOptions
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeImageProvider.cs
index e4248afe1..51e7891a1 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeImageProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeImageProvider.cs
@@ -14,16 +14,18 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Movies;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.TV.TheMovieDb
+namespace MediaBrowser.Providers.Tmdb.TV
{
- public class MovieDbEpisodeImageProvider :
- MovieDbProviderBase,
+ public class TmdbEpisodeImageProvider :
+ TmdbEpisodeProviderBase,
IRemoteImageProvider,
IHasOrder
{
- public MovieDbEpisodeImageProvider(IHttpClient httpClient, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IFileSystem fileSystem, ILocalizationManager localization, ILoggerFactory loggerFactory)
+ public TmdbEpisodeImageProvider(IHttpClient httpClient, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IFileSystem fileSystem, ILocalizationManager localization, ILoggerFactory loggerFactory)
: base(httpClient, configurationManager, jsonSerializer, fileSystem, localization, loggerFactory)
{ }
@@ -62,18 +64,18 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
var response = await GetEpisodeInfo(seriesId, seasonNumber.Value, episodeNumber.Value,
language, cancellationToken).ConfigureAwait(false);
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
- list.AddRange(GetPosters(response.images).Select(i => new RemoteImageInfo
+ list.AddRange(GetPosters(response.Images).Select(i => new RemoteImageInfo
{
- Url = tmdbImageUrl + i.file_path,
- CommunityRating = i.vote_average,
- VoteCount = i.vote_count,
- Width = i.width,
- Height = i.height,
- Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
+ Url = tmdbImageUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
+ Language = TmdbMovieProvider.AdjustImageLanguage(i.Iso_639_1, language),
ProviderName = Name,
Type = ImageType.Primary,
RatingType = RatingType.Score
@@ -106,9 +108,9 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
}
- private IEnumerable<Still> GetPosters(Images images)
+ private IEnumerable<Still> GetPosters(StillImages images)
{
- return images.stills ?? new List<Still>();
+ return images.Stills ?? new List<Still>();
}
@@ -117,12 +119,13 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
return GetResponse(url, cancellationToken);
}
- public string Name => "TheMovieDb";
+ public string Name => TmdbUtils.ProviderName;
public bool Supports(BaseItem item)
{
return item is Controller.Entities.TV.Episode;
}
+
// After TheTvDb
public int Order => 1;
}
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeProvider.cs
index 3d7745085..a17f5d17a 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbEpisodeProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeProvider.cs
@@ -18,14 +18,14 @@ using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.TV.TheMovieDb
+namespace MediaBrowser.Providers.Tmdb.TV
{
- public class MovieDbEpisodeProvider :
- MovieDbProviderBase,
+ public class TmdbEpisodeProvider :
+ TmdbEpisodeProviderBase,
IRemoteMetadataProvider<Episode, EpisodeInfo>,
IHasOrder
{
- public MovieDbEpisodeProvider(IHttpClient httpClient, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IFileSystem fileSystem, ILocalizationManager localization, ILoggerFactory loggerFactory)
+ public TmdbEpisodeProvider(IHttpClient httpClient, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IFileSystem fileSystem, ILocalizationManager localization, ILoggerFactory loggerFactory)
: base(httpClient, configurationManager, jsonSerializer, fileSystem, localization, loggerFactory)
{ }
@@ -93,7 +93,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
result.HasMetadata = true;
result.QueriedById = true;
- if (!string.IsNullOrEmpty(response.overview))
+ if (!string.IsNullOrEmpty(response.Overview))
{
// if overview is non-empty, we can assume that localized data was returned
result.ResultLanguage = info.MetadataLanguage;
@@ -107,30 +107,29 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
item.ParentIndexNumber = info.ParentIndexNumber;
item.IndexNumberEnd = info.IndexNumberEnd;
- if (response.external_ids.tvdb_id > 0)
+ if (response.External_Ids.Tvdb_Id > 0)
{
- item.SetProviderId(MetadataProviders.Tvdb, response.external_ids.tvdb_id.ToString(CultureInfo.InvariantCulture));
+ item.SetProviderId(MetadataProviders.Tvdb, response.External_Ids.Tvdb_Id.ToString(CultureInfo.InvariantCulture));
}
- item.PremiereDate = response.air_date;
+ item.PremiereDate = response.Air_Date;
item.ProductionYear = result.Item.PremiereDate.Value.Year;
- item.Name = response.name;
- item.Overview = response.overview;
+ item.Name = response.Name;
+ item.Overview = response.Overview;
- item.CommunityRating = (float)response.vote_average;
- //item.VoteCount = response.vote_count;
+ item.CommunityRating = (float)response.Vote_Average;
- if (response.videos != null && response.videos.results != null)
+ if (response.Videos?.Results != null)
{
- foreach (var video in response.videos.results)
+ foreach (var video in response.Videos.Results)
{
- if (video.type.Equals("trailer", System.StringComparison.OrdinalIgnoreCase)
- || video.type.Equals("clip", System.StringComparison.OrdinalIgnoreCase))
+ if (video.Type.Equals("trailer", System.StringComparison.OrdinalIgnoreCase)
+ || video.Type.Equals("clip", System.StringComparison.OrdinalIgnoreCase))
{
- if (video.site.Equals("youtube", System.StringComparison.OrdinalIgnoreCase))
+ if (video.Site.Equals("youtube", System.StringComparison.OrdinalIgnoreCase))
{
- var videoUrl = string.Format("http://www.youtube.com/watch?v={0}", video.key);
+ var videoUrl = string.Format("http://www.youtube.com/watch?v={0}", video.Key);
item.AddTrailerUrl(videoUrl);
}
}
@@ -139,54 +138,50 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
result.ResetPeople();
- var credits = response.credits;
+ var credits = response.Credits;
if (credits != null)
{
//Actors, Directors, Writers - all in People
//actors come from cast
- if (credits.cast != null)
+ if (credits.Cast != null)
{
- foreach (var actor in credits.cast.OrderBy(a => a.order))
+ foreach (var actor in credits.Cast.OrderBy(a => a.Order))
{
- result.AddPerson(new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
+ result.AddPerson(new PersonInfo { Name = actor.Name.Trim(), Role = actor.Character, Type = PersonType.Actor, SortOrder = actor.Order });
}
}
// guest stars
- if (credits.guest_stars != null)
+ if (credits.Guest_Stars != null)
{
- foreach (var guest in credits.guest_stars.OrderBy(a => a.order))
+ foreach (var guest in credits.Guest_Stars.OrderBy(a => a.Order))
{
- result.AddPerson(new PersonInfo { Name = guest.name.Trim(), Role = guest.character, Type = PersonType.GuestStar, SortOrder = guest.order });
+ result.AddPerson(new PersonInfo { Name = guest.Name.Trim(), Role = guest.Character, Type = PersonType.GuestStar, SortOrder = guest.Order });
}
}
//and the rest from crew
- if (credits.crew != null)
+ if (credits.Crew != null)
{
var keepTypes = new[]
{
PersonType.Director,
- //PersonType.Writer,
- //PersonType.Producer
+ PersonType.Writer,
+ PersonType.Producer
};
- foreach (var person in credits.crew)
+ foreach (var person in credits.Crew)
{
// Normalize this
- var type = person.department;
- if (string.Equals(type, "writing", StringComparison.OrdinalIgnoreCase))
- {
- type = PersonType.Writer;
- }
+ var type = TmdbUtils.MapCrewToPersonType(person);
- if (!keepTypes.Contains(type ?? string.Empty, StringComparer.OrdinalIgnoreCase) &&
- !keepTypes.Contains(person.job ?? string.Empty, StringComparer.OrdinalIgnoreCase))
+ if (!keepTypes.Contains(type, StringComparer.OrdinalIgnoreCase) &&
+ !keepTypes.Contains(person.Job ?? string.Empty, StringComparer.OrdinalIgnoreCase))
{
continue;
}
- result.AddPerson(new PersonInfo { Name = person.name.Trim(), Role = person.job, Type = type });
+ result.AddPerson(new PersonInfo { Name = person.Name.Trim(), Role = person.Job, Type = type });
}
}
}
@@ -211,6 +206,6 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
// After TheTvDb
public int Order => 1;
- public string Name => "TheMovieDb";
+ public string Name => TmdbUtils.ProviderName;
}
}
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeProviderBase.cs
index 6e438ebd8..2003261c9 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbProviderBase.cs
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbEpisodeProviderBase.cs
@@ -1,5 +1,4 @@
using System;
-using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Threading;
@@ -10,13 +9,15 @@ using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.TV;
+using MediaBrowser.Providers.Tmdb.Movies;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.TV.TheMovieDb
+namespace MediaBrowser.Providers.Tmdb.TV
{
- public abstract class MovieDbProviderBase
+ public abstract class TmdbEpisodeProviderBase
{
- private const string EpisodeUrlPattern = MovieDbProvider.BaseMovieDbUrl + @"3/tv/{0}/season/{1}/episode/{2}?api_key={3}&append_to_response=images,external_ids,credits,videos";
+ private const string EpisodeUrlPattern = TmdbUtils.BaseTmdbApiUrl + @"3/tv/{0}/season/{1}/episode/{2}?api_key={3}&append_to_response=images,external_ids,credits,videos";
private readonly IHttpClient _httpClient;
private readonly IServerConfigurationManager _configurationManager;
private readonly IJsonSerializer _jsonSerializer;
@@ -24,7 +25,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
private readonly ILocalizationManager _localization;
private readonly ILogger _logger;
- public MovieDbProviderBase(IHttpClient httpClient, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IFileSystem fileSystem, ILocalizationManager localization, ILoggerFactory loggerFactory)
+ protected TmdbEpisodeProviderBase(IHttpClient httpClient, IServerConfigurationManager configurationManager, IJsonSerializer jsonSerializer, IFileSystem fileSystem, ILocalizationManager localization, ILoggerFactory loggerFactory)
{
_httpClient = httpClient;
_configurationManager = configurationManager;
@@ -36,7 +37,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
protected ILogger Logger => _logger;
- protected async Task<RootObject> GetEpisodeInfo(string seriesTmdbId, int season, int episodeNumber, string preferredMetadataLanguage,
+ protected async Task<EpisodeResult> GetEpisodeInfo(string seriesTmdbId, int season, int episodeNumber, string preferredMetadataLanguage,
CancellationToken cancellationToken)
{
await EnsureEpisodeInfo(seriesTmdbId, season, episodeNumber, preferredMetadataLanguage, cancellationToken)
@@ -44,7 +45,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
var dataFilePath = GetDataFilePath(seriesTmdbId, season, episodeNumber, preferredMetadataLanguage);
- return _jsonSerializer.DeserializeFromFile<RootObject>(dataFilePath);
+ return _jsonSerializer.DeserializeFromFile<EpisodeResult>(dataFilePath);
}
internal Task EnsureEpisodeInfo(string tmdbId, int seasonNumber, int episodeNumber, string language, CancellationToken cancellationToken)
@@ -85,7 +86,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
throw new ArgumentNullException(nameof(preferredLanguage));
}
- var path = MovieDbSeriesProvider.GetSeriesDataPath(_configurationManager.ApplicationPaths, tmdbId);
+ var path = TmdbSeriesProvider.GetSeriesDataPath(_configurationManager.ApplicationPaths, tmdbId);
var filename = string.Format("season-{0}-episode-{1}-{2}.json",
seasonNumber.ToString(CultureInfo.InvariantCulture),
@@ -105,32 +106,32 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
_jsonSerializer.SerializeToFile(mainResult, dataFilePath);
}
- internal async Task<RootObject> FetchMainResult(string urlPattern, string id, int seasonNumber, int episodeNumber, string language, CancellationToken cancellationToken)
+ internal async Task<EpisodeResult> FetchMainResult(string urlPattern, string id, int seasonNumber, int episodeNumber, string language, CancellationToken cancellationToken)
{
- var url = string.Format(urlPattern, id, seasonNumber.ToString(CultureInfo.InvariantCulture), episodeNumber, MovieDbProvider.ApiKey);
+ var url = string.Format(urlPattern, id, seasonNumber.ToString(CultureInfo.InvariantCulture), episodeNumber, TmdbUtils.ApiKey);
if (!string.IsNullOrEmpty(language))
{
url += string.Format("&language={0}", language);
}
- var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(language);
+ var includeImageLanguageParam = TmdbMovieProvider.GetImageLanguagesParam(language);
// Get images in english and with no language
url += "&include_image_language=" + includeImageLanguageParam;
cancellationToken.ThrowIfCancellationRequested();
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- return await _jsonSerializer.DeserializeFromStreamAsync<RootObject>(json).ConfigureAwait(false);
+ return await _jsonSerializer.DeserializeFromStreamAsync<EpisodeResult>(json).ConfigureAwait(false);
}
}
}
@@ -143,103 +144,5 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
Url = url
});
}
-
- public class Still
- {
- public double aspect_ratio { get; set; }
- public string file_path { get; set; }
- public int height { get; set; }
- public string id { get; set; }
- public string iso_639_1 { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public int width { get; set; }
- }
-
- public class Images
- {
- public List<Still> stills { get; set; }
- }
-
- public class ExternalIds
- {
- public string imdb_id { get; set; }
- public object freebase_id { get; set; }
- public string freebase_mid { get; set; }
- public int tvdb_id { get; set; }
- public int tvrage_id { get; set; }
- }
-
- public class Cast
- {
- public string character { get; set; }
- public string credit_id { get; set; }
- public int id { get; set; }
- public string name { get; set; }
- public string profile_path { get; set; }
- public int order { get; set; }
- }
-
- public class Crew
- {
- public int id { get; set; }
- public string credit_id { get; set; }
- public string name { get; set; }
- public string department { get; set; }
- public string job { get; set; }
- public string profile_path { get; set; }
- }
-
- public class GuestStar
- {
- public int id { get; set; }
- public string name { get; set; }
- public string credit_id { get; set; }
- public string character { get; set; }
- public int order { get; set; }
- public string profile_path { get; set; }
- }
-
- public class Credits
- {
- public List<Cast> cast { get; set; }
- public List<Crew> crew { get; set; }
- public List<GuestStar> guest_stars { get; set; }
- }
-
- public class Videos
- {
- public List<Video> results { get; set; }
- }
-
- public class Video
- {
- public string id { get; set; }
- public string iso_639_1 { get; set; }
- public string iso_3166_1 { get; set; }
- public string key { get; set; }
- public string name { get; set; }
- public string site { get; set; }
- public string size { get; set; }
- public string type { get; set; }
- }
-
- public class RootObject
- {
- public DateTime air_date { get; set; }
- public int episode_number { get; set; }
- public string name { get; set; }
- public string overview { get; set; }
- public int id { get; set; }
- public object production_code { get; set; }
- public int season_number { get; set; }
- public string still_path { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public Images images { get; set; }
- public ExternalIds external_ids { get; set; }
- public Credits credits { get; set; }
- public Videos videos { get; set; }
- }
}
}
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs
index 6be1b101d..2f2ac58e8 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeasonProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbSeasonProvider.cs
@@ -7,7 +7,6 @@ using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Globalization;
@@ -16,13 +15,16 @@ using MediaBrowser.Model.Net;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.TV;
+using MediaBrowser.Providers.Tmdb.Movies;
using Microsoft.Extensions.Logging;
+using Season = MediaBrowser.Controller.Entities.TV.Season;
-namespace MediaBrowser.Providers.TV.TheMovieDb
+namespace MediaBrowser.Providers.Tmdb.TV
{
- public class MovieDbSeasonProvider : IRemoteMetadataProvider<Season, SeasonInfo>
+ public class TmdbSeasonProvider : IRemoteMetadataProvider<Season, SeasonInfo>
{
- private const string GetTvInfo3 = MovieDbProvider.BaseMovieDbUrl + @"3/tv/{0}/season/{1}?api_key={2}&append_to_response=images,keywords,external_ids,credits,videos";
+ private const string GetTvInfo3 = TmdbUtils.BaseTmdbApiUrl + @"3/tv/{0}/season/{1}?api_key={2}&append_to_response=images,keywords,external_ids,credits,videos";
private readonly IHttpClient _httpClient;
private readonly IServerConfigurationManager _configurationManager;
private readonly IJsonSerializer _jsonSerializer;
@@ -30,7 +32,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
private readonly ILocalizationManager _localization;
private readonly ILogger _logger;
- public MovieDbSeasonProvider(IHttpClient httpClient, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ILocalizationManager localization, IJsonSerializer jsonSerializer, ILoggerFactory loggerFactory)
+ public TmdbSeasonProvider(IHttpClient httpClient, IServerConfigurationManager configurationManager, IFileSystem fileSystem, ILocalizationManager localization, IJsonSerializer jsonSerializer, ILoggerFactory loggerFactory)
{
_httpClient = httpClient;
_configurationManager = configurationManager;
@@ -65,31 +67,31 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
result.Item.IndexNumber = seasonNumber;
- result.Item.Overview = seasonInfo.overview;
+ result.Item.Overview = seasonInfo.Overview;
- if (seasonInfo.external_ids.tvdb_id > 0)
+ if (seasonInfo.External_Ids.Tvdb_Id > 0)
{
- result.Item.SetProviderId(MetadataProviders.Tvdb, seasonInfo.external_ids.tvdb_id.ToString(CultureInfo.InvariantCulture));
+ result.Item.SetProviderId(MetadataProviders.Tvdb, seasonInfo.External_Ids.Tvdb_Id.ToString(CultureInfo.InvariantCulture));
}
- var credits = seasonInfo.credits;
+ var credits = seasonInfo.Credits;
if (credits != null)
{
//Actors, Directors, Writers - all in People
//actors come from cast
- if (credits.cast != null)
+ if (credits.Cast != null)
{
//foreach (var actor in credits.cast.OrderBy(a => a.order)) result.Item.AddPerson(new PersonInfo { Name = actor.name.Trim(), Role = actor.character, Type = PersonType.Actor, SortOrder = actor.order });
}
//and the rest from crew
- if (credits.crew != null)
+ if (credits.Crew != null)
{
//foreach (var person in credits.crew) result.Item.AddPerson(new PersonInfo { Name = person.name.Trim(), Role = person.job, Type = person.department });
}
}
- result.Item.PremiereDate = seasonInfo.air_date;
+ result.Item.PremiereDate = seasonInfo.Air_Date;
result.Item.ProductionYear = result.Item.PremiereDate.Value.Year;
}
catch (HttpException ex)
@@ -108,7 +110,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
return result;
}
- public string Name => "TheMovieDb";
+ public string Name => TmdbUtils.ProviderName;
public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeasonInfo searchInfo, CancellationToken cancellationToken)
{
@@ -124,7 +126,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
});
}
- private async Task<RootObject> GetSeasonInfo(string seriesTmdbId, int season, string preferredMetadataLanguage,
+ private async Task<SeasonResult> GetSeasonInfo(string seriesTmdbId, int season, string preferredMetadataLanguage,
CancellationToken cancellationToken)
{
await EnsureSeasonInfo(seriesTmdbId, season, preferredMetadataLanguage, cancellationToken)
@@ -132,7 +134,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
var dataFilePath = GetDataFilePath(seriesTmdbId, season, preferredMetadataLanguage);
- return _jsonSerializer.DeserializeFromFile<RootObject>(dataFilePath);
+ return _jsonSerializer.DeserializeFromFile<SeasonResult>(dataFilePath);
}
internal Task EnsureSeasonInfo(string tmdbId, int seasonNumber, string language, CancellationToken cancellationToken)
@@ -173,7 +175,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
throw new ArgumentNullException(nameof(preferredLanguage));
}
- var path = MovieDbSeriesProvider.GetSeriesDataPath(_configurationManager.ApplicationPaths, tmdbId);
+ var path = TmdbSeriesProvider.GetSeriesDataPath(_configurationManager.ApplicationPaths, tmdbId);
var filename = string.Format("season-{0}-{1}.json",
seasonNumber.ToString(CultureInfo.InvariantCulture),
@@ -192,117 +194,34 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
_jsonSerializer.SerializeToFile(mainResult, dataFilePath);
}
- internal async Task<RootObject> FetchMainResult(string id, int seasonNumber, string language, CancellationToken cancellationToken)
+ internal async Task<SeasonResult> FetchMainResult(string id, int seasonNumber, string language, CancellationToken cancellationToken)
{
- var url = string.Format(GetTvInfo3, id, seasonNumber.ToString(CultureInfo.InvariantCulture), MovieDbProvider.ApiKey);
+ var url = string.Format(GetTvInfo3, id, seasonNumber.ToString(CultureInfo.InvariantCulture), TmdbUtils.ApiKey);
if (!string.IsNullOrEmpty(language))
{
- url += string.Format("&language={0}", MovieDbProvider.NormalizeLanguage(language));
+ url += string.Format("&language={0}", TmdbMovieProvider.NormalizeLanguage(language));
}
- var includeImageLanguageParam = MovieDbProvider.GetImageLanguagesParam(language);
+ var includeImageLanguageParam = TmdbMovieProvider.GetImageLanguagesParam(language);
// Get images in english and with no language
url += "&include_image_language=" + includeImageLanguageParam;
cancellationToken.ThrowIfCancellationRequested();
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- return await _jsonSerializer.DeserializeFromStreamAsync<RootObject>(json).ConfigureAwait(false);
+ return await _jsonSerializer.DeserializeFromStreamAsync<SeasonResult>(json).ConfigureAwait(false);
}
}
}
-
- public class Episode
- {
- public string air_date { get; set; }
- public int episode_number { get; set; }
- public int id { get; set; }
- public string name { get; set; }
- public string overview { get; set; }
- public string still_path { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- }
-
- public class Cast
- {
- public string character { get; set; }
- public string credit_id { get; set; }
- public int id { get; set; }
- public string name { get; set; }
- public string profile_path { get; set; }
- public int order { get; set; }
- }
-
- public class Crew
- {
- public string credit_id { get; set; }
- public string department { get; set; }
- public int id { get; set; }
- public string name { get; set; }
- public string job { get; set; }
- public string profile_path { get; set; }
- }
-
- public class Credits
- {
- public List<Cast> cast { get; set; }
- public List<Crew> crew { get; set; }
- }
-
- public class Poster
- {
- public double aspect_ratio { get; set; }
- public string file_path { get; set; }
- public int height { get; set; }
- public string id { get; set; }
- public string iso_639_1 { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public int width { get; set; }
- }
-
- public class Images
- {
- public List<Poster> posters { get; set; }
- }
-
- public class ExternalIds
- {
- public string freebase_id { get; set; }
- public string freebase_mid { get; set; }
- public int tvdb_id { get; set; }
- public object tvrage_id { get; set; }
- }
-
- public class Videos
- {
- public List<object> results { get; set; }
- }
-
- public class RootObject
- {
- public DateTime air_date { get; set; }
- public List<Episode> episodes { get; set; }
- public string name { get; set; }
- public string overview { get; set; }
- public int id { get; set; }
- public string poster_path { get; set; }
- public int season_number { get; set; }
- public Credits credits { get; set; }
- public Images images { get; set; }
- public ExternalIds external_ids { get; set; }
- public Videos videos { get; set; }
- }
}
}
diff --git a/MediaBrowser.Providers/Tmdb/TV/TmdbSeriesExternalId.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbSeriesExternalId.cs
new file mode 100644
index 000000000..524a3b05e
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbSeriesExternalId.cs
@@ -0,0 +1,24 @@
+using MediaBrowser.Controller.Entities.TV;
+using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Entities;
+
+namespace MediaBrowser.Providers.Tmdb.TV
+{
+ public class TmdbSeriesExternalId : IExternalId
+ {
+ /// <inheritdoc />
+ public string Name => TmdbUtils.ProviderName;
+
+ /// <inheritdoc />
+ public string Key => MetadataProviders.Tmdb.ToString();
+
+ /// <inheritdoc />
+ public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "tv/{0}";
+
+ /// <inheritdoc />
+ public bool Supports(IHasProviderIds item)
+ {
+ return item is Series;
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbSeriesImageProvider.cs
index 26686356f..882ec7574 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesImageProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbSeriesImageProvider.cs
@@ -13,16 +13,19 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.General;
+using MediaBrowser.Providers.Tmdb.Models.TV;
+using MediaBrowser.Providers.Tmdb.Movies;
-namespace MediaBrowser.Providers.TV.TheMovieDb
+namespace MediaBrowser.Providers.Tmdb.TV
{
- public class MovieDbSeriesImageProvider : IRemoteImageProvider, IHasOrder
+ public class TmdbSeriesImageProvider : IRemoteImageProvider, IHasOrder
{
private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
private readonly IFileSystem _fileSystem;
- public MovieDbSeriesImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem)
+ public TmdbSeriesImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient, IFileSystem fileSystem)
{
_jsonSerializer = jsonSerializer;
_httpClient = httpClient;
@@ -31,7 +34,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
public string Name => ProviderName;
- public static string ProviderName => "TheMovieDb";
+ public static string ProviderName => TmdbUtils.ProviderName;
public bool Supports(BaseItem item)
{
@@ -58,7 +61,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
return list;
}
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
@@ -66,12 +69,12 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
list.AddRange(GetPosters(results).Select(i => new RemoteImageInfo
{
- Url = tmdbImageUrl + i.file_path,
- CommunityRating = i.vote_average,
- VoteCount = i.vote_count,
- Width = i.width,
- Height = i.height,
- Language = MovieDbProvider.AdjustImageLanguage(i.iso_639_1, language),
+ Url = tmdbImageUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
+ Language = TmdbMovieProvider.AdjustImageLanguage(i.Iso_639_1, language),
ProviderName = Name,
Type = ImageType.Primary,
RatingType = RatingType.Score
@@ -79,11 +82,11 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
list.AddRange(GetBackdrops(results).Select(i => new RemoteImageInfo
{
- Url = tmdbImageUrl + i.file_path,
- CommunityRating = i.vote_average,
- VoteCount = i.vote_count,
- Width = i.width,
- Height = i.height,
+ Url = tmdbImageUrl + i.File_Path,
+ CommunityRating = i.Vote_Average,
+ VoteCount = i.Vote_Count,
+ Width = i.Width,
+ Height = i.Height,
ProviderName = Name,
Type = ImageType.Backdrop,
RatingType = RatingType.Score
@@ -118,22 +121,21 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
/// Gets the posters.
/// </summary>
/// <param name="images">The images.</param>
- private IEnumerable<MovieDbSeriesProvider.Poster> GetPosters(MovieDbSeriesProvider.Images images)
+ private IEnumerable<Poster> GetPosters(Images images)
{
- return images.posters ?? new List<MovieDbSeriesProvider.Poster>();
+ return images.Posters ?? new List<Poster>();
}
/// <summary>
/// Gets the backdrops.
/// </summary>
/// <param name="images">The images.</param>
- private IEnumerable<MovieDbSeriesProvider.Backdrop> GetBackdrops(MovieDbSeriesProvider.Images images)
+ private IEnumerable<Backdrop> GetBackdrops(Images images)
{
- var eligibleBackdrops = images.backdrops == null ? new List<MovieDbSeriesProvider.Backdrop>() :
- images.backdrops;
+ var eligibleBackdrops = images.Backdrops ?? new List<Backdrop>();
- return eligibleBackdrops.OrderByDescending(i => i.vote_average)
- .ThenByDescending(i => i.vote_count);
+ return eligibleBackdrops.OrderByDescending(i => i.Vote_Average)
+ .ThenByDescending(i => i.Vote_Count);
}
/// <summary>
@@ -144,7 +146,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
/// <param name="jsonSerializer">The json serializer.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task{MovieImages}.</returns>
- private async Task<MovieDbSeriesProvider.Images> FetchImages(BaseItem item, string language, IJsonSerializer jsonSerializer,
+ private async Task<Images> FetchImages(BaseItem item, string language, IJsonSerializer jsonSerializer,
CancellationToken cancellationToken)
{
var tmdbId = item.GetProviderId(MetadataProviders.Tmdb);
@@ -154,9 +156,9 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
return null;
}
- await MovieDbSeriesProvider.Current.EnsureSeriesInfo(tmdbId, language, cancellationToken).ConfigureAwait(false);
+ await TmdbSeriesProvider.Current.EnsureSeriesInfo(tmdbId, language, cancellationToken).ConfigureAwait(false);
- var path = MovieDbSeriesProvider.Current.GetDataFilePath(tmdbId, language);
+ var path = TmdbSeriesProvider.Current.GetDataFilePath(tmdbId, language);
if (!string.IsNullOrEmpty(path))
{
@@ -164,7 +166,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
if (fileInfo.Exists)
{
- return jsonSerializer.DeserializeFromFile<MovieDbSeriesProvider.RootObject>(path).images;
+ return jsonSerializer.DeserializeFromFile<SeriesResult>(path).Images;
}
}
diff --git a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs b/MediaBrowser.Providers/Tmdb/TV/TmdbSeriesProvider.cs
index b51fb6af8..304f34c25 100644
--- a/MediaBrowser.Providers/TV/TheMovieDb/MovieDbSeriesProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/TV/TmdbSeriesProvider.cs
@@ -18,16 +18,19 @@ using MediaBrowser.Model.IO;
using MediaBrowser.Model.Providers;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Models.Search;
+using MediaBrowser.Providers.Tmdb.Models.TV;
+using MediaBrowser.Providers.Tmdb.Movies;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Providers.TV.TheMovieDb
+namespace MediaBrowser.Providers.Tmdb.TV
{
- public class MovieDbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>, IHasOrder
+ public class TmdbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>, IHasOrder
{
- private const string GetTvInfo3 = MovieDbProvider.BaseMovieDbUrl + @"3/tv/{0}?api_key={1}&append_to_response=credits,images,keywords,external_ids,videos,content_ratings";
+ private const string GetTvInfo3 = TmdbUtils.BaseTmdbApiUrl + @"3/tv/{0}?api_key={1}&append_to_response=credits,images,keywords,external_ids,videos,content_ratings";
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
- internal static MovieDbSeriesProvider Current { get; private set; }
+ internal static TmdbSeriesProvider Current { get; private set; }
private readonly IJsonSerializer _jsonSerializer;
private readonly IFileSystem _fileSystem;
@@ -37,7 +40,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
private readonly IHttpClient _httpClient;
private readonly ILibraryManager _libraryManager;
- public MovieDbSeriesProvider(IJsonSerializer jsonSerializer, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILogger logger, ILocalizationManager localization, IHttpClient httpClient, ILibraryManager libraryManager)
+ public TmdbSeriesProvider(IJsonSerializer jsonSerializer, IFileSystem fileSystem, IServerConfigurationManager configurationManager, ILogger logger, ILocalizationManager localization, IHttpClient httpClient, ILibraryManager libraryManager)
{
_jsonSerializer = jsonSerializer;
_fileSystem = fileSystem;
@@ -49,7 +52,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
Current = this;
}
- public string Name => "TheMovieDb";
+ public string Name => TmdbUtils.ProviderName;
public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SeriesInfo searchInfo, CancellationToken cancellationToken)
{
@@ -63,24 +66,24 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
var dataFilePath = GetDataFilePath(tmdbId, searchInfo.MetadataLanguage);
- var obj = _jsonSerializer.DeserializeFromFile<RootObject>(dataFilePath);
+ var obj = _jsonSerializer.DeserializeFromFile<SeriesResult>(dataFilePath);
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
var remoteResult = new RemoteSearchResult
{
- Name = obj.name,
+ Name = obj.Name,
SearchProviderName = Name,
- ImageUrl = string.IsNullOrWhiteSpace(obj.poster_path) ? null : tmdbImageUrl + obj.poster_path
+ ImageUrl = string.IsNullOrWhiteSpace(obj.Poster_Path) ? null : tmdbImageUrl + obj.Poster_Path
};
- remoteResult.SetProviderId(MetadataProviders.Tmdb, obj.id.ToString(_usCulture));
- remoteResult.SetProviderId(MetadataProviders.Imdb, obj.external_ids.imdb_id);
+ remoteResult.SetProviderId(MetadataProviders.Tmdb, obj.Id.ToString(_usCulture));
+ remoteResult.SetProviderId(MetadataProviders.Imdb, obj.External_Ids.Imdb_Id);
- if (obj.external_ids.tvdb_id > 0)
+ if (obj.External_Ids.Tvdb_Id > 0)
{
- remoteResult.SetProviderId(MetadataProviders.Tvdb, obj.external_ids.tvdb_id.ToString(_usCulture));
+ remoteResult.SetProviderId(MetadataProviders.Tvdb, obj.External_Ids.Tvdb_Id.ToString(_usCulture));
}
return new[] { remoteResult };
@@ -110,7 +113,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
}
}
- return await new MovieDbSearch(_logger, _jsonSerializer, _libraryManager).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
+ return await new TmdbSearch(_logger, _jsonSerializer, _libraryManager).GetSearchResults(searchInfo, cancellationToken).ConfigureAwait(false);
}
public async Task<MetadataResult<Series>> GetMetadata(SeriesInfo info, CancellationToken cancellationToken)
@@ -153,7 +156,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
if (string.IsNullOrEmpty(tmdbId))
{
result.QueriedById = false;
- var searchResults = await new MovieDbSearch(_logger, _jsonSerializer, _libraryManager).GetSearchResults(info, cancellationToken).ConfigureAwait(false);
+ var searchResults = await new TmdbSearch(_logger, _jsonSerializer, _libraryManager).GetSearchResults(info, cancellationToken).ConfigureAwait(false);
var searchResult = searchResults.FirstOrDefault();
@@ -177,14 +180,14 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
private async Task<MetadataResult<Series>> FetchMovieData(string tmdbId, string language, string preferredCountryCode, CancellationToken cancellationToken)
{
- RootObject seriesInfo = await FetchMainResult(tmdbId, language, cancellationToken).ConfigureAwait(false);
+ SeriesResult seriesInfo = await FetchMainResult(tmdbId, language, cancellationToken).ConfigureAwait(false);
if (seriesInfo == null)
{
return null;
}
- tmdbId = seriesInfo.id.ToString(_usCulture);
+ tmdbId = seriesInfo.Id.ToString(_usCulture);
string dataFilePath = GetDataFilePath(tmdbId, language);
Directory.CreateDirectory(Path.GetDirectoryName(dataFilePath));
@@ -196,102 +199,102 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
result.Item = new Series();
result.ResultLanguage = seriesInfo.ResultLanguage;
- var settings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var settings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
ProcessMainInfo(result, seriesInfo, preferredCountryCode, settings);
return result;
}
- private void ProcessMainInfo(MetadataResult<Series> seriesResult, RootObject seriesInfo, string preferredCountryCode, TmdbSettingsResult settings)
+ private void ProcessMainInfo(MetadataResult<Series> seriesResult, SeriesResult seriesInfo, string preferredCountryCode, TmdbSettingsResult settings)
{
var series = seriesResult.Item;
- series.Name = seriesInfo.name;
- series.SetProviderId(MetadataProviders.Tmdb, seriesInfo.id.ToString(_usCulture));
+ series.Name = seriesInfo.Name;
+ series.SetProviderId(MetadataProviders.Tmdb, seriesInfo.Id.ToString(_usCulture));
//series.VoteCount = seriesInfo.vote_count;
- string voteAvg = seriesInfo.vote_average.ToString(CultureInfo.InvariantCulture);
+ string voteAvg = seriesInfo.Vote_Average.ToString(CultureInfo.InvariantCulture);
if (float.TryParse(voteAvg, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out float rating))
{
series.CommunityRating = rating;
}
- series.Overview = seriesInfo.overview;
+ series.Overview = seriesInfo.Overview;
- if (seriesInfo.networks != null)
+ if (seriesInfo.Networks != null)
{
- series.Studios = seriesInfo.networks.Select(i => i.name).ToArray();
+ series.Studios = seriesInfo.Networks.Select(i => i.Name).ToArray();
}
- if (seriesInfo.genres != null)
+ if (seriesInfo.Genres != null)
{
- series.Genres = seriesInfo.genres.Select(i => i.name).ToArray();
+ series.Genres = seriesInfo.Genres.Select(i => i.Name).ToArray();
}
//series.HomePageUrl = seriesInfo.homepage;
- series.RunTimeTicks = seriesInfo.episode_run_time.Select(i => TimeSpan.FromMinutes(i).Ticks).FirstOrDefault();
+ series.RunTimeTicks = seriesInfo.Episode_Run_Time.Select(i => TimeSpan.FromMinutes(i).Ticks).FirstOrDefault();
- if (string.Equals(seriesInfo.status, "Ended", StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(seriesInfo.Status, "Ended", StringComparison.OrdinalIgnoreCase))
{
series.Status = SeriesStatus.Ended;
- series.EndDate = seriesInfo.last_air_date;
+ series.EndDate = seriesInfo.Last_Air_Date;
}
else
{
series.Status = SeriesStatus.Continuing;
}
- series.PremiereDate = seriesInfo.first_air_date;
+ series.PremiereDate = seriesInfo.First_Air_Date;
- var ids = seriesInfo.external_ids;
+ var ids = seriesInfo.External_Ids;
if (ids != null)
{
- if (!string.IsNullOrWhiteSpace(ids.imdb_id))
+ if (!string.IsNullOrWhiteSpace(ids.Imdb_Id))
{
- series.SetProviderId(MetadataProviders.Imdb, ids.imdb_id);
+ series.SetProviderId(MetadataProviders.Imdb, ids.Imdb_Id);
}
- if (ids.tvrage_id > 0)
+ if (ids.Tvrage_Id > 0)
{
- series.SetProviderId(MetadataProviders.TvRage, ids.tvrage_id.ToString(_usCulture));
+ series.SetProviderId(MetadataProviders.TvRage, ids.Tvrage_Id.ToString(_usCulture));
}
- if (ids.tvdb_id > 0)
+ if (ids.Tvdb_Id > 0)
{
- series.SetProviderId(MetadataProviders.Tvdb, ids.tvdb_id.ToString(_usCulture));
+ series.SetProviderId(MetadataProviders.Tvdb, ids.Tvdb_Id.ToString(_usCulture));
}
}
- var contentRatings = (seriesInfo.content_ratings ?? new ContentRatings()).results ?? new List<ContentRating>();
+ var contentRatings = (seriesInfo.Content_Ratings ?? new ContentRatings()).Results ?? new List<ContentRating>();
- var ourRelease = contentRatings.FirstOrDefault(c => string.Equals(c.iso_3166_1, preferredCountryCode, StringComparison.OrdinalIgnoreCase));
- var usRelease = contentRatings.FirstOrDefault(c => string.Equals(c.iso_3166_1, "US", StringComparison.OrdinalIgnoreCase));
+ var ourRelease = contentRatings.FirstOrDefault(c => string.Equals(c.Iso_3166_1, preferredCountryCode, StringComparison.OrdinalIgnoreCase));
+ var usRelease = contentRatings.FirstOrDefault(c => string.Equals(c.Iso_3166_1, "US", StringComparison.OrdinalIgnoreCase));
var minimumRelease = contentRatings.FirstOrDefault();
if (ourRelease != null)
{
- series.OfficialRating = ourRelease.rating;
+ series.OfficialRating = ourRelease.Rating;
}
else if (usRelease != null)
{
- series.OfficialRating = usRelease.rating;
+ series.OfficialRating = usRelease.Rating;
}
else if (minimumRelease != null)
{
- series.OfficialRating = minimumRelease.rating;
+ series.OfficialRating = minimumRelease.Rating;
}
- if (seriesInfo.videos != null && seriesInfo.videos.results != null)
+ if (seriesInfo.Videos != null && seriesInfo.Videos.Results != null)
{
- foreach (var video in seriesInfo.videos.results)
+ foreach (var video in seriesInfo.Videos.Results)
{
- if ((video.type.Equals("trailer", StringComparison.OrdinalIgnoreCase)
- || video.type.Equals("clip", StringComparison.OrdinalIgnoreCase))
- && video.site.Equals("youtube", StringComparison.OrdinalIgnoreCase))
+ if ((video.Type.Equals("trailer", StringComparison.OrdinalIgnoreCase)
+ || video.Type.Equals("clip", StringComparison.OrdinalIgnoreCase))
+ && video.Site.Equals("youtube", StringComparison.OrdinalIgnoreCase))
{
- series.AddTrailerUrl($"http://www.youtube.com/watch?v={video.key}");
+ series.AddTrailerUrl($"http://www.youtube.com/watch?v={video.Key}");
}
}
}
@@ -299,26 +302,26 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
seriesResult.ResetPeople();
var tmdbImageUrl = settings.images.GetImageUrl("original");
- if (seriesInfo.credits != null && seriesInfo.credits.cast != null)
+ if (seriesInfo.Credits != null && seriesInfo.Credits.Cast != null)
{
- foreach (var actor in seriesInfo.credits.cast.OrderBy(a => a.order))
+ foreach (var actor in seriesInfo.Credits.Cast.OrderBy(a => a.Order))
{
var personInfo = new PersonInfo
{
- Name = actor.name.Trim(),
- Role = actor.character,
+ Name = actor.Name.Trim(),
+ Role = actor.Character,
Type = PersonType.Actor,
- SortOrder = actor.order
+ SortOrder = actor.Order
};
- if (!string.IsNullOrWhiteSpace(actor.profile_path))
+ if (!string.IsNullOrWhiteSpace(actor.Profile_Path))
{
- personInfo.ImageUrl = tmdbImageUrl + actor.profile_path;
+ personInfo.ImageUrl = tmdbImageUrl + actor.Profile_Path;
}
- if (actor.id > 0)
+ if (actor.Id > 0)
{
- personInfo.SetProviderId(MetadataProviders.Tmdb, actor.id.ToString(CultureInfo.InvariantCulture));
+ personInfo.SetProviderId(MetadataProviders.Tmdb, actor.Id.ToString(CultureInfo.InvariantCulture));
}
seriesResult.AddPerson(personInfo);
@@ -342,7 +345,7 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
internal async Task DownloadSeriesInfo(string id, string preferredMetadataLanguage, CancellationToken cancellationToken)
{
- RootObject mainResult = await FetchMainResult(id, preferredMetadataLanguage, cancellationToken).ConfigureAwait(false);
+ SeriesResult mainResult = await FetchMainResult(id, preferredMetadataLanguage, cancellationToken).ConfigureAwait(false);
if (mainResult == null)
{
@@ -356,31 +359,31 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
_jsonSerializer.SerializeToFile(mainResult, dataFilePath);
}
- internal async Task<RootObject> FetchMainResult(string id, string language, CancellationToken cancellationToken)
+ internal async Task<SeriesResult> FetchMainResult(string id, string language, CancellationToken cancellationToken)
{
- var url = string.Format(GetTvInfo3, id, MovieDbProvider.ApiKey);
+ var url = string.Format(GetTvInfo3, id, TmdbUtils.ApiKey);
if (!string.IsNullOrEmpty(language))
{
- url += "&language=" + MovieDbProvider.NormalizeLanguage(language)
- + "&include_image_language=" + MovieDbProvider.GetImageLanguagesParam(language); // Get images in english and with no language
+ url += "&language=" + TmdbMovieProvider.NormalizeLanguage(language)
+ + "&include_image_language=" + TmdbMovieProvider.GetImageLanguagesParam(language); // Get images in english and with no language
}
cancellationToken.ThrowIfCancellationRequested();
- RootObject mainResult;
+ SeriesResult mainResult;
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- mainResult = await _jsonSerializer.DeserializeFromStreamAsync<RootObject>(json).ConfigureAwait(false);
+ mainResult = await _jsonSerializer.DeserializeFromStreamAsync<SeriesResult>(json).ConfigureAwait(false);
if (!string.IsNullOrEmpty(language))
{
@@ -393,33 +396,33 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
// If the language preference isn't english, then have the overview fallback to english if it's blank
if (mainResult != null &&
- string.IsNullOrEmpty(mainResult.overview) &&
+ string.IsNullOrEmpty(mainResult.Overview) &&
!string.IsNullOrEmpty(language) &&
!string.Equals(language, "en", StringComparison.OrdinalIgnoreCase))
{
_logger.LogInformation("MovieDbSeriesProvider couldn't find meta for language {Language}. Trying English...", language);
- url = string.Format(GetTvInfo3, id, MovieDbProvider.ApiKey) + "&language=en";
+ url = string.Format(GetTvInfo3, id, TmdbUtils.ApiKey) + "&language=en";
if (!string.IsNullOrEmpty(language))
{
// Get images in english and with no language
- url += "&include_image_language=" + MovieDbProvider.GetImageLanguagesParam(language);
+ url += "&include_image_language=" + TmdbMovieProvider.GetImageLanguagesParam(language);
}
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- var englishResult = await _jsonSerializer.DeserializeFromStreamAsync<RootObject>(json).ConfigureAwait(false);
+ var englishResult = await _jsonSerializer.DeserializeFromStreamAsync<SeriesResult>(json).ConfigureAwait(false);
- mainResult.overview = englishResult.overview;
+ mainResult.Overview = englishResult.Overview;
mainResult.ResultLanguage = "en";
}
}
@@ -467,40 +470,40 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
private async Task<RemoteSearchResult> FindByExternalId(string id, string externalSource, CancellationToken cancellationToken)
{
- var url = string.Format(MovieDbProvider.BaseMovieDbUrl + @"3/find/{0}?api_key={1}&external_source={2}",
+ var url = string.Format(TmdbUtils.BaseTmdbApiUrl + @"3/find/{0}?api_key={1}&external_source={2}",
id,
- MovieDbProvider.ApiKey,
+ TmdbUtils.ApiKey,
externalSource);
- using (var response = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
+ using (var response = await TmdbMovieProvider.Current.GetMovieDbResponse(new HttpRequestOptions
{
Url = url,
CancellationToken = cancellationToken,
- AcceptHeader = MovieDbProvider.AcceptHeader
+ AcceptHeader = TmdbUtils.AcceptHeader
}).ConfigureAwait(false))
{
using (var json = response.Content)
{
- var result = await _jsonSerializer.DeserializeFromStreamAsync<MovieDbSearch.ExternalIdLookupResult>(json).ConfigureAwait(false);
+ var result = await _jsonSerializer.DeserializeFromStreamAsync<ExternalIdLookupResult>(json).ConfigureAwait(false);
- if (result != null && result.tv_results != null)
+ if (result != null && result.Tv_Results != null)
{
- var tv = result.tv_results.FirstOrDefault();
+ var tv = result.Tv_Results.FirstOrDefault();
if (tv != null)
{
- var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
+ var tmdbSettings = await TmdbMovieProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false);
var tmdbImageUrl = tmdbSettings.images.GetImageUrl("original");
var remoteResult = new RemoteSearchResult
{
- Name = tv.name,
+ Name = tv.Name,
SearchProviderName = Name,
- ImageUrl = string.IsNullOrWhiteSpace(tv.poster_path) ? null : tmdbImageUrl + tv.poster_path
+ ImageUrl = string.IsNullOrWhiteSpace(tv.Poster_Path) ? null : tmdbImageUrl + tv.Poster_Path
};
- remoteResult.SetProviderId(MetadataProviders.Tmdb, tv.id.ToString(_usCulture));
+ remoteResult.SetProviderId(MetadataProviders.Tmdb, tv.Id.ToString(_usCulture));
return remoteResult;
}
@@ -511,163 +514,6 @@ namespace MediaBrowser.Providers.TV.TheMovieDb
return null;
}
- public class CreatedBy
- {
- public int id { get; set; }
- public string name { get; set; }
- public string profile_path { get; set; }
- }
-
- public class Genre
- {
- public int id { get; set; }
- public string name { get; set; }
- }
-
- public class Network
- {
- public int id { get; set; }
- public string name { get; set; }
- }
-
- public class Season
- {
- public string air_date { get; set; }
- public int episode_count { get; set; }
- public int id { get; set; }
- public string poster_path { get; set; }
- public int season_number { get; set; }
- }
-
- public class Cast
- {
- public string character { get; set; }
- public string credit_id { get; set; }
- public int id { get; set; }
- public string name { get; set; }
- public string profile_path { get; set; }
- public int order { get; set; }
- }
-
- public class Crew
- {
- public string credit_id { get; set; }
- public string department { get; set; }
- public int id { get; set; }
- public string name { get; set; }
- public string job { get; set; }
- public string profile_path { get; set; }
- }
-
- public class Credits
- {
- public List<Cast> cast { get; set; }
- public List<Crew> crew { get; set; }
- }
-
- public class Backdrop
- {
- public double aspect_ratio { get; set; }
- public string file_path { get; set; }
- public int height { get; set; }
- public string iso_639_1 { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public int width { get; set; }
- }
-
- public class Poster
- {
- public double aspect_ratio { get; set; }
- public string file_path { get; set; }
- public int height { get; set; }
- public string iso_639_1 { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public int width { get; set; }
- }
-
- public class Images
- {
- public List<Backdrop> backdrops { get; set; }
- public List<Poster> posters { get; set; }
- }
-
- public class Keywords
- {
- public List<object> results { get; set; }
- }
-
- public class ExternalIds
- {
- public string imdb_id { get; set; }
- public string freebase_id { get; set; }
- public string freebase_mid { get; set; }
- public int tvdb_id { get; set; }
- public int tvrage_id { get; set; }
- }
-
- public class Videos
- {
- public List<Video> results { get; set; }
- }
-
- public class Video
- {
- public string id { get; set; }
- public string iso_639_1 { get; set; }
- public string iso_3166_1 { get; set; }
- public string key { get; set; }
- public string name { get; set; }
- public string site { get; set; }
- public string size { get; set; }
- public string type { get; set; }
- }
-
- public class ContentRating
- {
- public string iso_3166_1 { get; set; }
- public string rating { get; set; }
- }
-
- public class ContentRatings
- {
- public List<ContentRating> results { get; set; }
- }
-
- public class RootObject
- {
- public string backdrop_path { get; set; }
- public List<CreatedBy> created_by { get; set; }
- public List<int> episode_run_time { get; set; }
- public DateTime first_air_date { get; set; }
- public List<Genre> genres { get; set; }
- public string homepage { get; set; }
- public int id { get; set; }
- public bool in_production { get; set; }
- public List<string> languages { get; set; }
- public DateTime last_air_date { get; set; }
- public string name { get; set; }
- public List<Network> networks { get; set; }
- public int number_of_episodes { get; set; }
- public int number_of_seasons { get; set; }
- public string original_name { get; set; }
- public List<string> origin_country { get; set; }
- public string overview { get; set; }
- public string popularity { get; set; }
- public string poster_path { get; set; }
- public List<Season> seasons { get; set; }
- public string status { get; set; }
- public double vote_average { get; set; }
- public int vote_count { get; set; }
- public Credits credits { get; set; }
- public Images images { get; set; }
- public Keywords keywords { get; set; }
- public ExternalIds external_ids { get; set; }
- public Videos videos { get; set; }
- public ContentRatings content_ratings { get; set; }
- public string ResultLanguage { get; set; }
- }
// After TheTVDB
public int Order => 1;
diff --git a/MediaBrowser.Providers/Tmdb/TmdbUtils.cs b/MediaBrowser.Providers/Tmdb/TmdbUtils.cs
new file mode 100644
index 000000000..035b99c1a
--- /dev/null
+++ b/MediaBrowser.Providers/Tmdb/TmdbUtils.cs
@@ -0,0 +1,31 @@
+using System;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Providers.Tmdb.Models.General;
+
+namespace MediaBrowser.Providers.Tmdb
+{
+ public static class TmdbUtils
+ {
+ public const string BaseTmdbUrl = "https://www.themoviedb.org/";
+ public const string BaseTmdbApiUrl = "https://api.themoviedb.org/";
+ public const string ProviderName = "TheMovieDb";
+ public const string ApiKey = "4219e299c89411838049ab0dab19ebd5";
+ public const string AcceptHeader = "application/json,image/*";
+
+ public static string MapCrewToPersonType(Crew crew)
+ {
+ if (crew.Department.Equals("production", StringComparison.InvariantCultureIgnoreCase)
+ && crew.Job.IndexOf("producer", StringComparison.InvariantCultureIgnoreCase) != -1)
+ {
+ return PersonType.Producer;
+ }
+
+ if (crew.Department.Equals("writing", StringComparison.InvariantCultureIgnoreCase))
+ {
+ return PersonType.Writer;
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs b/MediaBrowser.Providers/Tmdb/Trailers/TmdbTrailerProvider.cs
index 2a3cdf097..b0dec0245 100644
--- a/MediaBrowser.Providers/Movies/MovieDbTrailerProvider.cs
+++ b/MediaBrowser.Providers/Tmdb/Trailers/TmdbTrailerProvider.cs
@@ -5,29 +5,31 @@ using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Providers;
+using MediaBrowser.Providers.Movies;
+using MediaBrowser.Providers.Tmdb.Movies;
-namespace MediaBrowser.Providers.Movies
+namespace MediaBrowser.Providers.Tmdb.Trailers
{
- public class MovieDbTrailerProvider : IHasOrder, IRemoteMetadataProvider<Trailer, TrailerInfo>
+ public class TmdbTrailerProvider : IHasOrder, IRemoteMetadataProvider<Trailer, TrailerInfo>
{
private readonly IHttpClient _httpClient;
- public MovieDbTrailerProvider(IHttpClient httpClient)
+ public TmdbTrailerProvider(IHttpClient httpClient)
{
_httpClient = httpClient;
}
public Task<IEnumerable<RemoteSearchResult>> GetSearchResults(TrailerInfo searchInfo, CancellationToken cancellationToken)
{
- return MovieDbProvider.Current.GetMovieSearchResults(searchInfo, cancellationToken);
+ return TmdbMovieProvider.Current.GetMovieSearchResults(searchInfo, cancellationToken);
}
public Task<MetadataResult<Trailer>> GetMetadata(TrailerInfo info, CancellationToken cancellationToken)
{
- return MovieDbProvider.Current.GetItemMetadata<Trailer>(info, cancellationToken);
+ return TmdbMovieProvider.Current.GetItemMetadata<Trailer>(info, cancellationToken);
}
- public string Name => MovieDbProvider.Current.Name;
+ public string Name => TmdbMovieProvider.Current.Name;
public int Order => 0;