Bladeren bron

Add Genre cleanup and fix cleanup filter queries (#13891)

Tim Eisele 1 maand geleden
bovenliggende
commit
cad8de9701

+ 23 - 0
Emby.Server.Implementations/Library/Validators/GenresValidator.cs

@@ -1,6 +1,9 @@
 using System;
+using System.Globalization;
 using System.Threading;
 using System.Threading.Tasks;
+using Jellyfin.Data.Enums;
+using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Persistence;
 using Microsoft.Extensions.Logging;
@@ -75,6 +78,26 @@ namespace Emby.Server.Implementations.Library.Validators
                 progress.Report(percent);
             }
 
+            var deadEntities = _libraryManager.GetItemList(new InternalItemsQuery
+            {
+                IncludeItemTypes = [BaseItemKind.Genre],
+                IsDeadGenre = true,
+                IsLocked = false
+            });
+
+            foreach (var item in deadEntities)
+            {
+                _logger.LogInformation("Deleting dead {ItemType} {ItemId} {ItemName}", item.GetType().Name, item.Id.ToString("N", CultureInfo.InvariantCulture), item.Name);
+
+                _libraryManager.DeleteItem(
+                    item,
+                    new DeleteOptions
+                    {
+                        DeleteFileLocation = false
+                    },
+                    false);
+            }
+
             progress.Report(100);
         }
     }

+ 8 - 2
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs

@@ -1962,13 +1962,19 @@ public sealed class BaseItemRepository
         if (filter.IsDeadArtist.HasValue && filter.IsDeadArtist.Value)
         {
             baseQuery = baseQuery
-                    .Where(e => e.ItemValues!.Count(f => f.ItemValue.Type == ItemValueType.Artist || f.ItemValue.Type == ItemValueType.AlbumArtist) == 1);
+                    .Where(e => !context.ItemValues.Where(f => _getAllArtistsValueTypes.Contains(f.Type)).Any(f => f.Value == e.Name));
         }
 
         if (filter.IsDeadStudio.HasValue && filter.IsDeadStudio.Value)
         {
             baseQuery = baseQuery
-                    .Where(e => e.ItemValues!.Count(f => f.ItemValue.Type == ItemValueType.Studios) == 1);
+                    .Where(e => !context.ItemValues.Where(f => _getStudiosValueTypes.Contains(f.Type)).Any(f => f.Value == e.Name));
+        }
+
+        if (filter.IsDeadGenre.HasValue && filter.IsDeadGenre.Value)
+        {
+            baseQuery = baseQuery
+                    .Where(e => !context.ItemValues.Where(f => _getGenreValueTypes.Contains(f.Type)).Any(f => f.Value == e.Name));
         }
 
         if (filter.IsDeadPerson.HasValue && filter.IsDeadPerson.Value)

+ 2 - 0
MediaBrowser.Controller/Entities/InternalItemsQuery.cs

@@ -306,6 +306,8 @@ namespace MediaBrowser.Controller.Entities
 
         public bool? IsDeadStudio { get; set; }
 
+        public bool? IsDeadGenre { get; set; }
+
         public bool? IsDeadPerson { get; set; }
 
         /// <summary>