Browse Source

Fix allow and block queries (#14482)

theguymadmax 5 days ago
parent
commit
536437bbe3

+ 9 - 10
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs

@@ -2253,8 +2253,8 @@ public sealed class BaseItemRepository
         if (filter.ExcludeInheritedTags.Length > 0)
         if (filter.ExcludeInheritedTags.Length > 0)
         {
         {
             baseQuery = baseQuery
             baseQuery = baseQuery
-                .Where(e => !e.ItemValues!.Where(w => w.ItemValue.Type == ItemValueType.InheritedTags)
-                    .Any(f => filter.ExcludeInheritedTags.Contains(f.ItemValue.CleanValue)));
+                .Where(e => !e.ItemValues!.Where(w => w.ItemValue.Type == ItemValueType.InheritedTags || w.ItemValue.Type == ItemValueType.Tags)
+                .Any(f => filter.ExcludeInheritedTags.Contains(f.ItemValue.CleanValue)));
         }
         }
 
 
         if (filter.IncludeInheritedTags.Length > 0)
         if (filter.IncludeInheritedTags.Length > 0)
@@ -2264,10 +2264,10 @@ public sealed class BaseItemRepository
             if (includeTypes.Length == 1 && includeTypes.FirstOrDefault() is BaseItemKind.Episode)
             if (includeTypes.Length == 1 && includeTypes.FirstOrDefault() is BaseItemKind.Episode)
             {
             {
                 baseQuery = baseQuery
                 baseQuery = baseQuery
-                    .Where(e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.InheritedTags)
+                    .Where(e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.InheritedTags || f.ItemValue.Type == ItemValueType.Tags)
                         .Any(f => filter.IncludeInheritedTags.Contains(f.ItemValue.CleanValue))
                         .Any(f => filter.IncludeInheritedTags.Contains(f.ItemValue.CleanValue))
                         ||
                         ||
-                        (e.ParentId.HasValue && context.ItemValuesMap.Where(w => w.ItemId == e.ParentId.Value)!.Where(w => w.ItemValue.Type == ItemValueType.InheritedTags)
+                        (e.ParentId.HasValue && context.ItemValuesMap.Where(w => w.ItemId == e.ParentId.Value && (w.ItemValue.Type == ItemValueType.InheritedTags || w.ItemValue.Type == ItemValueType.Tags))
                         .Any(f => filter.IncludeInheritedTags.Contains(f.ItemValue.CleanValue))));
                         .Any(f => filter.IncludeInheritedTags.Contains(f.ItemValue.CleanValue))));
             }
             }
 
 
@@ -2275,17 +2275,16 @@ public sealed class BaseItemRepository
             else if (includeTypes.Length == 1 && includeTypes.FirstOrDefault() is BaseItemKind.Playlist)
             else if (includeTypes.Length == 1 && includeTypes.FirstOrDefault() is BaseItemKind.Playlist)
             {
             {
                 baseQuery = baseQuery
                 baseQuery = baseQuery
-                    .Where(e =>
-                    e.Parents!
-                        .Any(f =>
-                            f.ParentItem.ItemValues!.Any(w => w.ItemValue.Type == ItemValueType.Tags && filter.IncludeInheritedTags.Contains(w.ItemValue.CleanValue))
-                            || e.Data!.Contains($"OwnerUserId\":\"{filter.User!.Id:N}\"")));
+                    .Where(e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.InheritedTags || f.ItemValue.Type == ItemValueType.Tags)
+                        .Any(f => filter.IncludeInheritedTags.Contains(f.ItemValue.CleanValue))
+                        || e.Data!.Contains($"OwnerUserId\":\"{filter.User!.Id:N}\""));
                 // d        ^^ this is stupid it hate this.
                 // d        ^^ this is stupid it hate this.
             }
             }
             else
             else
             {
             {
                 baseQuery = baseQuery
                 baseQuery = baseQuery
-                    .Where(e => e.Parents!.Any(f => f.ParentItem.ItemValues!.Any(w => w.ItemValue.Type == ItemValueType.Tags && filter.IncludeInheritedTags.Contains(w.ItemValue.CleanValue))));
+                    .Where(e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.InheritedTags || f.ItemValue.Type == ItemValueType.Tags)
+                        .Any(f => filter.IncludeInheritedTags.Contains(f.ItemValue.CleanValue)));
             }
             }
         }
         }
 
 

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

@@ -3,6 +3,7 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Linq;
 using System.Linq;
+using Diacritics.Extensions;
 using Jellyfin.Data;
 using Jellyfin.Data;
 using Jellyfin.Data.Enums;
 using Jellyfin.Data.Enums;
 using Jellyfin.Database.Implementations.Entities;
 using Jellyfin.Database.Implementations.Entities;
@@ -373,8 +374,15 @@ namespace MediaBrowser.Controller.Entities
                 .Where(i => i != other)
                 .Where(i => i != other)
                 .Select(e => Enum.Parse<UnratedItem>(e, true)).ToArray();
                 .Select(e => Enum.Parse<UnratedItem>(e, true)).ToArray();
 
 
-            ExcludeInheritedTags = user.GetPreference(PreferenceKind.BlockedTags);
-            IncludeInheritedTags = user.GetPreference(PreferenceKind.AllowedTags);
+            ExcludeInheritedTags = user.GetPreference(PreferenceKind.BlockedTags)
+                .Where(tag => !string.IsNullOrWhiteSpace(tag))
+                .Select(tag => tag.RemoveDiacritics().ToLowerInvariant())
+                .ToArray();
+
+            IncludeInheritedTags = user.GetPreference(PreferenceKind.AllowedTags)
+                .Where(tag => !string.IsNullOrWhiteSpace(tag))
+                .Select(tag => tag.RemoveDiacritics().ToLowerInvariant())
+                .ToArray();
 
 
             User = user;
             User = user;
         }
         }