From 65903c56de4247ec8b45b204fc4816ff3db95d96 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 6 Feb 2014 19:43:45 -0500 Subject: [PATCH] get album images from songs before internet --- .../Manager/ItemImageProvider.cs | 22 ++++++---- .../MediaBrowser.Providers.csproj | 1 + .../MediaInfo/VideoImageProvider.cs | 11 ++++- .../Movies/FanartMovieImageProvider.cs | 7 ++- .../Movies/MovieDbProvider.cs | 25 ++++++++++- .../Music/AlbumImageFromSongProvider.cs | 44 +++++++++++++++++++ .../Music/FanArtAlbumProvider.cs | 13 +++++- .../Music/FanArtArtistProvider.cs | 7 ++- .../Music/LastfmAlbumProvider.cs | 6 ++- .../TV/FanArtSeasonProvider.cs | 7 ++- .../TV/FanartSeriesProvider.cs | 7 ++- .../TV/TvdbEpisodeProvider.cs | 5 +++ .../TV/TvdbSeriesProvider.cs | 7 ++- 13 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 MediaBrowser.Providers/Music/AlbumImageFromSongProvider.cs 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