Fixed Scan saving library items

pull/12798/head
JPVenson 4 months ago
parent 2060d0ca2c
commit e43e34eab8

@ -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
});
}
}

@ -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()
{

Loading…
Cancel
Save