diff options
| author | JPVenson <github@jpb.email> | 2024-11-13 20:28:52 +0000 |
|---|---|---|
| committer | JPVenson <github@jpb.email> | 2024-11-13 20:28:52 +0000 |
| commit | e43e34eab89b1ef074641cee62b9640c2a2f7ff0 (patch) | |
| tree | db0f8399e47895cc8124215857374fb2c8123b37 | |
| parent | 2060d0ca2c1eab6c1087f3edfa56e7cb92331c22 (diff) | |
Fixed Scan saving library items
| -rw-r--r-- | Jellyfin.Server.Implementations/Item/BaseItemRepository.cs | 60 | ||||
| -rw-r--r-- | Jellyfin.Server.Implementations/Item/PeopleRepository.cs | 6 |
2 files changed, 30 insertions, 36 deletions
diff --git a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs index 099093433..b367cb9f7 100644 --- a/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs +++ b/Jellyfin.Server.Implementations/Item/BaseItemRepository.cs @@ -1219,15 +1219,23 @@ public sealed class BaseItemRepository( /// <inheritdoc cref="IItemRepository" /> public void SaveImages(BaseItemDto item) { - ArgumentNullException.ThrowIfNull(item); + try + { + ArgumentNullException.ThrowIfNull(item); - var images = item.ImageInfos.Select(e => Map(item.Id, e)); - using var context = dbProvider.CreateDbContext(); - using var transaction = context.Database.BeginTransaction(); - context.BaseItemImageInfos.Where(e => e.ItemId == item.Id).ExecuteDelete(); - context.BaseItemImageInfos.AddRange(images); - context.SaveChanges(); - transaction.Commit(); + var images = item.ImageInfos.Select(e => Map(item.Id, e)); + using var context = dbProvider.CreateDbContext(); + using var transaction = context.Database.BeginTransaction(); + context.BaseItemImageInfos.Where(e => e.ItemId == item.Id).ExecuteDelete(); + context.BaseItemImageInfos.AddRange(images); + context.SaveChanges(); + transaction.Commit(); + } + catch (System.Exception ex) + { + System.Console.WriteLine(ex); + throw; + } } /// <inheritdoc cref="IItemRepository" /> @@ -1291,40 +1299,30 @@ public sealed class BaseItemRepository( var itemValuesToSave = GetItemValuesToSave(item.Item, item.InheritedTags); context.ItemValuesMap.Where(e => e.ItemId == entity.Id).ExecuteDelete(); - entity.ItemValues = new List<ItemValueMap>(); - foreach (var itemValue in itemValuesToSave) { var refValue = context.ItemValues .Where(f => f.CleanValue == GetCleanValue(itemValue.Value) && (int)f.Type == itemValue.MagicNumber) .Select(e => e.ItemValueId) .FirstOrDefault(); - if (!refValue.IsEmpty()) + if (refValue.IsEmpty()) { - entity.ItemValues.Add(new ItemValueMap() + context.ItemValues.Add(new ItemValue() { - Item = entity, - ItemId = entity.Id, - ItemValue = null!, - ItemValueId = refValue + CleanValue = GetCleanValue(itemValue.Value), + Type = (ItemValueType)itemValue.MagicNumber, + ItemValueId = refValue = Guid.NewGuid(), + Value = itemValue.Value }); } - else + + context.ItemValuesMap.Add(new ItemValueMap() { - entity.ItemValues.Add(new ItemValueMap() - { - Item = entity, - ItemId = entity.Id, - ItemValue = new ItemValue() - { - CleanValue = GetCleanValue(itemValue.Value), - Type = (ItemValueType)itemValue.MagicNumber, - ItemValueId = Guid.NewGuid(), - Value = itemValue.Value - }, - ItemValueId = Guid.Empty - }); - } + Item = null!, + ItemId = entity.Id, + ItemValue = null!, + ItemValueId = refValue + }); } } diff --git a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs index e22fd0806..0812955a8 100644 --- a/Jellyfin.Server.Implementations/Item/PeopleRepository.cs +++ b/Jellyfin.Server.Implementations/Item/PeopleRepository.cs @@ -61,7 +61,7 @@ public class PeopleRepository(IDbContextFactory<JellyfinDbContext> dbProvider, I using var transaction = context.Database.BeginTransaction(); context.PeopleBaseItemMap.Where(e => e.ItemId == itemId).ExecuteDelete(); - foreach (var item in people) + foreach (var item in people.DistinctBy(e => e.Id)) // yes for __SOME__ reason there can be duplicates. { var personEntity = Map(item); var existingEntity = context.Peoples.FirstOrDefault(e => e.Id == personEntity.Id); @@ -70,10 +70,6 @@ public class PeopleRepository(IDbContextFactory<JellyfinDbContext> dbProvider, I context.Peoples.Add(personEntity); existingEntity = personEntity; } - else - { - context.Peoples.Attach(personEntity).State = EntityState.Modified; - } context.PeopleBaseItemMap.Add(new PeopleBaseItemMap() { |
