Ver código fonte

Merge pull request #4699 from crobibero/display_prefs_index

Fix CustomItemDisplayPreferences unique key collision in the migration

(cherry picked from commit b3caa51173080ec813054c78ae9a66a685288de4)
Signed-off-by: Joshua M. Boniface <joshua@boniface.me>
Bond-009 4 anos atrás
pai
commit
b1af8db423

+ 8 - 1
Jellyfin.Server/Migrations/Routines/MigrateDisplayPreferencesDb.cs

@@ -81,6 +81,7 @@ namespace Jellyfin.Server.Migrations.Routines
                 { "unstable", ChromecastVersion.Unstable }
                 { "unstable", ChromecastVersion.Unstable }
             };
             };
 
 
+            var customDisplayPrefs = new HashSet<string>();
             var dbFilePath = Path.Combine(_paths.DataPath, DbFilename);
             var dbFilePath = Path.Combine(_paths.DataPath, DbFilename);
             using (var connection = SQLite3.Open(dbFilePath, ConnectionFlags.ReadOnly, null))
             using (var connection = SQLite3.Open(dbFilePath, ConnectionFlags.ReadOnly, null))
             {
             {
@@ -185,7 +186,13 @@ namespace Jellyfin.Server.Migrations.Routines
 
 
                     foreach (var (key, value) in dto.CustomPrefs)
                     foreach (var (key, value) in dto.CustomPrefs)
                     {
                     {
-                        dbContext.Add(new CustomItemDisplayPreferences(displayPreferences.UserId, itemId, displayPreferences.Client, key, value));
+                        // Custom display preferences can have a key collision.
+                        var indexKey = $"{displayPreferences.UserId}|{itemId}|{displayPreferences.Client}|{key}";
+                        if (!customDisplayPrefs.Contains(indexKey))
+                        {
+                            dbContext.Add(new CustomItemDisplayPreferences(displayPreferences.UserId, itemId, displayPreferences.Client, key, value));
+                            customDisplayPrefs.Add(indexKey);
+                        }
                     }
                     }
 
 
                     dbContext.Add(displayPreferences);
                     dbContext.Add(displayPreferences);