Browse Source

Added Backdrops and Screenshots to MetadataFields

Thomas Gillen 11 years ago
parent
commit
f0d0e1b94d

+ 9 - 1
MediaBrowser.Model/Entities/MetadataFields.cs

@@ -45,6 +45,14 @@ namespace MediaBrowser.Model.Entities
         /// <summary>
         /// The images
         /// </summary>
-        Images
+        Images,
+        /// <summary>
+        /// The backdrops
+        /// </summary>
+        Backdrops,
+        /// <summary>
+        /// The screenshots
+        /// </summary>
+        Screenshots
     }
 }

+ 7 - 7
MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs

@@ -168,11 +168,8 @@ namespace MediaBrowser.Providers.Movies
         /// <returns>Task{System.Boolean}.</returns>
         public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
         {
-            if (!item.LockedFields.Contains(MetadataFields.Images))
-            {
-                var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbImageProvider.ProviderName).ConfigureAwait(false);
-                await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
-            }
+            var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbImageProvider.ProviderName).ConfigureAwait(false);
+            await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
             return true;
@@ -194,7 +191,7 @@ namespace MediaBrowser.Providers.Movies
                 .ToList();
 
             //        poster
-            if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary))
+            if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary) && !item.LockedFields.Contains(MetadataFields.Images))
             {
                 var poster = eligiblePosters[0];
 
@@ -220,7 +217,10 @@ namespace MediaBrowser.Providers.Movies
             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)
+            if (eligibleBackdrops.Count > 0 &&
+                ConfigurationManager.Configuration.DownloadMovieImages.Backdrops &&
+                item.BackdropImagePaths.Count < backdropLimit &&
+                !item.LockedFields.Contains(MetadataFields.Backdrops))
             {
                 for (var i = 0; i < eligibleBackdrops.Count; i++)
                 {

+ 3 - 6
MediaBrowser.Providers/Movies/MovieDbPersonImageProvider.cs

@@ -163,11 +163,8 @@ namespace MediaBrowser.Providers.Movies
         /// <returns>Task{System.Boolean}.</returns>
         public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
         {
-            if (!item.LockedFields.Contains(MetadataFields.Images))
-            {
-                var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbPersonImageProvider.ProviderName).ConfigureAwait(false);
-                await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
-            }
+            var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbPersonImageProvider.ProviderName).ConfigureAwait(false);
+            await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
             return true;
@@ -189,7 +186,7 @@ namespace MediaBrowser.Providers.Movies
                 .ToList();
 
             //        poster
-            if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary))
+            if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary) && !item.LockedFields.Contains(MetadataFields.Images))
             {
                 var poster = eligiblePosters[0];
 

+ 39 - 34
MediaBrowser.Providers/Music/FanArtArtistProvider.cs

@@ -212,12 +212,11 @@ namespace MediaBrowser.Providers.Music
                 await DownloadArtistXml(artistDataPath, musicBrainzId, cancellationToken).ConfigureAwait(false);
             }
 
-            if (!item.LockedFields.Contains(MetadataFields.Images) &&
-                (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art ||
-                 ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops ||
-                 ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner ||
-                 ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo ||
-                 ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary))
+            if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art ||
+                ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops ||
+                ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner ||
+                ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo ||
+                ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary)
             {
                 var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartArtistProvider.ProviderName).ConfigureAwait(false);
                 await FetchFromXml(item, images.ToList(), cancellationToken).ConfigureAwait(false);
@@ -268,46 +267,52 @@ namespace MediaBrowser.Providers.Music
         /// <returns>Task.</returns>
         private async Task FetchFromXml(BaseItem item, List<RemoteImageInfo> images , CancellationToken cancellationToken)
         {
-            cancellationToken.ThrowIfCancellationRequested();
-
-            if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary && !item.HasImage(ImageType.Primary))
+            if (!item.LockedFields.Contains(MetadataFields.Images))
             {
-                await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary && !item.HasImage(ImageType.Primary))
+                {
+                    await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo && !item.HasImage(ImageType.Logo))
-            {
-                await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo && !item.HasImage(ImageType.Logo))
+                {
+                    await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art && !item.HasImage(ImageType.Art))
-            {
-                await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art && !item.HasImage(ImageType.Art))
+                {
+                    await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner && !item.HasImage(ImageType.Banner))
-            {
-                await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner && !item.HasImage(ImageType.Banner))
+                {
+                    await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
+                }
+            }
 
-            var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops;
-            if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops &&
-                item.BackdropImagePaths.Count < backdropLimit)
+            if (!item.LockedFields.Contains(MetadataFields.Backdrops))
             {
-                foreach (var image in images.Where(i => i.Type == ImageType.Backdrop))
+                cancellationToken.ThrowIfCancellationRequested();
+
+                var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops;
+                if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops &&
+                    item.BackdropImagePaths.Count < backdropLimit)
                 {
-                    await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken)
-                                        .ConfigureAwait(false);
+                    foreach (var image in images.Where(i => i.Type == ImageType.Backdrop))
+                    {
+                        await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken)
+                            .ConfigureAwait(false);
 
-                    if (item.BackdropImagePaths.Count >= backdropLimit) break;
+                        if (item.BackdropImagePaths.Count >= backdropLimit) break;
+                    }
                 }
             }
         }

+ 5 - 8
MediaBrowser.Providers/TV/FanArtSeasonProvider.cs

@@ -101,14 +101,11 @@ namespace MediaBrowser.Providers.TV
         {
             cancellationToken.ThrowIfCancellationRequested();
 
-            var season = (Season)item;
+            var season = (Season) item;
 
-            if (!item.LockedFields.Contains(MetadataFields.Images))
-            {
-                // Process images
-                var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartSeasonImageProvider.ProviderName).ConfigureAwait(false);
-                await FetchImages(season, images.ToList(), cancellationToken).ConfigureAwait(false);
-            }
+            // Process images
+            var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartSeasonImageProvider.ProviderName).ConfigureAwait(false);
+            await FetchImages(season, images.ToList(), cancellationToken).ConfigureAwait(false);
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
             return true;
@@ -123,7 +120,7 @@ namespace MediaBrowser.Providers.TV
         /// <returns>Task.</returns>
         private async Task FetchImages(Season season, List<RemoteImageInfo> images, CancellationToken cancellationToken)
         {
-            if (ConfigurationManager.Configuration.DownloadSeasonImages.Thumb && !season.HasImage(ImageType.Thumb))
+            if (ConfigurationManager.Configuration.DownloadSeasonImages.Thumb && !season.HasImage(ImageType.Thumb) && !season.LockedFields.Contains(MetadataFields.Images))
             {
                 await SaveImage(season, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false);
             }

+ 40 - 35
MediaBrowser.Providers/TV/FanArtTVProvider.cs

@@ -167,7 +167,7 @@ namespace MediaBrowser.Providers.TV
 
             var seriesId = item.GetProviderId(MetadataProviders.Tvdb);
 
-            if (!string.IsNullOrEmpty(seriesId) && !item.LockedFields.Contains(MetadataFields.Images))
+            if (!string.IsNullOrEmpty(seriesId))
             {
                 var xmlPath = GetFanartXmlPath(seriesId);
 
@@ -196,56 +196,61 @@ namespace MediaBrowser.Providers.TV
         /// <returns>Task.</returns>
         private async Task FetchFromXml(BaseItem item, List<RemoteImageInfo> images, CancellationToken cancellationToken)
         {
-            cancellationToken.ThrowIfCancellationRequested();
-
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Primary && !item.HasImage(ImageType.Primary))
+            if (!item.LockedFields.Contains(MetadataFields.Images))
             {
-                await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadSeriesImages.Primary && !item.HasImage(ImageType.Primary))
+                {
+                    await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Logo && !item.HasImage(ImageType.Logo))
-            {
-                await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadSeriesImages.Logo && !item.HasImage(ImageType.Logo))
+                {
+                    await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Art && !item.HasImage(ImageType.Art))
-            {
-                await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadSeriesImages.Art && !item.HasImage(ImageType.Art))
+                {
+                    await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Thumb && !item.HasImage(ImageType.Thumb))
-            {
-                await SaveImage(item, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadSeriesImages.Thumb && !item.HasImage(ImageType.Thumb))
+                {
+                    await SaveImage(item, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner))
-            {
-                await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
-            }
+                cancellationToken.ThrowIfCancellationRequested();
 
-            cancellationToken.ThrowIfCancellationRequested();
+                if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner))
+                {
+                    await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
+                }
+            }
 
-            var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops;
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops &&
-                item.BackdropImagePaths.Count < backdropLimit)
+            if (!item.LockedFields.Contains(MetadataFields.Backdrops))
             {
-                foreach (var image in images.Where(i => i.Type == ImageType.Backdrop))
+                cancellationToken.ThrowIfCancellationRequested();
+
+                var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops;
+                if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops &&
+                    item.BackdropImagePaths.Count < backdropLimit)
                 {
-                    await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken)
-                                        .ConfigureAwait(false);
+                    foreach (var image in images.Where(i => i.Type == ImageType.Backdrop))
+                    {
+                        await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken)
+                            .ConfigureAwait(false);
 
-                    if (item.BackdropImagePaths.Count >= backdropLimit) break;
+                        if (item.BackdropImagePaths.Count >= backdropLimit) break;
+                    }
                 }
             }
-
         }
 
         private async Task SaveImage(BaseItem item, List<RemoteImageInfo> images, ImageType type, CancellationToken cancellationToken)

+ 13 - 13
MediaBrowser.Providers/TV/TvdbSeasonProvider.cs

@@ -147,14 +147,11 @@ namespace MediaBrowser.Providers.TV
         {
             cancellationToken.ThrowIfCancellationRequested();
 
-            if (!item.LockedFields.Contains(MetadataFields.Images))
-            {
-                var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeasonImageProvider.ProviderName).ConfigureAwait(false);
+            var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeasonImageProvider.ProviderName).ConfigureAwait(false);
 
-                const int backdropLimit = 1;
+            const int backdropLimit = 1;
 
-                await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false);
-            }
+            await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false);
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
             return true;
@@ -162,17 +159,20 @@ namespace MediaBrowser.Providers.TV
 
         private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, int backdropLimit, CancellationToken cancellationToken)
         {
-            if (!item.HasImage(ImageType.Primary))
+            if (!item.LockedFields.Contains(MetadataFields.Images))
             {
-                await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
-            }
+                if (!item.HasImage(ImageType.Primary))
+                {
+                    await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
+                }
 
-            if (ConfigurationManager.Configuration.DownloadSeasonImages.Banner && !item.HasImage(ImageType.Banner))
-            {
-                await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
+                if (ConfigurationManager.Configuration.DownloadSeasonImages.Banner && !item.HasImage(ImageType.Banner))
+                {
+                    await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
+                }
             }
 
-            if (ConfigurationManager.Configuration.DownloadSeasonImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit)
+            if (ConfigurationManager.Configuration.DownloadSeasonImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit && !item.LockedFields.Contains(MetadataFields.Backdrops))
             {
                 foreach (var backdrop in images.Where(i => i.Type == ImageType.Backdrop))
                 {

+ 22 - 22
MediaBrowser.Providers/TV/TvdbSeriesImageProvider.cs

@@ -143,7 +143,7 @@ namespace MediaBrowser.Providers.TV
             }
             return base.NeedsRefreshInternal(item, providerInfo);
         }
-        
+
         /// <summary>
         /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
         /// </summary>
@@ -155,14 +155,11 @@ namespace MediaBrowser.Providers.TV
         {
             cancellationToken.ThrowIfCancellationRequested();
 
-            if (!item.LockedFields.Contains(MetadataFields.Images))
-            {
-                var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeriesImageProvider.ProviderName).ConfigureAwait(false);
+            var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeriesImageProvider.ProviderName).ConfigureAwait(false);
 
-                const int backdropLimit = 1;
+            const int backdropLimit = 1;
 
-                await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false);
-            }
+            await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false);
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
             return true;
@@ -170,29 +167,32 @@ namespace MediaBrowser.Providers.TV
 
         private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, int backdropLimit, CancellationToken cancellationToken)
         {
-            if (!item.HasImage(ImageType.Primary))
+            if (!item.LockedFields.Contains(MetadataFields.Images))
             {
-                var image = images.FirstOrDefault(i => i.Type == ImageType.Primary);
-
-                if (image != null)
+                if (!item.HasImage(ImageType.Primary))
                 {
-                    await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Primary, null, cancellationToken)
-                      .ConfigureAwait(false);
-                }
-            }
+                    var image = images.FirstOrDefault(i => i.Type == ImageType.Primary);
 
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner))
-            {
-                var image = images.FirstOrDefault(i => i.Type == ImageType.Banner);
+                    if (image != null)
+                    {
+                        await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Primary, null, cancellationToken)
+                            .ConfigureAwait(false);
+                    }
+                }
 
-                if (image != null)
+                if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner))
                 {
-                    await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Banner, null, cancellationToken)
-                      .ConfigureAwait(false);
+                    var image = images.FirstOrDefault(i => i.Type == ImageType.Banner);
+
+                    if (image != null)
+                    {
+                        await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Banner, null, cancellationToken)
+                            .ConfigureAwait(false);
+                    }
                 }
             }
 
-            if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit)
+            if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit && !item.LockedFields.Contains(MetadataFields.Backdrops))
             {
                 foreach (var backdrop in images.Where(i => i.Type == ImageType.Backdrop && 
                     (!i.Width.HasValue ||