diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs index f2fa4dc294..bc5579ab65 100644 --- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs +++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs @@ -63,18 +63,24 @@ namespace MediaBrowser.Providers.Manager var backdropLimit = item.HasImage(ImageType.Backdrop) ? 0 : savedOptions.GetLimit(ImageType.Backdrop); var screenshotLimit = item.HasImage(ImageType.Screenshot) ? 0 : savedOptions.GetLimit(ImageType.Screenshot); - foreach (var provider in providers.OfType()) + foreach (var provider in providers) { - await RefreshFromProvider(item, provider, refreshOptions, savedOptions, backdropLimit, screenshotLimit, result, cancellationToken).ConfigureAwait(false); + var remoteProvider = provider as IRemoteImageProvider; - providerIds.Add(provider.GetType().FullName.GetMD5()); - } + if (remoteProvider != null) + { + await RefreshFromProvider(item, remoteProvider, refreshOptions, savedOptions, backdropLimit, screenshotLimit, result, cancellationToken).ConfigureAwait(false); + providerIds.Add(provider.GetType().FullName.GetMD5()); + continue; + } - foreach (var provider in providers.OfType()) - { - await RefreshFromProvider(item, provider, savedOptions, result, cancellationToken).ConfigureAwait(false); + var dynamicImageProvider = provider as IDynamicImageProvider; - providerIds.Add(provider.GetType().FullName.GetMD5()); + if (dynamicImageProvider != null) + { + await RefreshFromProvider(item, dynamicImageProvider, savedOptions, result, cancellationToken).ConfigureAwait(false); + providerIds.Add(provider.GetType().FullName.GetMD5()); + } } result.Providers = providerIds; diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 2c710693e0..4bd9fc5300 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -110,6 +110,7 @@ + diff --git a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs index 31d44f4ec8..8c62f6be47 100644 --- a/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/VideoImageProvider.cs @@ -12,7 +12,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.MediaInfo { - public class VideoImageProvider : IDynamicImageProvider, IHasChangeMonitor + public class VideoImageProvider : IDynamicImageProvider, IHasChangeMonitor, IHasOrder { private readonly IIsoManager _isoManager; private readonly IMediaEncoder _mediaEncoder; @@ -130,5 +130,14 @@ namespace MediaBrowser.Providers.MediaInfo { return item.DateModified > date; } + + public int Order + { + get + { + // Make sure this comes after internet image providers + return 100; + } + } } } diff --git a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs index e0ed0ec250..94d8566e14 100644 --- a/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs +++ b/MediaBrowser.Providers/Movies/FanartMovieImageProvider.cs @@ -346,6 +346,11 @@ namespace MediaBrowser.Providers.Movies public bool HasChanged(IHasMetadata item, DateTime date) { + if (!_config.Configuration.EnableFanArtUpdates) + { + return false; + } + var id = item.GetProviderId(MetadataProviders.Tmdb); if (!string.IsNullOrEmpty(id)) @@ -355,7 +360,7 @@ namespace MediaBrowser.Providers.Movies var fileInfo = new FileInfo(xmlPath); - return fileInfo.Exists && _fileSystem.GetLastWriteTimeUtc(fileInfo) > date; + return !fileInfo.Exists || _fileSystem.GetLastWriteTimeUtc(fileInfo) > date; } return false; diff --git a/MediaBrowser.Providers/Movies/MovieDbProvider.cs b/MediaBrowser.Providers/Movies/MovieDbProvider.cs index 47b92235b8..33092b6c91 100644 --- a/MediaBrowser.Providers/Movies/MovieDbProvider.cs +++ b/MediaBrowser.Providers/Movies/MovieDbProvider.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using System; @@ -18,7 +19,7 @@ namespace MediaBrowser.Providers.Movies /// /// Class MovieDbProvider /// - public class MovieDbProvider : IRemoteMetadataProvider, IDisposable + public class MovieDbProvider : IRemoteMetadataProvider, IDisposable, IHasChangeMonitor { internal readonly SemaphoreSlim MovieDbResourcePool = new SemaphoreSlim(1, 1); @@ -314,6 +315,28 @@ namespace MediaBrowser.Providers.Movies } } + public bool HasChanged(IHasMetadata item, DateTime date) + { + if (!_configurationManager.Configuration.EnableTmdbUpdates) + { + return false; + } + + var tmdbId = item.GetProviderId(MetadataProviders.Tmdb); + + if (!String.IsNullOrEmpty(tmdbId)) + { + // Process images + var dataFilePath = GetDataFilePath(tmdbId, item.GetPreferredMetadataLanguage()); + + var fileInfo = new FileInfo(dataFilePath); + + return !fileInfo.Exists || _fileSystem.GetLastWriteTimeUtc(fileInfo) > date; + } + + return false; + } + public void Dispose() { Dispose(true); diff --git a/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs b/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs new file mode 100644 index 0000000000..0e073c783a --- /dev/null +++ b/MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs @@ -0,0 +1,44 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Providers.Music +{ + public class AlbumImageFromSongProvider : IDynamicImageProvider + { + public IEnumerable GetSupportedImages(IHasImages item) + { + return new List { ImageType.Primary }; + } + + public Task GetImage(IHasImages item, ImageType type, CancellationToken cancellationToken) + { + var album = (MusicAlbum)item; + + var image = album.RecursiveChildren.OfType