diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 7916d7e86d..e8b3a6ad64 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -76,7 +76,6 @@ namespace MediaBrowser.Providers.Manager refreshResult.LastErrorMessage = string.Empty; refreshResult.LastStatus = ProviderRefreshStatus.Success; - var imageProviders = GetImageProviders(item).ToList(); var itemImageProvider = new ItemImageProvider(Logger, ProviderManager, ServerConfigurationManager); var localImagesFailed = false; @@ -84,7 +83,7 @@ namespace MediaBrowser.Providers.Manager try { // Always validate images and check for new locally stored ones. - if (itemImageProvider.ValidateImages(item, imageProviders)) + if (itemImageProvider.ValidateImages(item, GetLocalImageProviders(item))) { updateType = updateType | ItemUpdateType.ImageUpdate; } @@ -113,12 +112,13 @@ namespace MediaBrowser.Providers.Manager } // Next run remote image providers, but only if local image providers didn't throw an exception - if (!localImagesFailed) + if (!localImagesFailed && options.ImageRefreshMode != MetadataRefreshMode.None) { - if ((options.ImageRefreshMode == MetadataRefreshMode.EnsureMetadata && !lastResult.DateLastImagesRefresh.HasValue) || - options.ImageRefreshMode == MetadataRefreshMode.FullRefresh) + var providers = GetNonLocalImageProviders(item, lastResult.DateLastImagesRefresh.HasValue, options).ToList(); + + if (providers.Count > 0) { - var result = await itemImageProvider.RefreshImages(itemOfType, imageProviders, options, cancellationToken).ConfigureAwait(false); + var result = await itemImageProvider.RefreshImages(itemOfType, providers, options, cancellationToken).ConfigureAwait(false); updateType = updateType | result.UpdateType; refreshResult.AddStatus(result.Status, result.ErrorMessage); @@ -173,13 +173,49 @@ namespace MediaBrowser.Providers.Manager // If local providers are the only ones with changes, then just run those if (providersWithChanges.All(i => i is ILocalMetadataProvider)) { - providers = providers.Where(i => i is ILocalMetadataProvider).ToList(); + providers = providersWithChanges.Count == 0 ? + new List>() : + providers.Where(i => i is ILocalMetadataProvider).ToList(); } } return providers; } + protected virtual IEnumerable GetNonLocalImageProviders(IHasMetadata item, bool hasRefreshedImages, ImageRefreshOptions options) + { + // Get providers to refresh + var providers = _imageProviders.Where(i => + { + try + { + return !(i is ILocalImageProvider) && i.Supports(item); + } + catch (Exception ex) + { + Logger.ErrorException("Error in ImageProvider.Supports", ex, i.Name); + + return false; + } + }).ToList(); + + // Run all if either of these flags are true + var runAllProviders = options.ImageRefreshMode == MetadataRefreshMode.FullRefresh || !hasRefreshedImages; + + if (!runAllProviders) + { + // Avoid implicitly captured closure + var currentItem = item; + + providers = providers.OfType() + .Where(i => i.HasChanged(currentItem, currentItem.DateLastSaved)) + .Cast() + .ToList(); + } + + return providers; + } + /// /// Determines whether this instance can refresh the specified provider. /// @@ -323,9 +359,9 @@ namespace MediaBrowser.Providers.Manager } } - private IEnumerable GetImageProviders(IHasImages item) + private IEnumerable GetLocalImageProviders(IHasImages item) { - var providers = _imageProviders.Where(i => + return _imageProviders.OfType().Where(i => { try { @@ -338,13 +374,6 @@ namespace MediaBrowser.Providers.Manager return false; } }); - - if (!ServerConfigurationManager.Configuration.EnableInternetProviders) - { - providers = providers.Where(i => !(i is IRemoteImageProvider)); - } - - return providers.OrderBy(i => i.Order); } } diff --git a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs index 117cb1da70..1dd6eb272e 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/ProgramImageProvider.cs @@ -105,7 +105,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv public bool HasChanged(IHasMetadata item, DateTime date) { - return !item.HasImage(ImageType.Primary) && (DateTime.UtcNow - date).TotalHours >= 12; + return !item.HasImage(ImageType.Primary) && (DateTime.UtcNow - date).TotalHours >= 6; } } } diff --git a/Nuget/MediaBrowser.Common.Internal.nuspec b/Nuget/MediaBrowser.Common.Internal.nuspec index 6729d8c725..607b286edb 100644 --- a/Nuget/MediaBrowser.Common.Internal.nuspec +++ b/Nuget/MediaBrowser.Common.Internal.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common.Internal - 3.0.309 + 3.0.310 MediaBrowser.Common.Internal Luke ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains common components shared by Media Browser Theater and Media Browser Server. Not intended for plugin developer consumption. Copyright © Media Browser 2013 - + diff --git a/Nuget/MediaBrowser.Common.nuspec b/Nuget/MediaBrowser.Common.nuspec index 376cc722d9..3222e429bb 100644 --- a/Nuget/MediaBrowser.Common.nuspec +++ b/Nuget/MediaBrowser.Common.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Common - 3.0.309 + 3.0.310 MediaBrowser.Common Media Browser Team ebr,Luke,scottisafool diff --git a/Nuget/MediaBrowser.Server.Core.nuspec b/Nuget/MediaBrowser.Server.Core.nuspec index 22dd1aa9a9..abfd72ff36 100644 --- a/Nuget/MediaBrowser.Server.Core.nuspec +++ b/Nuget/MediaBrowser.Server.Core.nuspec @@ -2,7 +2,7 @@ MediaBrowser.Server.Core - 3.0.309 + 3.0.310 Media Browser.Server.Core Media Browser Team ebr,Luke,scottisafool @@ -12,7 +12,7 @@ Contains core components required to build plugins for Media Browser Server. Copyright © Media Browser 2013 - +