diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index 1bb7ffccec..36a7c2fabe 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -68,16 +68,22 @@ namespace MediaBrowser.Providers.Manager
/// Removes all existing images from the provided item.
///
/// The to remove images from.
+ /// Whether removing images outside metadata folder is allowed.
/// true if changes were made to the item; otherwise false.
- public bool RemoveImages(BaseItem item)
+ public bool RemoveImages(BaseItem item, bool canDeleteLocal = false)
{
var singular = new List();
+ var itemMetadataPath = item.GetInternalMetadataPath();
for (var i = 0; i < _singularImages.Length; i++)
{
var currentImage = item.GetImageInfo(_singularImages[i], 0);
if (currentImage is not null)
{
- singular.Add(currentImage);
+ var imageInMetadataFolder = currentImage.Path.StartsWith(itemMetadataPath, StringComparison.OrdinalIgnoreCase);
+ if (imageInMetadataFolder || canDeleteLocal || item.IsSaveLocalMetadataEnabled())
+ {
+ singular.Add(currentImage);
+ }
}
}
diff --git a/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs b/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs
index 5dd3eb8ab9..0c7d2487cb 100644
--- a/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs
+++ b/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs
@@ -580,6 +580,7 @@ namespace Jellyfin.Providers.Tests.Manager
CallBase = true
};
item.Setup(m => m.IsSaveLocalMetadataEnabled()).Returns(false);
+ item.Setup(m => m.GetInternalMetadataPath()).Returns(string.Empty);
var path = validPaths ? _testDataImagePath.Format : "invalid path {0}";
for (int i = 0; i < count; i++)