diff --git a/MediaBrowser.Model/Providers/RemoteImageInfo.cs b/MediaBrowser.Model/Providers/RemoteImageInfo.cs index bb2a3cb69c..1a281f07d2 100644 --- a/MediaBrowser.Model/Providers/RemoteImageInfo.cs +++ b/MediaBrowser.Model/Providers/RemoteImageInfo.cs @@ -1,4 +1,6 @@  +using MediaBrowser.Model.Entities; + namespace MediaBrowser.Model.Providers { /// @@ -47,5 +49,11 @@ namespace MediaBrowser.Model.Providers /// /// The language. public string Language { get; set; } + + /// + /// Gets or sets the type. + /// + /// The type. + public ImageType Type { get; set; } } } diff --git a/MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs b/MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs index a8f847b79f..f84845af7d 100644 --- a/MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs +++ b/MediaBrowser.Providers/Movies/ManualMovieDbImageProvider.cs @@ -6,6 +6,7 @@ using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -40,44 +41,50 @@ namespace MediaBrowser.Providers.Movies public async Task> GetAvailableImages(BaseItem item, ImageType imageType, CancellationToken cancellationToken) { - var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); + var images = await GetAllImages(item, cancellationToken).ConfigureAwait(false); - var results = MovieDbImagesProvider.FetchImages(item, _jsonSerializer); + return images.Where(i => i.Type == imageType); + } - var tmdbImageUrl = tmdbSettings.images.base_url + "original"; + public async Task> GetAllImages(BaseItem item, CancellationToken cancellationToken) + { + var list = new List(); - if (imageType == ImageType.Primary) - { - var sources = GetPosters(results, item); + var results = FetchImages(item, _jsonSerializer); - 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 (results == null) + { + return list; } - if (imageType == ImageType.Backdrop) - { - var sources = GetBackdrops(results, item); + var tmdbSettings = await MovieDbProvider.Current.GetTmdbSettings(cancellationToken).ConfigureAwait(false); - 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 - }); - } + var tmdbImageUrl = tmdbSettings.images.base_url + "original"; - throw new ArgumentException("Unrecognized ImageType: " + imageType); + list.AddRange(GetPosters(results, item).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, + Type = ImageType.Primary + })); + + list.AddRange(GetBackdrops(results, item).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, + Type = ImageType.Backdrop + })); + + return list; } /// @@ -86,7 +93,7 @@ namespace MediaBrowser.Providers.Movies /// The images. /// The item. /// IEnumerable{MovieDbProvider.Poster}. - public IEnumerable GetPosters(MovieDbProvider.Images images, BaseItem item) + private IEnumerable GetPosters(MovieDbProvider.Images images, BaseItem item) { var language = _config.Configuration.PreferredMetadataLanguage; @@ -126,7 +133,7 @@ namespace MediaBrowser.Providers.Movies /// The images. /// The item. /// IEnumerable{MovieDbProvider.Backdrop}. - public IEnumerable GetBackdrops(MovieDbProvider.Images images, BaseItem item) + private IEnumerable GetBackdrops(MovieDbProvider.Images images, BaseItem item) { var eligibleBackdrops = images.backdrops == null ? new List() : images.backdrops.Where(i => i.width >= _config.Configuration.MinMovieBackdropWidth) @@ -134,5 +141,28 @@ namespace MediaBrowser.Providers.Movies return eligibleBackdrops.OrderByDescending(i => i.vote_average); } + + /// + /// Fetches the images. + /// + /// The item. + /// The json serializer. + /// Task{MovieImages}. + private MovieDbProvider.Images FetchImages(BaseItem item, IJsonSerializer jsonSerializer) + { + var path = MovieDbProvider.Current.GetDataFilePath(item, "default"); + + if (!string.IsNullOrEmpty(path)) + { + var fileInfo = new FileInfo(path); + + if (fileInfo.Exists) + { + return jsonSerializer.DeserializeFromFile(path).images; + } + } + + return null; + } } } diff --git a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs index f2504da9ab..e34cbc54f0 100644 --- a/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs @@ -7,6 +7,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Providers; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; @@ -152,7 +153,7 @@ namespace MediaBrowser.Providers.Movies { return false; } - + var path = MovieDbProvider.Current.GetDataFilePath(item, "default"); if (!string.IsNullOrEmpty(path)) @@ -179,45 +180,18 @@ namespace MediaBrowser.Providers.Movies { var id = item.GetProviderId(MetadataProviders.Tmdb); - var status = ProviderRefreshStatus.Success; - if (!string.IsNullOrEmpty(id)) { - var images = FetchImages(item, _jsonSerializer); + var images = await new ManualMovieDbImageProvider(_jsonSerializer, ConfigurationManager).GetAllImages(item, + cancellationToken).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; } - /// - /// Fetches the images. - /// - /// The item. - /// The json serializer. - /// Task{MovieImages}. - internal static MovieDbProvider.Images FetchImages(BaseItem item, IJsonSerializer jsonSerializer) - { - var path = MovieDbProvider.Current.GetDataFilePath(item, "default"); - - if (!string.IsNullOrEmpty(path)) - { - var fileInfo = new FileInfo(path); - - if (fileInfo.Exists) - { - return jsonSerializer.DeserializeFromFile(path).images; - } - } - - return null; - } - /// /// Processes the images. /// @@ -225,26 +199,20 @@ namespace MediaBrowser.Providers.Movies /// The images. /// The cancellation token /// Task. - private async Task ProcessImages(BaseItem item, MovieDbProvider.Images images, CancellationToken cancellationToken) + private async Task ProcessImages(BaseItem item, List images, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); - var status = ProviderRefreshStatus.Success; - - var eligiblePosters = new ManualMovieDbImageProvider(_jsonSerializer, ConfigurationManager).GetPosters(images, item) + var eligiblePosters = images + .Where(i => i.Type == ImageType.Primary) .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 url = tmdbImageUrl + poster.file_path; + var url = poster.Url; var img = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions { @@ -253,26 +221,24 @@ namespace MediaBrowser.Providers.Movies }).ConfigureAwait(false); - await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(poster.file_path), ImageType.Primary, null, url, cancellationToken) + await _providerManager.SaveImage(item, img, MimeTypes.GetMimeType(url), ImageType.Primary, null, url, cancellationToken) .ConfigureAwait(false); } cancellationToken.ThrowIfCancellationRequested(); - var eligibleBackdrops = new ManualMovieDbImageProvider(_jsonSerializer, ConfigurationManager).GetBackdrops(images, item).ToList(); + var eligibleBackdrops = images + .Where(i => i.Type == ImageType.Backdrop) + .ToList(); var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops; // 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)) { @@ -283,7 +249,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); } @@ -293,8 +259,6 @@ namespace MediaBrowser.Providers.Movies } } } - - return status; } } } diff --git a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs index 52f5ddab5c..7c38eb97b8 100644 --- a/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs +++ b/MediaBrowser.Providers/Movies/TmdbPersonProvider.cs @@ -4,7 +4,6 @@ using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; diff --git a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs index 6e99edb126..22ff917618 100644 --- a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs +++ b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs @@ -39,6 +39,13 @@ namespace MediaBrowser.Providers.TV private async Task RunInternal(IProgress progress, CancellationToken cancellationToken) { + if (!_config.Configuration.EnableInternetProviders || + _config.Configuration.InternetProviderExcludeTypes.Contains(typeof(Series).Name, StringComparer.OrdinalIgnoreCase)) + { + progress.Report(100); + return; + } + var seriesList = _libraryManager.RootFolder .RecursiveChildren .OfType() @@ -136,21 +143,27 @@ namespace MediaBrowser.Providers.TV .Where(i => i.Item1 != -1 && i.Item2 != -1) .ToList(); - var anySeasonsRemoved = await RemoveObsoleteOrMissingSeasons(series, episodeLookup, cancellationToken).ConfigureAwait(false); + var anySeasonsRemoved = await RemoveObsoleteOrMissingSeasons(series, episodeLookup, cancellationToken) + .ConfigureAwait(false); - var anyEpisodesRemoved = await RemoveObsoleteOrMissingEpisodes(series, episodeLookup, cancellationToken).ConfigureAwait(false); + var anyEpisodesRemoved = await RemoveObsoleteOrMissingEpisodes(series, episodeLookup, cancellationToken) + .ConfigureAwait(false); var hasNewEpisodes = false; if (_config.Configuration.EnableInternetProviders) { - hasNewEpisodes = await AddMissingEpisodes(series, seriesDataPath, episodeLookup, cancellationToken).ConfigureAwait(false); + hasNewEpisodes = await AddMissingEpisodes(series, seriesDataPath, episodeLookup, cancellationToken) + .ConfigureAwait(false); } if (hasNewEpisodes || anySeasonsRemoved || anyEpisodesRemoved) { - await series.RefreshMetadata(cancellationToken, true).ConfigureAwait(false); - await series.ValidateChildren(new Progress(), cancellationToken, true).ConfigureAwait(false); + await series.RefreshMetadata(cancellationToken, true) + .ConfigureAwait(false); + + await series.ValidateChildren(new Progress(), cancellationToken, true) + .ConfigureAwait(false); } } diff --git a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs index 4926b92f73..d77698725a 100644 --- a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs +++ b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs @@ -1,12 +1,13 @@ -using System.Globalization; -using MediaBrowser.Common.IO; +using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Net; using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Text; @@ -69,7 +70,8 @@ namespace MediaBrowser.Providers.TV /// Task. public async Task Run(IProgress progress, CancellationToken cancellationToken) { - if (!_config.Configuration.EnableInternetProviders) + if (!_config.Configuration.EnableInternetProviders || + _config.Configuration.InternetProviderExcludeTypes.Contains(typeof(Series).Name, StringComparer.OrdinalIgnoreCase)) { progress.Report(100); return; diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index 8e64e4300d..3606396652 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -306,6 +306,24 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi }); }; + self.getAvailableRemoteImages = function (itemId, imageType) { + + if (!itemId) { + throw new Error("null itemId"); + } + if (!imageType) { + throw new Error("null imageType"); + } + + var url = self.getUrl("Items/" + itemId + "/RemoteImages/" + imageType); + + return self.ajax({ + type: "GET", + url: url, + dataType: "json" + }); + }; + /** * Gets the current server status */ diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index 02daa2cae4..22560b1331 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file