diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index ab4759c61e..c8089d6f5c 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -24,4 +24,9 @@
true
+
+
+ latest
+
+
diff --git a/MediaBrowser.Providers/Movies/MovieExternalIds.cs b/MediaBrowser.Providers/Movies/MovieExternalIds.cs
index 3783c50324..09ed6034c8 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 0000000000..187295e1e4
--- /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
+ {
+ ///
+ public string Name => TmdbUtils.ProviderName;
+
+ ///
+ public string Key => MetadataProviders.TmdbCollection.ToString();
+
+ ///
+ public string UrlFormatString => TmdbUtils.BaseTmdbUrl + "collection/{0}";
+
+ ///
+ 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
similarity index 67%
rename from MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs
rename to MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetImageProvider.cs
index 4d12b2f4ab..5db0edac2a 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();
}
- private IEnumerable GetImages(MovieDbBoxSetProvider.RootObject obj, string language, string baseUrl)
+ private IEnumerable GetImages(CollectionResult obj, string language, string baseUrl)
{
var list = new List();
- 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
///
/// The images.
/// IEnumerable{MovieDbProvider.Poster}.
- private IEnumerable GetPosters(MovieDbBoxSetProvider.Images images)
+ private IEnumerable GetPosters(CollectionImages images)
{
- return images.posters ?? new List();
+ return images.Posters ?? new List();
}
///
@@ -135,13 +138,13 @@ namespace MediaBrowser.Providers.BoxSets
///
/// The images.
/// IEnumerable{MovieDbProvider.Backdrop}.
- private IEnumerable GetBackdrops(MovieDbBoxSetProvider.Images images)
+ private IEnumerable GetBackdrops(CollectionImages images)
{
- var eligibleBackdrops = images.backdrops == null ? new List() :
- images.backdrops;
+ var eligibleBackdrops = images.Backdrops == null ? new List() :
+ 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
similarity index 63%
rename from MediaBrowser.Providers/BoxSets/MovieDbBoxSetProvider.cs
rename to MediaBrowser.Providers/Tmdb/BoxSets/TmdbBoxSetProvider.cs
index 4e41694c4d..a215177a9a 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
+ public class TmdbBoxSetProvider : IRemoteMetadataProvider
{
- 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(dataFilePath);
+ var info = _json.DeserializeFromFile(dataFilePath);
- var images = (info.images ?? new Images()).posters ?? new List();
+ var images = (info.Images ?? new CollectionImages()).Posters ?? new 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");
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> 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 GetMovieDbResult(string tmdbId, string language, CancellationToken cancellationToken)
+ internal async Task 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(dataFilePath);
+ return _json.DeserializeFromFile(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 FetchMainResult(string id, string language, CancellationToken cancellationToken)
+ private async Task 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(json).ConfigureAwait(false);
+ mainResult = await _json.DeserializeFromStreamAsync(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(json).ConfigureAwait(false);
+ mainResult = await _json.DeserializeFromStreamAsync(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 backdrops { get; set; }
- public List 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 parts { get; set; }
- public Images images { get; set; }
- }
-
public Task 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 0000000000..18f26c3977
--- /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 Backdrops { get; set; }
+ public List 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 0000000000..53d2599f84
--- /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 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 0000000000..ff19291c74
--- /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 0000000000..db4cd66816
--- /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 0000000000..47b9854030
--- /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 0000000000..37e37b0bed
--- /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 0000000000..9a6686d50d
--- /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 0000000000..f1c99537d1
--- /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 Backdrops { get; set; }
+ public List 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 0000000000..4e30113497
--- /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 0000000000..1950a51b3f
--- /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 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 0000000000..33401b15dc
--- /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 0000000000..73a049c732
--- /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 0000000000..15ff4a0991
--- /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 0000000000..266965c47e
--- /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 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 0000000000..fb69e77674
--- /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 0000000000..26812780da
--- /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