Library: Async the SaveImages function (#15718)

This commit is contained in:
Luigi311 2025-12-13 08:43:49 -07:00 committed by GitHub
parent 4db0ab0f40
commit 771b0a7eab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 12 deletions

View File

@ -2143,7 +2143,7 @@ namespace Emby.Server.Implementations.Library
item.ValidateImages();
_itemRepository.SaveImages(item);
await _itemRepository.SaveImagesAsync(item).ConfigureAwait(false);
RegisterItem(item);
}

View File

@ -547,22 +547,34 @@ public sealed class BaseItemRepository
}
/// <inheritdoc />
public void SaveImages(BaseItemDto item)
public async Task SaveImagesAsync(BaseItemDto item, CancellationToken cancellationToken = default)
{
ArgumentNullException.ThrowIfNull(item);
var images = item.ImageInfos.Select(e => Map(item.Id, e));
using var context = _dbProvider.CreateDbContext();
var images = item.ImageInfos.Select(e => Map(item.Id, e)).ToArray();
if (!context.BaseItems.Any(bi => bi.Id == item.Id))
var context = await _dbProvider.CreateDbContextAsync(cancellationToken).ConfigureAwait(false);
await using (context.ConfigureAwait(false))
{
_logger.LogWarning("Unable to save ImageInfo for non existing BaseItem");
return;
}
if (!await context.BaseItems
.AnyAsync(bi => bi.Id == item.Id, cancellationToken)
.ConfigureAwait(false))
{
_logger.LogWarning("Unable to save ImageInfo for non existing BaseItem");
return;
}
context.BaseItemImageInfos.Where(e => e.ItemId == item.Id).ExecuteDelete();
context.BaseItemImageInfos.AddRange(images);
context.SaveChanges();
await context.BaseItemImageInfos
.Where(e => e.ItemId == item.Id)
.ExecuteDeleteAsync(cancellationToken)
.ConfigureAwait(false);
await context.BaseItemImageInfos
.AddRangeAsync(images, cancellationToken)
.ConfigureAwait(false);
await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
}
}
/// <inheritdoc />

View File

@ -33,7 +33,7 @@ public interface IItemRepository
/// <param name="cancellationToken">The cancellation token.</param>
void SaveItems(IReadOnlyList<BaseItem> items, CancellationToken cancellationToken);
void SaveImages(BaseItem item);
Task SaveImagesAsync(BaseItem item, CancellationToken cancellationToken = default);
/// <summary>
/// Retrieves the item.