diff options
Diffstat (limited to 'MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs')
| -rw-r--r-- | MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs | 135 |
1 files changed, 31 insertions, 104 deletions
diff --git a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs index 52e6c214f..6c503ad3a 100644 --- a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Net; +using MediaBrowser.Common.IO; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; @@ -6,7 +7,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; -using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Providers; using System; using System.Collections.Generic; using System.IO; @@ -22,19 +23,11 @@ namespace MediaBrowser.Providers.Movies public class MovieDbImagesProvider : BaseMetadataProvider { /// <summary> - /// The get images - /// </summary> - private const string GetImages = @"http://api.themoviedb.org/3/{2}/{0}/images?api_key={1}"; - - /// <summary> /// The _provider manager /// </summary> private readonly IProviderManager _providerManager; - /// <summary> - /// The _json serializer - /// </summary> - private readonly IJsonSerializer _jsonSerializer; + private readonly IFileSystem _fileSystem; /// <summary> /// Initializes a new instance of the <see cref="MovieDbImagesProvider"/> class. @@ -42,12 +35,11 @@ namespace MediaBrowser.Providers.Movies /// <param name="logManager">The log manager.</param> /// <param name="configurationManager">The configuration manager.</param> /// <param name="providerManager">The provider manager.</param> - /// <param name="jsonSerializer">The json serializer.</param> - public MovieDbImagesProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager, IJsonSerializer jsonSerializer) + public MovieDbImagesProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager, IFileSystem fileSystem) : base(logManager, configurationManager) { _providerManager = providerManager; - _jsonSerializer = jsonSerializer; + _fileSystem = fileSystem; } /// <summary> @@ -66,6 +58,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) @@ -145,12 +142,7 @@ namespace MediaBrowser.Providers.Movies protected override bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo) { - if (string.IsNullOrEmpty(item.GetProviderId(MetadataProviders.Tmdb))) - { - return false; - } - - var path = MovieDbProvider.Current.GetDataFilePath(item, "default"); + var path = MovieDbProvider.Current.GetImagesDataFilePath(item); if (!string.IsNullOrEmpty(path)) { @@ -158,7 +150,7 @@ namespace MediaBrowser.Providers.Movies if (fileInfo.Exists) { - return fileInfo.LastWriteTimeUtc > providerInfo.LastRefreshed; + return _fileSystem.GetLastWriteTimeUtc(fileInfo) > providerInfo.LastRefreshed; } } @@ -176,113 +168,54 @@ namespace MediaBrowser.Providers.Movies { var id = item.GetProviderId(MetadataProviders.Tmdb); - var status = ProviderRefreshStatus.Success; - if (!string.IsNullOrEmpty(id)) { - var images = FetchImages(item); + var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbImageProvider.ProviderName).ConfigureAwait(false); - if (images != null) - { - status = await ProcessImages(item, images, cancellationToken).ConfigureAwait(false); - } + await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false); } - SetLastRefreshed(item, DateTime.UtcNow, status); + SetLastRefreshed(item, DateTime.UtcNow); return true; } /// <summary> - /// Fetches the images. - /// </summary> - /// <param name="item">The item.</param> - /// <returns>Task{MovieImages}.</returns> - private MovieDbProvider.Images FetchImages(BaseItem item) - { - var path = MovieDbProvider.Current.GetDataFilePath(item, "default"); - - if (!string.IsNullOrEmpty(path)) - { - var fileInfo = new FileInfo(path); - - if (fileInfo.Exists) - { - return _jsonSerializer.DeserializeFromFile<MovieDbProvider.CompleteMovieData>(path).images; - } - } - - return null; - } - - /// <summary> /// Processes the images. /// </summary> /// <param name="item">The item.</param> /// <param name="images">The images.</param> /// <param name="cancellationToken">The cancellation token</param> /// <returns>Task.</returns> - private async Task<ProviderRefreshStatus> ProcessImages(BaseItem item, MovieDbProvider.Images images, CancellationToken cancellationToken) + private async Task ProcessImages(BaseItem item, List<RemoteImageInfo> images, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); - var status = ProviderRefreshStatus.Success; - - var eligiblePosters = images.posters == null ? - new List<MovieDbProvider.Poster>() : - images.posters.Where(i => i.width >= ConfigurationManager.Configuration.MinMoviePosterWidth) + var eligiblePosters = images + .Where(i => i.Type == ImageType.Primary && i.Width.HasValue && i.Width.Value >= ConfigurationManager.Configuration.MinMoviePosterWidth) .ToList(); - eligiblePosters = eligiblePosters.OrderByDescending(i => i.vote_average).ToList(); - // poster if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary)) { - var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); - - var tmdbImageUrl = tmdbSettings.images.base_url + "original"; - // get highest rated poster for our language + var poster = eligiblePosters[0]; - var poster = eligiblePosters.FirstOrDefault(p => string.Equals(p.iso_639_1, ConfigurationManager.Configuration.PreferredMetadataLanguage, StringComparison.OrdinalIgnoreCase)); + var url = poster.Url; - if (poster == null) + var img = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { - // couldn't find our specific language, find english - poster = eligiblePosters.FirstOrDefault(p => string.Equals(p.iso_639_1, "en", StringComparison.OrdinalIgnoreCase)); - } + Url = url, + CancellationToken = cancellationToken - if (poster == null) - { - //still couldn't find it - try highest rated null one - poster = eligiblePosters.FirstOrDefault(p => p.iso_639_1 == null); - } + }).ConfigureAwait(false); - if (poster == null) - { - //finally - just get the highest rated one - poster = eligiblePosters.FirstOrDefault(); - } - - if (poster != null) - { - var url = tmdbImageUrl + poster.file_path; - - var img = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions - { - Url = url, - CancellationToken = cancellationToken - - }).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(url), 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) + var eligibleBackdrops = images + .Where(i => i.Type == ImageType.Backdrop && i.Width.HasValue && i.Width.Value >= ConfigurationManager.Configuration.MinMovieBackdropWidth) .ToList(); var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops; @@ -290,13 +223,9 @@ namespace MediaBrowser.Providers.Movies // backdrops - only download if earlier providers didn't find any (fanart) if (eligibleBackdrops.Count > 0 && ConfigurationManager.Configuration.DownloadMovieImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit) { - var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); - - var tmdbImageUrl = tmdbSettings.images.base_url + "original"; - for (var i = 0; i < eligibleBackdrops.Count; i++) { - var url = tmdbImageUrl + eligibleBackdrops[i].file_path; + var url = eligibleBackdrops[i].Url; if (!item.ContainsImageWithSourceUrl(url)) { @@ -307,7 +236,7 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false); - await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(eligibleBackdrops[i].file_path), ImageType.Backdrop, item.BackdropImagePaths.Count, url, cancellationToken) + await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(url), ImageType.Backdrop, item.BackdropImagePaths.Count, url, cancellationToken) .ConfigureAwait(false); } @@ -317,8 +246,6 @@ namespace MediaBrowser.Providers.Movies } } } - - return status; } } } |
