diff options
Diffstat (limited to 'MediaBrowser.Controller')
| -rw-r--r-- | MediaBrowser.Controller/Channels/Channel.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 32 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 14 |
3 files changed, 51 insertions, 1 deletions
diff --git a/MediaBrowser.Controller/Channels/Channel.cs b/MediaBrowser.Controller/Channels/Channel.cs index a482f45fe..ab76f4e67 100644 --- a/MediaBrowser.Controller/Channels/Channel.cs +++ b/MediaBrowser.Controller/Channels/Channel.cs @@ -5,6 +5,7 @@ using System; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Users; namespace MediaBrowser.Controller.Channels { @@ -72,5 +73,10 @@ namespace MediaBrowser.Controller.Channels { return false; } + + protected override bool IsTagFilterEnforced(TagFilterMode mode) + { + return false; + } } } diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 1379ba829..75a09a7b0 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1080,7 +1080,7 @@ namespace MediaBrowser.Controller.Entities if (hasTags != null) { - if (user.Policy.BlockedTags.Any(i => hasTags.Tags.Contains(i, StringComparer.OrdinalIgnoreCase))) + if (user.Policy.TagFilters.Any(i => !IsTagFilterAccepted(hasTags, i))) { return false; } @@ -1089,6 +1089,36 @@ namespace MediaBrowser.Controller.Entities return true; } + private bool IsTagFilterAccepted(IHasTags hasTags, TagFilter filter) + { + if (IsTagFilterEnforced(filter.Mode)) + { + if (filter.Mode == TagFilterMode.Block) + { + // If content has the tag, it's not allowed + if (hasTags.Tags.Contains(filter.Tag, StringComparer.OrdinalIgnoreCase)) + { + return false; + } + } + else if (filter.Mode == TagFilterMode.Allow) + { + // If content doesn't have the tag, it's not allowed + if (!hasTags.Tags.Contains(filter.Tag, StringComparer.OrdinalIgnoreCase)) + { + return false; + } + } + } + + return true; + } + + protected virtual bool IsTagFilterEnforced(TagFilterMode mode) + { + return true; + } + /// <summary> /// Gets the block unrated value. /// </summary> diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index e85dee354..fe9bea53b 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -14,6 +14,7 @@ using System.Linq; using System.Runtime.Serialization; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Users; namespace MediaBrowser.Controller.Entities { @@ -79,6 +80,19 @@ namespace MediaBrowser.Controller.Entities } } + protected override bool IsTagFilterEnforced(TagFilterMode mode) + { + if (this is ICollectionFolder) + { + return false; + } + if (this is UserView) + { + return false; + } + return true; + } + /// <summary> /// Gets or sets a value indicating whether this instance is physical root. /// </summary> |
