aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJPVenson <ger-delta-07@hotmail.de>2025-07-07 18:14:01 +0300
committerGitHub <noreply@github.com>2025-07-07 09:14:01 -0600
commit4d5ba8d7a5047d805ca2d7b3458ad7cf0501c3f6 (patch)
tree58bf852e4e3ed230155833bd8ea09f2d247a8555
parent6d4169a4495a6206a4b56a484843fd87b0926c48 (diff)
Only save images when changed (#14425)
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs19
-rw-r--r--Jellyfin.Server.Implementations/Item/BaseItemRepository.cs2
2 files changed, 17 insertions, 4 deletions
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index 6ffe67776..b13387630 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -1981,6 +1981,8 @@ namespace Emby.Server.Implementations.Library
return;
}
+ var anyChange = false;
+
foreach (var img in outdated)
{
var image = img;
@@ -2012,6 +2014,7 @@ namespace Emby.Server.Implementations.Library
try
{
size = _imageProcessor.GetImageDimensions(item, image);
+ anyChange = image.Width != size.Width || image.Height != size.Height;
image.Width = size.Width;
image.Height = size.Height;
}
@@ -2019,23 +2022,29 @@ namespace Emby.Server.Implementations.Library
{
_logger.LogError(ex, "Cannot get image dimensions for {ImagePath}", image.Path);
size = default;
+ anyChange = image.Width != size.Width || image.Height != size.Height;
image.Width = 0;
image.Height = 0;
}
try
{
- image.BlurHash = _imageProcessor.GetImageBlurHash(image.Path, size);
+ var blurhash = _imageProcessor.GetImageBlurHash(image.Path, size);
+ anyChange = anyChange || !blurhash.Equals(image.BlurHash, StringComparison.Ordinal);
+ image.BlurHash = blurhash;
}
catch (Exception ex)
{
_logger.LogError(ex, "Cannot compute blurhash for {ImagePath}", image.Path);
+ anyChange = anyChange || !string.IsNullOrEmpty(image.BlurHash);
image.BlurHash = string.Empty;
}
try
{
- image.DateModified = _fileSystem.GetLastWriteTimeUtc(image.Path);
+ var modifiedDate = _fileSystem.GetLastWriteTimeUtc(image.Path);
+ anyChange = anyChange || modifiedDate != image.DateModified;
+ image.DateModified = modifiedDate;
}
catch (Exception ex)
{
@@ -2043,7 +2052,11 @@ namespace Emby.Server.Implementations.Library
}
}
- _itemRepository.SaveImages(item);
+ if (anyChange)
+ {
+ _itemRepository.SaveImages(item);
+ }
+
RegisterItem(item);
}
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
index 52585c996..a1e3a7bc4 100644
--- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
@@ -567,7 +567,7 @@ public sealed class BaseItemRepository
var itemValuesStore = existingValues.Concat(missingItemValues).ToArray();
var valueMap = itemValueMaps
- .Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore.First(g => g.Value == e.Value && g.Type == e.MagicNumber)).ToArray()))
+ .Select(f => (f.Item, Values: f.Values.Select(e => itemValuesStore.First(g => g.Value == e.Value && g.Type == e.MagicNumber)).DistinctBy(e => e.ItemValueId).ToArray()))
.ToArray();
var mappedValues = context.ItemValuesMap.Where(e => ids.Contains(e.ItemId)).ToList();