Browse Source

Don't overwrite NFO images (#9452)

Co-authored-by: Cody Robibero <cody@robibe.ro>
SenorSmartyPants 2 năm trước cách đây
mục cha
commit
39677525f3

+ 2 - 1
MediaBrowser.Controller/Providers/ImageRefreshOptions.cs

@@ -1,6 +1,7 @@
 #pragma warning disable CA1819, CS1591
 
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using MediaBrowser.Model.Entities;
 
@@ -23,7 +24,7 @@ namespace MediaBrowser.Controller.Providers
 
         public bool ReplaceAllImages { get; set; }
 
-        public ImageType[] ReplaceImages { get; set; }
+        public IReadOnlyList<ImageType> ReplaceImages { get; set; }
 
         public bool IsAutomated { get; set; }
 

+ 1 - 1
MediaBrowser.Providers/Manager/ItemImageProvider.cs

@@ -273,7 +273,7 @@ namespace MediaBrowser.Providers.Manager
                 }
 
                 if (!refreshOptions.ReplaceAllImages &&
-                    refreshOptions.ReplaceImages.Length == 0 &&
+                    refreshOptions.ReplaceImages.Count == 0 &&
                     ContainsImages(item, provider.GetSupportedImages(item).ToList(), savedOptions, backdropLimit))
                 {
                     return;

+ 14 - 0
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -26,6 +26,8 @@ namespace MediaBrowser.Providers.Manager
         where TItemType : BaseItem, IHasLookupInfo<TIdType>, new()
         where TIdType : ItemLookupInfo, new()
     {
+        private static readonly ImageType[] AllImageTypes = Enum.GetValues<ImageType>();
+
         protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger<MetadataService<TItemType, TIdType>> logger, IProviderManager providerManager, IFileSystem fileSystem, ILibraryManager libraryManager)
         {
             ServerConfigurationManager = serverConfigurationManager;
@@ -672,6 +674,8 @@ namespace MediaBrowser.Providers.Manager
             }
 
             var hasLocalMetadata = false;
+            var replaceImages = AllImageTypes.ToList();
+            var localImagesFound = false;
 
             foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>())
             {
@@ -698,6 +702,10 @@ namespace MediaBrowser.Providers.Manager
 
                                 await ProviderManager.SaveImage(item, remoteImage.Url, remoteImage.Type, null, cancellationToken).ConfigureAwait(false);
                                 refreshResult.UpdateType |= ItemUpdateType.ImageUpdate;
+
+                                // remove imagetype that has just been downloaded
+                                replaceImages.Remove(remoteImage.Type);
+                                localImagesFound = true;
                             }
                             catch (HttpRequestException ex)
                             {
@@ -705,6 +713,12 @@ namespace MediaBrowser.Providers.Manager
                             }
                         }
 
+                        if (localImagesFound)
+                        {
+                            options.ReplaceAllImages = false;
+                            options.ReplaceImages = replaceImages;
+                        }
+
                         if (imageService.MergeImages(item, localItem.Images))
                         {
                             refreshResult.UpdateType |= ItemUpdateType.ImageUpdate;