diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index 5a43a138bd..10eb96b10c 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -1141,20 +1141,10 @@ namespace Emby.Server.Implementations.Data
public string ToValueString(ItemImageInfo image)
{
- var delimeter = "*";
+ const string delimeter = "*";
- var path = image.Path;
- var hash = image.Hash;
-
- if (path == null)
- {
- path = string.Empty;
- }
-
- if (hash == null)
- {
- hash = string.Empty;
- }
+ var path = image.Path ?? string.Empty;
+ var hash = image.Hash ?? string.Empty;
return GetPathToSave(path) +
delimeter +
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index e1cb282ccb..c48664a316 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -1825,17 +1825,26 @@ namespace Emby.Server.Implementations.Library
public void UpdateImages(BaseItem item)
{
- item.ImageInfos
- .Where(i => (i.Width == 0 || i.Height == 0))
- .ToList()
- .ForEach(x =>
- {
- string blurhash = ImageProcessor.GetImageHash(x.Path);
- ImageDimensions size = ImageProcessor.GetImageDimensions(item, x);
- x.Width = size.Width;
- x.Height = size.Height;
- x.Hash = blurhash;
- });
+ if (item == null)
+ {
+ throw new ArgumentNullException(nameof(item));
+ }
+
+ var outdated = item.ImageInfos
+ .Where(i => (i.Width == 0 || i.Height == 0 || string.IsNullOrEmpty(i.Hash)))
+ .ToList();
+ if (outdated.Count == 0)
+ {
+ return;
+ }
+
+ outdated.ForEach(img =>
+ {
+ ImageDimensions size = ImageProcessor.GetImageDimensions(item, img);
+ img.Width = size.Width;
+ img.Height = size.Height;
+ img.Hash = ImageProcessor.GetImageHash(img.Path);
+ });
_itemRepository.SaveImages(item);
@@ -1905,34 +1914,6 @@ namespace Emby.Server.Implementations.Library
UpdateItems(new[] { item }, parent, updateReason, cancellationToken);
}
- ///
- /// Updates everything in the database.
- ///
- public void UpdateAll()
- {
- Task.Run(() =>
- {
- var items = _itemRepository.GetItemList(new InternalItemsQuery {
- Recursive = true
- });
- foreach (var item in items)
- {
- _logger.LogDebug("Updating item {Name} ({ItemId})",
- item.Name,
- item.Id);
- try
- {
- item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "Updating item {ItemId} failed", item.Id);
- }
- }
- _logger.LogDebug("All items have been updated");
- });
- }
-
///
/// Reports the item removed.
///
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs
index 09b99781bf..559db550b8 100644
--- a/MediaBrowser.Api/Images/ImageService.cs
+++ b/MediaBrowser.Api/Images/ImageService.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
+using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Extensions;
@@ -280,9 +281,16 @@ namespace MediaBrowser.Api.Images
public List GetItemImageInfos(BaseItem item)
{
var list = new List();
-
var itemImages = item.ImageInfos;
+ if (itemImages.Length == 0)
+ {
+ // short-circuit
+ return list;
+ }
+
+ _libraryManager.UpdateImages(item); // this makes sure dimensions and hashes are correct
+
foreach (var image in itemImages)
{
if (!item.AllowsMultipleImages(image.Type))
@@ -323,7 +331,7 @@ namespace MediaBrowser.Api.Images
{
int? width = null;
int? height = null;
- string? blurhash = null;
+ string blurhash = null;
long length = 0;
try
@@ -333,13 +341,9 @@ namespace MediaBrowser.Api.Images
var fileInfo = _fileSystem.GetFileInfo(info.Path);
length = fileInfo.Length;
- blurhash = _imageProcessor.GetImageHash(info.Path);
- info.Hash = blurhash; // TODO: this doesn't seem like the right thing to do
-
- ImageDimensions size = _imageProcessor.GetImageDimensions(item, info);
- _libraryManager.UpdateImages(item);
- width = size.Width;
- height = size.Height;
+ blurhash = info.Hash;
+ width = info.Width;
+ height = info.Height;
if (width <= 0 || height <= 0)
{
diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs
index 808627b41a..2db6d717aa 100644
--- a/MediaBrowser.Api/ItemUpdateService.cs
+++ b/MediaBrowser.Api/ItemUpdateService.cs
@@ -198,12 +198,6 @@ namespace MediaBrowser.Api
public void Post(UpdateItem request)
{
- if (request.ItemId == "*")
- {
- // Special case: Refresh everything in database. Probably not a great idea to run often.
- _libraryManager.UpdateAll();
- return;
- }
var item = _libraryManager.GetItemById(request.ItemId);
var newLockData = request.LockData ?? false;
diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs
index 559a5415fb..81160efece 100644
--- a/MediaBrowser.Controller/Library/ILibraryManager.cs
+++ b/MediaBrowser.Controller/Library/ILibraryManager.cs
@@ -195,8 +195,8 @@ namespace MediaBrowser.Controller.Library
/// Updates the item.
///
void UpdateItems(IEnumerable items, BaseItem parent, ItemUpdateType updateReason, CancellationToken cancellationToken);
+
void UpdateItem(BaseItem item, BaseItem parent, ItemUpdateType updateReason, CancellationToken cancellationToken);
- void UpdateAll();
///
/// Retrieves the item.