2
0
Эх сурвалжийг харах

Fix incomplete tag query for whitelist tags (#11416)

gnattu 1 жил өмнө
parent
commit
5dc6bb4910

+ 13 - 1
Emby.Server.Implementations/Data/SqliteItemRepository.cs

@@ -4202,7 +4202,19 @@ namespace Emby.Server.Implementations.Data
                 {
                     int index = 0;
                     string includedTags = string.Join(',', query.IncludeInheritedTags.Select(_ => paramName + index++));
-                    whereClauses.Add("((select CleanValue from ItemValues where ItemId=Guid and Type=6 and cleanvalue in (" + includedTags + ")) is not null)");
+                    // Episodes do not store inherit tags from their parents in the database, and the tag may be still required by the client.
+                    // In addtion to the tags for the episodes themselves, we need to manually query its parent (the season)'s tags as well.
+                    if (includeTypes.Length == 1 && includeTypes.FirstOrDefault() is BaseItemKind.Episode)
+                    {
+                        whereClauses.Add($"""
+                                          ((select CleanValue from ItemValues where ItemId=Guid and Type=6 and CleanValue in ({includedTags})) is not null
+                                          OR (select CleanValue from ItemValues where ItemId=ParentId and Type=6 and CleanValue in ({includedTags})) is not null)
+                                          """);
+                    }
+                    else
+                    {
+                        whereClauses.Add("((select CleanValue from ItemValues where ItemId=Guid and Type=6 and cleanvalue in (" + includedTags + ")) is not null)");
+                    }
                 }
                 else
                 {

+ 7 - 0
Jellyfin.Api/Controllers/ItemsController.cs

@@ -256,6 +256,13 @@ public class ItemsController : BaseJellyfinApiController
             return BadRequest("userId is required");
         }
 
+        if (user is not null
+            && user.GetPreference(PreferenceKind.AllowedTags).Length != 0
+            && !fields.Contains(ItemFields.Tags))
+        {
+            fields = [..fields, ItemFields.Tags];
+        }
+
         var dtoOptions = new DtoOptions { Fields = fields }
             .AddClientFields(User)
             .AddAdditionalDtoOptions(enableImages, enableUserData, imageTypeLimit, enableImageTypes);

+ 1 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1610,7 +1610,7 @@ namespace MediaBrowser.Controller.Entities
             }
 
             var parent = GetParents().FirstOrDefault() ?? this;
-            if (parent is UserRootFolder)
+            if (parent is UserRootFolder or AggregateFolder)
             {
                 return true;
             }