aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/UserLibrary/ItemsService.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-01 21:24:14 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-01 21:24:14 -0500
commitad52d8b5d96bea85c17f37da7ff3334164f8d4a4 (patch)
tree1011a8fb901bfc8422f66f69fa6ee2effc6362fe /MediaBrowser.Api/UserLibrary/ItemsService.cs
parent42a2522637d1772381eecee0d32ed3ef60fa3c73 (diff)
fixes #640 - Add management filters
Diffstat (limited to 'MediaBrowser.Api/UserLibrary/ItemsService.cs')
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs100
1 files changed, 100 insertions, 0 deletions
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index cae74cc2f..d6f348836 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -1,4 +1,5 @@
using System.Globalization;
+using System.IO;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
@@ -6,6 +7,7 @@ using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Localization;
+using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
using ServiceStack.ServiceHost;
@@ -212,6 +214,21 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "MaxPremiereDate", Description = "Optional. The maximum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
public string MaxPremiereDate { get; set; }
+
+ [ApiMember(Name = "HasOverview", Description = "Optional filter by items that have an overview or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
+ public bool? HasOverview { get; set; }
+
+ [ApiMember(Name = "HasImdbId", Description = "Optional filter by items that have an imdb id or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
+ public bool? HasImdbId { get; set; }
+
+ [ApiMember(Name = "HasTmdbId", Description = "Optional filter by items that have a tmdb id or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
+ public bool? HasTmdbId { get; set; }
+
+ [ApiMember(Name = "HasTvdbId", Description = "Optional filter by items that have a tvdb id or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
+ public bool? HasTvdbId { get; set; }
+
+ [ApiMember(Name = "IsYearMismatched", Description = "Optional filter by items that are potentially misidentified.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
+ public bool? IsYearMismatched { get; set; }
}
/// <summary>
@@ -1029,9 +1046,92 @@ namespace MediaBrowser.Api.UserLibrary
items = items.Where(i => i.PremiereDate.HasValue && i.PremiereDate.Value <= date);
}
+ if (request.HasOverview.HasValue)
+ {
+ var filterValue = request.HasOverview.Value;
+
+ items = items.Where(i =>
+ {
+ var hasValue = !string.IsNullOrEmpty(i.Overview);
+
+ return hasValue == filterValue;
+ });
+ }
+
+ if (request.HasImdbId.HasValue)
+ {
+ var filterValue = request.HasImdbId.Value;
+
+ items = items.Where(i =>
+ {
+ var hasValue = !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Imdb));
+
+ return hasValue == filterValue;
+ });
+ }
+
+ if (request.HasTmdbId.HasValue)
+ {
+ var filterValue = request.HasTmdbId.Value;
+
+ items = items.Where(i =>
+ {
+ var hasValue = !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tmdb));
+
+ return hasValue == filterValue;
+ });
+ }
+
+ if (request.HasTvdbId.HasValue)
+ {
+ var filterValue = request.HasTvdbId.Value;
+
+ items = items.Where(i =>
+ {
+ var hasValue = !string.IsNullOrEmpty(i.GetProviderId(MetadataProviders.Tvdb));
+
+ return hasValue == filterValue;
+ });
+ }
+
+ if (request.IsYearMismatched.HasValue)
+ {
+ var filterValue = request.IsYearMismatched.Value;
+
+ items = items.Where(i => IsYearMismatched(i) == filterValue);
+ }
+
return items;
}
+ private bool IsYearMismatched(BaseItem item)
+ {
+ if (item.ProductionYear.HasValue)
+ {
+ var path = item.Path;
+
+ if (!string.IsNullOrEmpty(path))
+ {
+ int? yearInName;
+ string name;
+ NameParser.ParseName(Path.GetFileName(path), out name, out yearInName);
+
+ // Go up a level if we didn't get a year
+ if (!yearInName.HasValue)
+ {
+ NameParser.ParseName(Path.GetFileName(Path.GetDirectoryName(path)), out name, out yearInName);
+ }
+
+ if (yearInName.HasValue)
+ {
+ return yearInName.Value != item.ProductionYear.Value;
+ }
+ }
+ }
+
+ return false;
+ }
+
/// <summary>
/// Determines whether the specified item has image.
/// </summary>