diff options
| author | Shadowghost <Ghost_of_Stone@web.de> | 2026-01-31 23:44:07 +0100 |
|---|---|---|
| committer | Shadowghost <Ghost_of_Stone@web.de> | 2026-01-31 23:45:38 +0100 |
| commit | 09a729effe1c0eeccd3bbc7482923b4d1cdabfc1 (patch) | |
| tree | 6e4cece5eac29c5e0252724fff2d868786177a78 /MediaBrowser.Controller/Entities | |
| parent | 2789532aa88ccc899ff8497537642e1d78b31ef5 (diff) | |
Fix tag checks
Diffstat (limited to 'MediaBrowser.Controller/Entities')
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 13af7a6178..f1c1555842 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1671,16 +1671,26 @@ namespace MediaBrowser.Controller.Entities private bool IsVisibleViaTags(User user, bool skipAllowedTagsCheck) { - var allowedTagsPreference = user.GetPreference(PreferenceKind.AllowedTags); - var blockedTagsPreference = user.GetPreference(PreferenceKind.BlockedTags); - var needsTagCheck = allowedTagsPreference.Length > 0 || blockedTagsPreference.Length > 0; - if (!needsTagCheck) + var blockedTags = user.GetPreference(PreferenceKind.BlockedTags); + var allowedTags = user.GetPreference(PreferenceKind.AllowedTags); + + if (blockedTags.Length == 0 && allowedTags.Length == 0) { return true; } - var allTags = GetInheritedTags(); - if (blockedTagsPreference.Any(i => allTags.Contains(i, StringComparison.OrdinalIgnoreCase))) + // Normalize tags using the same logic as database queries + var normalizedBlockedTags = blockedTags + .Where(t => !string.IsNullOrWhiteSpace(t)) + .Select(t => t.GetCleanValue()) + .ToHashSet(StringComparer.Ordinal); + + var normalizedItemTags = GetInheritedTags() + .Select(t => t.GetCleanValue()) + .ToHashSet(StringComparer.Ordinal); + + // Check blocked tags - item is hidden if it has any blocked tag + if (normalizedBlockedTags.Overlaps(normalizedItemTags)) { return false; } @@ -1691,9 +1701,18 @@ namespace MediaBrowser.Controller.Entities return true; } - if (!skipAllowedTagsCheck && !allowedTagsPreference.Any(i => allTags.Contains(i, StringComparison.OrdinalIgnoreCase))) + // Check allowed tags - item must have at least one allowed tag + if (!skipAllowedTagsCheck && allowedTags.Length > 0) { - return false; + var normalizedAllowedTags = allowedTags + .Where(t => !string.IsNullOrWhiteSpace(t)) + .Select(t => t.GetCleanValue()) + .ToHashSet(StringComparer.Ordinal); + + if (!normalizedAllowedTags.Overlaps(normalizedItemTags)) + { + return false; + } } return true; |
