aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-11-09 23:20:11 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-11-09 23:20:11 -0500
commit95eaf88abd6a979b19f4ee998936ba6f2f4eef4b (patch)
tree566ce2f3c96bc231143df128264c5b9a0047ead7 /MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
parent1a80362a0f04c3cc571456af64f9de19c0c30d2a (diff)
fixes #943 - Add web client filtering by genres, parental ratings, tags and years
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs')
-rw-r--r--MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs56
1 files changed, 48 insertions, 8 deletions
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index 458cf8bae..3ae53daf8 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
@@ -193,13 +193,6 @@ namespace MediaBrowser.Api.UserLibrary
var filters = request.GetFilters().ToList();
- if (filters.Count == 0)
- {
- return items;
- }
-
- items = items.AsParallel();
-
if (filters.Contains(ItemFilter.Dislikes))
{
items = items.Where(i =>
@@ -243,9 +236,56 @@ namespace MediaBrowser.Api.UserLibrary
});
}
- return items.AsEnumerable();
+ // Avoid implicitly captured closure
+ var currentRequest = request;
+ return items.Where(i => ApplyAdditionalFilters(currentRequest, i, user, false));
+ }
+
+ private bool ApplyAdditionalFilters(BaseItemsRequest request, BaseItem i, User user, bool isPreFiltered)
+ {
+ if (!isPreFiltered)
+ {
+ // Apply tag filter
+ var tags = request.GetTags();
+ if (tags.Length > 0)
+ {
+ var hasTags = i as IHasTags;
+ if (hasTags == null)
+ {
+ return false;
+ }
+ if (!(tags.Any(v => hasTags.Tags.Contains(v, StringComparer.OrdinalIgnoreCase))))
+ {
+ return false;
+ }
+ }
+
+ // Apply official rating filter
+ var officialRatings = request.GetOfficialRatings();
+ if (officialRatings.Length > 0 && !officialRatings.Contains(i.OfficialRating ?? string.Empty))
+ {
+ return false;
+ }
+
+ // Apply genre filter
+ var genres = request.GetGenres();
+ if (genres.Length > 0 && !(genres.Any(v => i.Genres.Contains(v, StringComparer.OrdinalIgnoreCase))))
+ {
+ return false;
+ }
+
+ // Apply year filter
+ var years = request.GetYears();
+ if (years.Length > 0 && !(i.ProductionYear.HasValue && years.Contains(i.ProductionYear.Value)))
+ {
+ return false;
+ }
+ }
+
+ return true;
}
+
/// <summary>
/// Filters the items.
/// </summary>