aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Library/LibraryManager.cs
diff options
context:
space:
mode:
authorVasily <just.one.man@yandex.ru>2020-05-27 17:00:59 +0300
committerVasily <just.one.man@yandex.ru>2020-05-27 17:00:59 +0300
commitedcfcadcd327affb308b0c0eb5cfbb1416e27cae (patch)
tree8496bc27ecc79b4c5b056b9924c7afc6b2f57319 /Emby.Server.Implementations/Library/LibraryManager.cs
parent2482bcb3b1ba9ea6e861709704ce1f184fcc0d9c (diff)
Make sure blurhash is recomputed if image changed or metadata refresh toggled
Diffstat (limited to 'Emby.Server.Implementations/Library/LibraryManager.cs')
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs47
1 files changed, 38 insertions, 9 deletions
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index 903c0b3cf..84bcd1bc1 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -1820,23 +1820,44 @@ namespace Emby.Server.Implementations.Library
}
}
- public void UpdateImages(BaseItem item)
+ private bool ImageNeedsRefresh(ItemImageInfo image)
+ {
+ if (image.Path != null && image.IsLocalFile)
+ {
+ if (image.Width == 0 || image.Height == 0 || string.IsNullOrEmpty(image.BlurHash))
+ {
+ return true;
+ }
+
+ try
+ {
+ return _fileSystem.GetLastWriteTimeUtc(image.Path) != image.DateModified;
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Cannot get file info for {0}", image.Path);
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ public void UpdateImages(BaseItem item, bool forceUpdate = false)
{
if (item == null)
{
throw new ArgumentNullException(nameof(item));
}
- var outdated = item.ImageInfos
- .Where(i => (i.IsLocalFile && (i.Width == 0 || i.Height == 0 || string.IsNullOrEmpty(i.BlurHash))))
- .ToList();
- if (outdated.Count == 0)
+ var outdated = forceUpdate ? item.ImageInfos : item.ImageInfos.Where(ImageNeedsRefresh).ToArray();
+ if (outdated.Length == 0)
{
RegisterItem(item);
return;
}
- outdated.ForEach(img =>
+ foreach (var img in outdated)
{
ImageDimensions size = _imageProcessor.GetImageDimensions(item, img);
img.Width = size.Width;
@@ -1850,10 +1871,18 @@ namespace Emby.Server.Implementations.Library
_logger.LogError(ex, "Cannot compute blurhash for {0}", img.Path);
img.BlurHash = string.Empty;
}
- });
- _itemRepository.SaveImages(item);
+ try
+ {
+ img.DateModified = _fileSystem.GetLastWriteTimeUtc(img.Path);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Cannot update DateModified for {0}", img.Path);
+ }
+ }
+ _itemRepository.SaveImages(item);
RegisterItem(item);
}
@@ -1874,7 +1903,7 @@ namespace Emby.Server.Implementations.Library
item.DateLastSaved = DateTime.UtcNow;
- UpdateImages(item);
+ UpdateImages(item, updateReason >= ItemUpdateType.ImageUpdate);
}
_itemRepository.SaveItems(itemsList, cancellationToken);