Library: Async the SaveImages function (#15718)
Some checks failed
Stale PR Check / Check PRs with merge conflicts (push) Has been cancelled
Stale Issue Labeler / Check for stale issues (push) Has been cancelled
CodeQL / Analyze (csharp) (push) Has been cancelled
OpenAPI / OpenAPI - HEAD (push) Has been cancelled
OpenAPI / OpenAPI - BASE (push) Has been cancelled
Tests / run-tests (macos-latest) (push) Has been cancelled
Tests / run-tests (ubuntu-latest) (push) Has been cancelled
Tests / run-tests (windows-latest) (push) Has been cancelled
Project Automation / Project board (push) Has been cancelled
Merge Conflict Labeler / Labeling (push) Has been cancelled
OpenAPI / OpenAPI - Difference (push) Has been cancelled
OpenAPI / OpenAPI - Publish Unstable Spec (push) Has been cancelled
OpenAPI / OpenAPI - Publish Stable Spec (push) Has been cancelled

This commit is contained in:
Luigi311
2025-12-13 08:43:49 -07:00
committed by GitHub
parent 4db0ab0f40
commit 771b0a7eab
3 changed files with 24 additions and 12 deletions

View File

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

View File

@@ -547,22 +547,34 @@ public sealed class BaseItemRepository
} }
/// <inheritdoc /> /// <inheritdoc />
public void SaveImages(BaseItemDto item) public async Task SaveImagesAsync(BaseItemDto item, CancellationToken cancellationToken = default)
{ {
ArgumentNullException.ThrowIfNull(item); ArgumentNullException.ThrowIfNull(item);
var images = item.ImageInfos.Select(e => Map(item.Id, e)); var images = item.ImageInfos.Select(e => Map(item.Id, e)).ToArray();
using var context = _dbProvider.CreateDbContext();
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"); if (!await context.BaseItems
return; .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(); await context.BaseItemImageInfos
context.BaseItemImageInfos.AddRange(images); .Where(e => e.ItemId == item.Id)
context.SaveChanges(); .ExecuteDeleteAsync(cancellationToken)
.ConfigureAwait(false);
await context.BaseItemImageInfos
.AddRangeAsync(images, cancellationToken)
.ConfigureAwait(false);
await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
}
} }
/// <inheritdoc /> /// <inheritdoc />

View File

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