aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-10-30 17:33:27 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-10-30 17:33:27 -0400
commit524150331c1811e8ced5ff8444e0d0197bc6419a (patch)
treede08c6d40aa77e2c0ddbc0e8246ab85d3d0b9c90 /MediaBrowser.Providers
parent2f99b2e1e60f7a36c7f9c420c07fb608bb231fbf (diff)
beginning manual image providers
Diffstat (limited to 'MediaBrowser.Providers')
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj1
-rw-r--r--MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs133
-rw-r--r--MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs60
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;