Fix allow and block queries (#14482)

This commit is contained in:
theguymadmax 2025-07-27 21:28:04 -04:00 committed by GitHub
parent ba54cda774
commit 536437bbe3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 12 deletions

View File

@ -2253,7 +2253,7 @@ 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) .Where(e => !e.ItemValues!.Where(w => w.ItemValue.Type == ItemValueType.InheritedTags || w.ItemValue.Type == ItemValueType.Tags)
.Any(f => filter.ExcludeInheritedTags.Contains(f.ItemValue.CleanValue))); .Any(f => filter.ExcludeInheritedTags.Contains(f.ItemValue.CleanValue)));
} }
@ -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 => .Where(e => e.ItemValues!.Where(f => f.ItemValue.Type == ItemValueType.InheritedTags || f.ItemValue.Type == ItemValueType.Tags)
e.Parents! .Any(f => filter.IncludeInheritedTags.Contains(f.ItemValue.CleanValue))
.Any(f => || e.Data!.Contains($"OwnerUserId\":\"{filter.User!.Id:N}\""));
f.ParentItem.ItemValues!.Any(w => w.ItemValue.Type == ItemValueType.Tags && filter.IncludeInheritedTags.Contains(w.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)));
} }
} }

View File

@ -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); ExcludeInheritedTags = user.GetPreference(PreferenceKind.BlockedTags)
IncludeInheritedTags = user.GetPreference(PreferenceKind.AllowedTags); .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;
} }