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>
This commit is contained in:
Shadowghost 2024-06-24 20:29:03 -04:00 committed by Joshua M. Boniface
parent e2ca6e92e4
commit bd3645cbb0
3 changed files with 25 additions and 18 deletions

View File

@ -427,13 +427,15 @@ namespace MediaBrowser.Providers.Manager
if (type == ImageType.Backdrop && saveLocally) 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 seriesFolder = season.SeriesPath;
var seasonMarker = season.IndexNumber.Value == 0 var seasonMarker = season.IndexNumber.Value == 0
? "-specials" ? "-specials"
: season.IndexNumber.Value.ToString("00", CultureInfo.InvariantCulture); : season.IndexNumber.Value.ToString("00", CultureInfo.InvariantCulture);
var imageFilename = "season" + seasonMarker + "-fanart" + extension; var imageFilename = "season" + seasonMarker + "-fanart" + extension;

View File

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

View File

@ -100,21 +100,29 @@ namespace MediaBrowser.Providers.Manager
} }
} }
// Start by validating images
var localImagesFailed = false; var localImagesFailed = false;
var allImageProviders = ProviderManager.GetImageProviders(item, refreshOptions).ToList(); 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. item.ValidateImages();
if (ImageProvider.ValidateImages(item, allImageProviders.OfType<ILocalImageProvider>(), refreshOptions))
{
updateType |= ItemUpdateType.ImageUpdate;
}
} }
catch (Exception ex) else
{ {
localImagesFailed = true; // Run full image validation and register new local images
Logger.LogError(ex, "Error validating images for {Item}", item.Path ?? item.Name ?? "Unknown name"); 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> var metadataResult = new MetadataResult<TItemType>