diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-30 17:33:27 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-30 17:33:27 -0400 |
| commit | 524150331c1811e8ced5ff8444e0d0197bc6419a (patch) | |
| tree | de08c6d40aa77e2c0ddbc0e8246ab85d3d0b9c90 /MediaBrowser.Providers | |
| parent | 2f99b2e1e60f7a36c7f9c420c07fb608bb231fbf (diff) | |
beginning manual image providers
Diffstat (limited to 'MediaBrowser.Providers')
3 files changed, 153 insertions, 41 deletions
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 63bd8c9534..7a8975937d 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -60,6 +60,7 @@ <Compile Include="MediaInfo\FFProbeVideoInfoProvider.cs" /> <Compile Include="MediaInfo\VideoImageProvider.cs" /> <Compile Include="Movies\BoxSetProviderFromXml.cs" /> + <Compile Include="Movies\ManualMovieDbImageProvider.cs" /> <Compile Include="Movies\MovieUpdatesPrescanTask.cs" /> <Compile Include="Movies\MovieXmlParser.cs" /> <Compile Include="Movies\FanArtMovieProvider.cs" /> diff --git a/MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs b/MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs new file mode 100644 index 0000000000..39b7fa6c67 --- /dev/null +++ b/MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs @@ -0,0 +1,133 @@ +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Providers; +using MediaBrowser.Model.Serialization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Providers.Movies +{ + class ManualMovieDbImageProvider : IImageProvider + { + private readonly IJsonSerializer _jsonSerializer; + private readonly IServerConfigurationManager _config; + + public ManualMovieDbImageProvider(IJsonSerializer jsonSerializer, IServerConfigurationManager config) + { + _jsonSerializer = jsonSerializer; + _config = config; + } + + public string Name + { + get { return "TheMovieDB"; } + } + + public bool Supports(BaseItem item, ImageType imageType) + { + if (MovieDbImagesProvider.SupportsItem(item)) + { + return imageType == ImageType.Primary || imageType == ImageType.Backdrop; + } + + return false; + } + + public async Task<IEnumerable<RemoteImageInfo>> GetAvailableImages(BaseItem item, ImageType imageType, CancellationToken cancellationToken) + { + var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); + + var results = MovieDbImagesProvider.FetchImages(item, _jsonSerializer); + + var tmdbImageUrl = tmdbSettings.images.base_url + "original"; + + if (imageType == ImageType.Primary) + { + var sources = GetPosters(results, item); + + return sources.Select(i => new RemoteImageInfo + { + Url = tmdbImageUrl + i.file_path, + CommunityRating = i.vote_average, + VoteCount = i.vote_count, + Width = i.width, + Height = i.height, + Language = i.iso_639_1, + ProviderName = Name + }); + } + + if (imageType == ImageType.Backdrop) + { + var sources = GetBackdrops(results, item); + + return sources.Select(i => new RemoteImageInfo + { + Url = tmdbImageUrl + i.file_path, + CommunityRating = i.vote_average, + VoteCount = i.vote_count, + Width = i.width, + Height = i.height, + ProviderName = Name + }); + } + + throw new ArgumentException("Unrecognized ImageType: " + imageType); + } + + /// <summary> + /// Gets the posters. + /// </summary> + /// <param name="images">The images.</param> + /// <param name="item">The item.</param> + /// <returns>IEnumerable{MovieDbProvider.Poster}.</returns> + public IEnumerable<MovieDbProvider.Poster> GetPosters(MovieDbProvider.Images images, BaseItem item) + { + var language = _config.Configuration.PreferredMetadataLanguage; + + var eligiblePosters = images.posters == null ? + new List<MovieDbProvider.Poster>() : + images.posters.Where(i => i.width >= _config.Configuration.MinMoviePosterWidth) + .ToList(); + + return eligiblePosters.OrderByDescending(i => i.vote_average) + .ThenByDescending(i => + { + if (string.Equals(language, i.iso_639_1, StringComparison.OrdinalIgnoreCase)) + { + return 3; + } + if (string.Equals("en", i.iso_639_1, StringComparison.OrdinalIgnoreCase)) + { + return 2; + } + if (string.IsNullOrEmpty(i.iso_639_1)) + { + return 1; + } + return 0; + }) + .ToList(); + } + + /// <summary> + /// Gets the backdrops. + /// </summary> + /// <param name="images">The images.</param> + /// <param name="item">The item.</param> + /// <returns>IEnumerable{MovieDbProvider.Backdrop}.</returns> + public IEnumerable<MovieDbProvider.Backdrop> GetBackdrops(MovieDbProvider.Images images, BaseItem item) + { + var eligibleBackdrops = images.backdrops == null ? new List<MovieDbProvider.Backdrop>() : + images.backdrops.Where(i => i.width >= _config.Configuration.MinMovieBackdropWidth) + .ToList(); + + return eligibleBackdrops.OrderByDescending(i => i.vote_average); + } + } +} diff --git a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs index 52e6c214f9..0fd61a96be 100644 --- a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs @@ -66,6 +66,11 @@ namespace MediaBrowser.Providers.Movies /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns> public override bool Supports(BaseItem item) { + return SupportsItem(item); + } + + public static bool SupportsItem(BaseItem item) + { var trailer = item as Trailer; if (trailer != null) @@ -180,7 +185,7 @@ namespace MediaBrowser.Providers.Movies if (!string.IsNullOrEmpty(id)) { - var images = FetchImages(item); + var images = FetchImages(item, _jsonSerializer); if (images != null) { @@ -196,8 +201,9 @@ namespace MediaBrowser.Providers.Movies /// Fetches the images. /// </summary> /// <param name="item">The item.</param> + /// <param name="jsonSerializer">The json serializer.</param> /// <returns>Task{MovieImages}.</returns> - private MovieDbProvider.Images FetchImages(BaseItem item) + internal static MovieDbProvider.Images FetchImages(BaseItem item, IJsonSerializer jsonSerializer) { var path = MovieDbProvider.Current.GetDataFilePath(item, "default"); @@ -207,7 +213,7 @@ namespace MediaBrowser.Providers.Movies if (fileInfo.Exists) { - return _jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(path).images; + return jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(path).images; } } @@ -227,13 +233,9 @@ namespace MediaBrowser.Providers.Movies var status = ProviderRefreshStatus.Success; - var eligiblePosters = images.posters == null ? - new List<MovieDbProvider.Poster>() : - images.posters.Where(i => i.width >= ConfigurationManager.Configuration.MinMoviePosterWidth) + var eligiblePosters = new ManualMovieDbImageProvider(_jsonSerializer, ConfigurationManager).GetPosters(images, item) .ToList(); - eligiblePosters = eligiblePosters.OrderByDescending(i => i.vote_average).ToList(); - // poster if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary)) { @@ -242,48 +244,24 @@ namespace MediaBrowser.Providers.Movies var tmdbImageUrl = tmdbSettings.images.base_url + "original"; // get highest rated poster for our language - var poster = eligiblePosters.FirstOrDefault(p => string.Equals(p.iso_639_1, ConfigurationManager.Configuration.PreferredMetadataLanguage, StringComparison.OrdinalIgnoreCase)); - - if (poster == null) - { - // couldn't find our specific language, find english - poster = eligiblePosters.FirstOrDefault(p => string.Equals(p.iso_639_1, "en", StringComparison.OrdinalIgnoreCase)); - } - - if (poster == null) - { - //still couldn't find it - try highest rated null one - poster = eligiblePosters.FirstOrDefault(p => p.iso_639_1 == null); - } + var poster = eligiblePosters[0]; - if (poster == null) - { - //finally - just get the highest rated one - poster = eligiblePosters.FirstOrDefault(); - } + var url = tmdbImageUrl + poster.file_path; - if (poster != null) + var img = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { - var url = tmdbImageUrl + poster.file_path; + Url = url, + CancellationToken = cancellationToken - var img = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions - { - Url = url, - CancellationToken = cancellationToken + }).ConfigureAwait(false); - }).ConfigureAwait(false); - - await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(poster.file_path), ImageType.Primary, null, url, cancellationToken) - .ConfigureAwait(false); - - } + await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(poster.file_path), ImageType.Primary, null, url, cancellationToken) + .ConfigureAwait(false); } cancellationToken.ThrowIfCancellationRequested(); - var eligibleBackdrops = images.backdrops == null ? new List<MovieDbProvider.Backdrop>() : - images.backdrops.Where(i => i.width >= ConfigurationManager.Configuration.MinMovieBackdropWidth) - .ToList(); + var eligibleBackdrops = new ManualMovieDbImageProvider(_jsonSerializer, ConfigurationManager).GetBackdrops(images, item).ToList(); var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops; |
