Browse Source

Backport pull request #12055 from jellyfin/release-10.9.z

Fix season backdrops

Original-merge: 2266a003372826e8f9a6367cbe9070aa2d1b4b82

Merged-by: Bond-009 <bond.009@outlook.com>

Backported-by: Joshua M. Boniface <joshua@boniface.me>
Shadowghost 11 months ago
parent
commit
bd3645cbb0

+ 5 - 3
MediaBrowser.Providers/Manager/ImageSaver.cs

@@ -427,13 +427,15 @@ namespace MediaBrowser.Providers.Manager
 
             if (type == ImageType.Backdrop && saveLocally)
             {
-                if (season is not null && season.IndexNumber.HasValue)
+                if (season is not null
+                    && season.IndexNumber.HasValue
+                    && (imageIndex is null || imageIndex == 0))
                 {
                     var seriesFolder = season.SeriesPath;
 
                     var seasonMarker = season.IndexNumber.Value == 0
-                                           ? "-specials"
-                                           : season.IndexNumber.Value.ToString("00", CultureInfo.InvariantCulture);
+                                        ? "-specials"
+                                        : season.IndexNumber.Value.ToString("00", CultureInfo.InvariantCulture);
 
                     var imageFilename = "season" + seasonMarker + "-fanart" + extension;
 

+ 2 - 5
MediaBrowser.Providers/Manager/ItemImageProvider.cs

@@ -159,7 +159,7 @@ namespace MediaBrowser.Providers.Manager
                 }
             }
 
-            // only delete existing multi-images if new ones were added
+            // Only delete existing multi-images if new ones were added
             if (oldBackdropImages.Length > 0 && oldBackdropImages.Length < item.GetImages(ImageType.Backdrop).Count())
             {
                 PruneImages(item, oldBackdropImages);
@@ -422,14 +422,11 @@ namespace MediaBrowser.Providers.Manager
         {
             var changed = item.ValidateImages();
             var foundImageTypes = new List<ImageType>();
-
             for (var i = 0; i < _singularImages.Length; i++)
             {
                 var type = _singularImages[i];
                 var image = GetFirstLocalImageInfoByType(images, type);
-
-                // Only use local images if we are not replacing and saving
-                if (image is not null && !(item.IsSaveLocalMetadataEnabled() && refreshOptions.ReplaceAllImages))
+                if (image is not null)
                 {
                     var currentImage = item.GetImageInfo(type, 0);
                     // if image file is stored with media, don't replace that later

+ 18 - 10
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -100,21 +100,29 @@ namespace MediaBrowser.Providers.Manager
                 }
             }
 
-            // Start by validating images
             var localImagesFailed = false;
             var allImageProviders = ProviderManager.GetImageProviders(item, refreshOptions).ToList();
-            try
+
+            // Only validate already registered images if we are replacing and saving locally
+            if (item.IsSaveLocalMetadataEnabled() && refreshOptions.ReplaceAllImages)
             {
-                // Always validate images and check for new locally stored ones.
-                if (ImageProvider.ValidateImages(item, allImageProviders.OfType<ILocalImageProvider>(), refreshOptions))
-                {
-                    updateType |= ItemUpdateType.ImageUpdate;
-                }
+                item.ValidateImages();
             }
-            catch (Exception ex)
+            else
             {
-                localImagesFailed = true;
-                Logger.LogError(ex, "Error validating images for {Item}", item.Path ?? item.Name ?? "Unknown name");
+                // Run full image validation and register new local images
+                try
+                {
+                    if (ImageProvider.ValidateImages(item, allImageProviders.OfType<ILocalImageProvider>(), refreshOptions))
+                    {
+                        updateType |= ItemUpdateType.ImageUpdate;
+                    }
+                }
+                catch (Exception ex)
+                {
+                    localImagesFailed = true;
+                    Logger.LogError(ex, "Error validating images for {Item}", item.Path ?? item.Name ?? "Unknown name");
+                }
             }
 
             var metadataResult = new MetadataResult<TItemType>