aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Channels/Channel.cs6
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs32
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs14
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>