aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs2
-rw-r--r--Jellyfin.Server.Implementations/Item/BaseItemRepository.cs32
-rw-r--r--MediaBrowser.Controller/Persistence/IItemRepository.cs2
3 files changed, 24 insertions, 12 deletions
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index cab87e53d..30c3e89b4 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -2143,7 +2143,7 @@ namespace Emby.Server.Implementations.Library
item.ValidateImages();
- _itemRepository.SaveImages(item);
+ await _itemRepository.SaveImagesAsync(item).ConfigureAwait(false);
RegisterItem(item);
}
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
index dfe46ef8f..9851d53c4 100644
--- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
+++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs
@@ -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 />
diff --git a/MediaBrowser.Controller/Persistence/IItemRepository.cs b/MediaBrowser.Controller/Persistence/IItemRepository.cs
index 0026ab2b5..00c492742 100644
--- a/MediaBrowser.Controller/Persistence/IItemRepository.cs
+++ b/MediaBrowser.Controller/Persistence/IItemRepository.cs
@@ -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.