mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Validate multi-images, lazy-delete bg on refresh
Fix failing test: Invalid background images not purged by validate Fixes #6310: Background images only delete when using "Replace existing images" when new image(s) is found to replace them
This commit is contained in:
parent
080b02cc4c
commit
0fbd8d85c8
@ -103,14 +103,16 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
ImageRefreshOptions refreshOptions,
|
ImageRefreshOptions refreshOptions,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
|
List<ItemImageInfo> oldBackdropImages = new List<ItemImageInfo>();
|
||||||
if (refreshOptions.IsReplacingImage(ImageType.Backdrop))
|
if (refreshOptions.IsReplacingImage(ImageType.Backdrop))
|
||||||
{
|
{
|
||||||
ClearImages(item, ImageType.Backdrop);
|
oldBackdropImages = item.GetImages(ImageType.Backdrop).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<ItemImageInfo> oldScreenshotImages = new List<ItemImageInfo>();
|
||||||
if (refreshOptions.IsReplacingImage(ImageType.Screenshot))
|
if (refreshOptions.IsReplacingImage(ImageType.Screenshot))
|
||||||
{
|
{
|
||||||
ClearImages(item, ImageType.Screenshot);
|
oldScreenshotImages = item.GetImages(ImageType.Screenshot).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = new RefreshResult { UpdateType = ItemUpdateType.None };
|
var result = new RefreshResult { UpdateType = ItemUpdateType.None };
|
||||||
@ -118,9 +120,9 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
var typeName = item.GetType().Name;
|
var typeName = item.GetType().Name;
|
||||||
var typeOptions = libraryOptions.GetTypeOptions(typeName) ?? new TypeOptions { Type = typeName };
|
var typeOptions = libraryOptions.GetTypeOptions(typeName) ?? new TypeOptions { Type = typeName };
|
||||||
|
|
||||||
// In order to avoid duplicates, only download these if there are none already
|
// track library limits, adding buffer to allow lazy replacing of current images
|
||||||
var backdropLimit = typeOptions.GetLimit(ImageType.Backdrop);
|
var backdropLimit = typeOptions.GetLimit(ImageType.Backdrop) + oldBackdropImages.Count;
|
||||||
var screenshotLimit = typeOptions.GetLimit(ImageType.Screenshot);
|
var screenshotLimit = typeOptions.GetLimit(ImageType.Screenshot) + oldScreenshotImages.Count;
|
||||||
var downloadedImages = new List<ImageType>();
|
var downloadedImages = new List<ImageType>();
|
||||||
|
|
||||||
foreach (var provider in providers)
|
foreach (var provider in providers)
|
||||||
@ -137,6 +139,17 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// only delete existing multi-images if new ones were added
|
||||||
|
if (oldBackdropImages.Count > 0 && oldBackdropImages.Count < item.GetImages(ImageType.Backdrop).Count())
|
||||||
|
{
|
||||||
|
PruneImages(item, oldBackdropImages);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldScreenshotImages.Count > 0 && oldScreenshotImages.Count < item.GetImages(ImageType.Screenshot).Count())
|
||||||
|
{
|
||||||
|
PruneImages(item, oldScreenshotImages);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,13 +189,14 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
if (response.Protocol == MediaProtocol.Http)
|
if (response.Protocol == MediaProtocol.Http)
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Setting image url into item {0}", item.Id);
|
_logger.LogDebug("Setting image url into item {0}", item.Id);
|
||||||
|
var index = item.AllowsMultipleImages(imageType) ? item.GetImages(imageType).Count() : 0;
|
||||||
item.SetImage(
|
item.SetImage(
|
||||||
new ItemImageInfo
|
new ItemImageInfo
|
||||||
{
|
{
|
||||||
Path = response.Path,
|
Path = response.Path,
|
||||||
Type = imageType
|
Type = imageType
|
||||||
},
|
},
|
||||||
0);
|
index);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -352,35 +366,25 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
return options.IsEnabled(type);
|
return options.IsEnabled(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ClearImages(BaseItem item, ImageType type)
|
private void PruneImages(BaseItem item, List<ItemImageInfo> images)
|
||||||
{
|
{
|
||||||
var deleted = false;
|
for (var i = 0; i < images.Count; i++)
|
||||||
var deletedImages = new List<ItemImageInfo>();
|
{
|
||||||
|
var image = images[i];
|
||||||
|
|
||||||
foreach (var image in item.GetImages(type))
|
if (image.IsLocalFile)
|
||||||
{
|
{
|
||||||
if (!image.IsLocalFile)
|
|
||||||
{
|
|
||||||
deletedImages.Add(image);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_fileSystem.DeleteFile(image.Path);
|
_fileSystem.DeleteFile(image.Path);
|
||||||
deleted = true;
|
|
||||||
}
|
}
|
||||||
catch (FileNotFoundException)
|
catch (FileNotFoundException)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
item.RemoveImages(deletedImages);
|
|
||||||
|
|
||||||
if (deleted)
|
|
||||||
{
|
|
||||||
item.ValidateImages(new DirectoryService(_fileSystem));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
item.RemoveImages(images);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -476,6 +480,14 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
{
|
{
|
||||||
var changed = false;
|
var changed = false;
|
||||||
|
|
||||||
|
var deletedImages = item.GetImages(type).Where(i => i.IsLocalFile && !File.Exists(i.Path)).ToList();
|
||||||
|
|
||||||
|
if (deletedImages.Count > 0)
|
||||||
|
{
|
||||||
|
item.RemoveImages(deletedImages);
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
var newImageFileInfos = images
|
var newImageFileInfos = images
|
||||||
.Where(i => i.Type == type)
|
.Where(i => i.Type == type)
|
||||||
.Select(i => i.FileInfo)
|
.Select(i => i.FileInfo)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user