浏览代码

Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser

Luke Pulverenti 11 年之前
父节点
当前提交
392255947d

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

@@ -41,6 +41,18 @@ namespace MediaBrowser.Model.Entities
         /// <summary>
         /// The official rating
         /// </summary>
-        OfficialRating
+        OfficialRating,
+        /// <summary>
+        /// The images
+        /// </summary>
+        Images,
+        /// <summary>
+        /// The backdrops
+        /// </summary>
+        Backdrops,
+        /// <summary>
+        /// The screenshots
+        /// </summary>
+        Screenshots
     }
 }

+ 8 - 4
MediaBrowser.Providers/Movies/MovieDbImagesProvider.cs

@@ -132,7 +132,9 @@ namespace MediaBrowser.Providers.Movies
             }
 
             // Don't refresh if we already have both poster and backdrop and we're not refreshing images
-            if (item.HasImage(ImageType.Primary) && item.BackdropImagePaths.Count >= ConfigurationManager.Configuration.MaxBackdrops)
+            if (item.HasImage(ImageType.Primary) && 
+                item.BackdropImagePaths.Count >= ConfigurationManager.Configuration.MaxBackdrops &&
+                !item.LockedFields.Contains(MetadataFields.Images))
             {
                 return false;
             }
@@ -167,7 +169,6 @@ namespace MediaBrowser.Providers.Movies
         public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
         {
             var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbImageProvider.ProviderName).ConfigureAwait(false);
-
             await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
@@ -190,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];
 
@@ -216,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++)
                 {

+ 1 - 2
MediaBrowser.Providers/Movies/MovieDbPersonImageProvider.cs

@@ -164,7 +164,6 @@ namespace MediaBrowser.Providers.Movies
         public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
         {
             var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbPersonImageProvider.ProviderName).ConfigureAwait(false);
-
             await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
@@ -187,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];
 

+ 5 - 3
MediaBrowser.Providers/Music/FanArtAlbumProvider.cs

@@ -154,9 +154,11 @@ namespace MediaBrowser.Providers.Music
         /// <returns>Task{System.Boolean}.</returns>
         public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
         {
-            var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartAlbumProvider.ProviderName).ConfigureAwait(false);
-
-            await FetchFromXml(item, images.ToList(), cancellationToken).ConfigureAwait(false);
+            if (!item.LockedFields.Contains(MetadataFields.Images))
+            {
+                var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartAlbumProvider.ProviderName).ConfigureAwait(false);
+                await FetchFromXml(item, images.ToList(), cancellationToken).ConfigureAwait(false);
+            }
 
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
 

+ 38 - 33
MediaBrowser.Providers/Music/FanArtArtistProvider.cs

@@ -213,13 +213,12 @@ namespace MediaBrowser.Providers.Music
             }
 
             if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art ||
-              ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops ||
-              ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner ||
-              ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo ||
-              ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary)
+                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;
+                    }
                 }
             }
         }

+ 1 - 1
MediaBrowser.Providers/Music/LastFmImageProvider.cs

@@ -90,7 +90,7 @@ namespace MediaBrowser.Providers.Music
                 ? ConfigurationManager.Configuration.DownloadMusicAlbumImages
                 : ConfigurationManager.Configuration.DownloadMusicArtistImages;
 
-            if (configSetting.Primary && !item.HasImage(ImageType.Primary))
+            if (configSetting.Primary && !item.HasImage(ImageType.Primary) && !item.LockedFields.Contains(MetadataFields.Images))
             {
                 var image = images.FirstOrDefault(i => i.Type == ImageType.Primary);
 

+ 2 - 3
MediaBrowser.Providers/TV/FanArtSeasonProvider.cs

@@ -101,11 +101,10 @@ namespace MediaBrowser.Providers.TV
         {
             cancellationToken.ThrowIfCancellationRequested();
 
-            var season = (Season)item;
+            var season = (Season) item;
 
             // 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);
@@ -121,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);
             }

+ 39 - 34
MediaBrowser.Providers/TV/FanArtTVProvider.cs

@@ -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)

+ 2 - 1
MediaBrowser.Providers/TV/TvdbPersonImageProvider.cs

@@ -75,9 +75,10 @@ namespace MediaBrowser.Providers.TV
             SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
             return true;
         }
+
         private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, CancellationToken cancellationToken)
         {
-            if (!item.HasImage(ImageType.Primary))
+            if (!item.HasImage(ImageType.Primary) && !item.LockedFields.Contains(MetadataFields.Images))
             {
                 var image = images.FirstOrDefault(i => i.Type == ImageType.Primary);
 

+ 10 - 7
MediaBrowser.Providers/TV/TvdbSeasonProvider.cs

@@ -159,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))
                 {

+ 19 - 16
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>
@@ -167,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 ||