|
@@ -94,7 +94,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
connection.Open();
|
|
|
|
|
|
var baseItemIds = new HashSet<Guid>();
|
|
|
- using (var operation = GetPreparedDbContext("moving TypedBaseItem"))
|
|
|
+ using (var operation = GetPreparedDbContext("Moving TypedBaseItem"))
|
|
|
{
|
|
|
const string typedBaseItemsQuery =
|
|
|
"""
|
|
@@ -121,13 +121,13 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.BaseItems.Local.Count} BaseItem entries", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.BaseItems.Local.Count} BaseItem entries", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (var operation = GetPreparedDbContext("moving ItemValues"))
|
|
|
+ using (var operation = GetPreparedDbContext("Moving ItemValues"))
|
|
|
{
|
|
|
// do not migrate inherited types as they are now properly mapped in search and lookup.
|
|
|
const string itemValueQuery =
|
|
@@ -138,7 +138,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
|
|
|
// EFCores local lookup sucks. We cannot use context.ItemValues.Local here because its just super slow.
|
|
|
var localItems = new Dictionary<(int Type, string Value), (Database.Implementations.Entities.ItemValue ItemValue, List<Guid> ItemIds)>();
|
|
|
- using (new TrackedMigrationStep("loading ItemValues", _logger))
|
|
|
+ using (new TrackedMigrationStep("Loading ItemValues", _logger))
|
|
|
{
|
|
|
foreach (SqliteDataReader dto in connection.Query(itemValueQuery))
|
|
|
{
|
|
@@ -166,13 +166,13 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.ItemValues.Local.Count} ItemValues entries", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.ItemValues.Local.Count} ItemValues entries", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (var operation = GetPreparedDbContext("moving UserData"))
|
|
|
+ using (var operation = GetPreparedDbContext("Moving UserData"))
|
|
|
{
|
|
|
var queryResult = connection.Query(
|
|
|
"""
|
|
@@ -181,7 +181,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
WHERE EXISTS(SELECT 1 FROM TypedBaseItems WHERE TypedBaseItems.UserDataKey = UserDatas.key)
|
|
|
""");
|
|
|
|
|
|
- using (new TrackedMigrationStep("loading UserData", _logger))
|
|
|
+ using (new TrackedMigrationStep("Loading UserData", _logger))
|
|
|
{
|
|
|
var users = operation.JellyfinDbContext.Users.AsNoTracking().ToImmutableArray();
|
|
|
var userIdBlacklist = new HashSet<int>();
|
|
@@ -218,7 +218,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
|
|
|
legacyBaseItemWithUserKeys.Clear();
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.UserData.Local.Count} UserData entries", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.UserData.Local.Count} UserData entries", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
@@ -237,7 +237,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
WHERE EXISTS(SELECT 1 FROM TypedBaseItems WHERE TypedBaseItems.guid = MediaStreams.ItemId)
|
|
|
""";
|
|
|
|
|
|
- using (new TrackedMigrationStep("loading MediaStreamInfos", _logger))
|
|
|
+ using (new TrackedMigrationStep("Loading MediaStreamInfos", _logger))
|
|
|
{
|
|
|
foreach (SqliteDataReader dto in connection.Query(mediaStreamQuery))
|
|
|
{
|
|
@@ -245,13 +245,13 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.MediaStreamInfos.Local.Count} MediaStreamInfos entries", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.MediaStreamInfos.Local.Count} MediaStreamInfos entries", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (var operation = GetPreparedDbContext("moving AttachmentStreamInfos"))
|
|
|
+ using (var operation = GetPreparedDbContext("Moving AttachmentStreamInfos"))
|
|
|
{
|
|
|
const string mediaAttachmentQuery =
|
|
|
"""
|
|
@@ -260,7 +260,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
WHERE EXISTS(SELECT 1 FROM TypedBaseItems WHERE TypedBaseItems.guid = mediaattachments.ItemId)
|
|
|
""";
|
|
|
|
|
|
- using (new TrackedMigrationStep("loading AttachmentStreamInfos", _logger))
|
|
|
+ using (new TrackedMigrationStep("Loading AttachmentStreamInfos", _logger))
|
|
|
{
|
|
|
foreach (SqliteDataReader dto in connection.Query(mediaAttachmentQuery))
|
|
|
{
|
|
@@ -268,13 +268,13 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.AttachmentStreamInfos.Local.Count} AttachmentStreamInfos entries", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.AttachmentStreamInfos.Local.Count} AttachmentStreamInfos entries", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (var operation = GetPreparedDbContext("moving People"))
|
|
|
+ using (var operation = GetPreparedDbContext("Moving People"))
|
|
|
{
|
|
|
const string personsQuery =
|
|
|
"""
|
|
@@ -284,14 +284,14 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
|
|
|
var peopleCache = new Dictionary<string, (People Person, List<PeopleBaseItemMap> Items)>();
|
|
|
|
|
|
- using (new TrackedMigrationStep("loading People", _logger))
|
|
|
+ using (new TrackedMigrationStep("Loading People", _logger))
|
|
|
{
|
|
|
foreach (SqliteDataReader reader in connection.Query(personsQuery))
|
|
|
{
|
|
|
var itemId = reader.GetGuid(0);
|
|
|
if (!baseItemIds.Contains(itemId))
|
|
|
{
|
|
|
- _logger.LogError("Dont save person {0} because its not in use by any BaseItem", reader.GetString(1));
|
|
|
+ _logger.LogError("Not saving person {0} because it's not in use by any BaseItem", reader.GetString(1));
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -330,13 +330,13 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
peopleCache.Clear();
|
|
|
}
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.Peoples.Local.Count} People entries and {operation.JellyfinDbContext.PeopleBaseItemMap.Local.Count} maps", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.Peoples.Local.Count} People entries and {operation.JellyfinDbContext.PeopleBaseItemMap.Local.Count} maps", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (var operation = GetPreparedDbContext("moving Chapters"))
|
|
|
+ using (var operation = GetPreparedDbContext("Moving Chapters"))
|
|
|
{
|
|
|
const string chapterQuery =
|
|
|
"""
|
|
@@ -344,7 +344,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
WHERE EXISTS(SELECT 1 FROM TypedBaseItems WHERE TypedBaseItems.guid = Chapters2.ItemId)
|
|
|
""";
|
|
|
|
|
|
- using (new TrackedMigrationStep("loading Chapters", _logger))
|
|
|
+ using (new TrackedMigrationStep("Loading Chapters", _logger))
|
|
|
{
|
|
|
foreach (SqliteDataReader dto in connection.Query(chapterQuery))
|
|
|
{
|
|
@@ -353,13 +353,13 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.Chapters.Local.Count} Chapters entries", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.Chapters.Local.Count} Chapters entries", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (var operation = GetPreparedDbContext("moving AncestorIds"))
|
|
|
+ using (var operation = GetPreparedDbContext("Moving AncestorIds"))
|
|
|
{
|
|
|
const string ancestorIdsQuery =
|
|
|
"""
|
|
@@ -370,7 +370,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
EXISTS(SELECT 1 FROM TypedBaseItems WHERE TypedBaseItems.guid = AncestorIds.AncestorId)
|
|
|
""";
|
|
|
|
|
|
- using (new TrackedMigrationStep("loading AncestorIds", _logger))
|
|
|
+ using (new TrackedMigrationStep("Loading AncestorIds", _logger))
|
|
|
{
|
|
|
foreach (SqliteDataReader dto in connection.Query(ancestorIdsQuery))
|
|
|
{
|
|
@@ -379,7 +379,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- using (new TrackedMigrationStep($"saving {operation.JellyfinDbContext.AncestorIds.Local.Count} AncestorId entries", _logger))
|
|
|
+ using (new TrackedMigrationStep($"Saving {operation.JellyfinDbContext.AncestorIds.Local.Count} AncestorId entries", _logger))
|
|
|
{
|
|
|
operation.JellyfinDbContext.SaveChanges();
|
|
|
}
|
|
@@ -407,16 +407,17 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
private UserData? GetUserData(ImmutableArray<User> users, SqliteDataReader dto, HashSet<int> userIdBlacklist)
|
|
|
{
|
|
|
var internalUserId = dto.GetInt32(1);
|
|
|
- var user = users.FirstOrDefault(e => e.InternalId == internalUserId);
|
|
|
+ if (userIdBlacklist.Contains(internalUserId))
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
+ var user = users.FirstOrDefault(e => e.InternalId == internalUserId);
|
|
|
if (user is null)
|
|
|
{
|
|
|
- if (userIdBlacklist.Contains(internalUserId))
|
|
|
- {
|
|
|
- return null;
|
|
|
- }
|
|
|
+ _logger.LogError("Tried to find user with index '{Idx}' but was not found, skipping user data import.", internalUserId);
|
|
|
+ userIdBlacklist.Add(internalUserId);
|
|
|
|
|
|
- _logger.LogError("Tried to find user with index '{Idx}' but there are only '{MaxIdx}' users.", internalUserId, users.Length);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
@@ -1168,7 +1169,7 @@ internal class MigrateLibraryDb : IDatabaseMigrationRoutine
|
|
|
entity.UnratedType = unratedType;
|
|
|
}
|
|
|
|
|
|
- var baseItem = BaseItemRepository.DeserialiseBaseItem(entity, _logger, null, false);
|
|
|
+ var baseItem = BaseItemRepository.DeserializeBaseItem(entity, _logger, null, false);
|
|
|
var dataKeys = baseItem.GetUserDataKeys();
|
|
|
userDataKeys.AddRange(dataKeys);
|
|
|
|