aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/TvShowsService.cs60
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs59
-rw-r--r--MediaBrowser.Api/UserLibrary/UserLibraryService.cs16
3 files changed, 124 insertions, 11 deletions
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 15d6c0ae2d..fad17814ec 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -1,4 +1,6 @@
-using MediaBrowser.Controller.Dto;
+using System.Collections;
+using System.Globalization;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
@@ -46,6 +48,18 @@ namespace MediaBrowser.Api
[ApiMember(Name = "Fields", Description = "Optional. Specify additional fields of information to return in the output. This allows multiple, comma delimeted. Options: Budget, Chapters, CriticRatingSummary, DateCreated, Genres, HomePageUrl, IndexOptions, MediaStreams, Overview, OverviewHtml, ParentId, Path, People, ProviderIds, PrimaryImageAspectRatio, Revenue, SortName, Studios, Taglines, TrailerUrls", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
public string Fields { get; set; }
+ [ApiMember(Name = "ExcludeLocationTypes", Description = "Optional. If specified, results will be filtered based on LocationType. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
+ public string ExcludeLocationTypes { get; set; }
+
+ [ApiMember(Name = "MinPremiereDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string MinPremiereDate { get; set; }
+
+ [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 = "HasPremiereDate", Description = "Optional filter by items with premiere dates.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public bool? HasPremiereDate { get; set; }
+
/// <summary>
/// Gets the item fields.
/// </summary>
@@ -159,7 +173,7 @@ namespace MediaBrowser.Api
var itemsList = user.RootFolder
.GetRecursiveChildren(user, i => i is Series)
.AsParallel()
- .Select(i => GetNextUp((Series)i, user))
+ .Select(i => GetNextUp((Series)i, user, request))
.ToList();
itemsList = itemsList
@@ -202,8 +216,9 @@ namespace MediaBrowser.Api
/// </summary>
/// <param name="series">The series.</param>
/// <param name="user">The user.</param>
+ /// <param name="request">The request.</param>
/// <returns>Task{Episode}.</returns>
- private Tuple<Episode, DateTime> GetNextUp(Series series, User user)
+ private Tuple<Episode, DateTime> GetNextUp(Series series, User user, GetNextUpEpisodes request)
{
var allEpisodes = series.GetRecursiveChildren(user)
.OfType<Episode>()
@@ -211,6 +226,8 @@ namespace MediaBrowser.Api
.ThenByDescending(i => i.IndexNumber ?? 0)
.ToList();
+ allEpisodes = FilterItems(request, allEpisodes).ToList();
+
Episode lastWatched = null;
var lastWatchedDate = DateTime.MinValue;
Episode nextUp = null;
@@ -244,6 +261,43 @@ namespace MediaBrowser.Api
return new Tuple<Episode, DateTime>(null, lastWatchedDate);
}
+
+ private IEnumerable<Episode> FilterItems(GetNextUpEpisodes request, IEnumerable<Episode> items)
+ {
+ // ExcludeLocationTypes
+ if (!string.IsNullOrEmpty(request.ExcludeLocationTypes))
+ {
+ var vals = request.ExcludeLocationTypes.Split(',');
+
+ items = items
+ .Where(f => !vals.Contains(f.LocationType.ToString(), StringComparer.OrdinalIgnoreCase))
+ .ToList();
+ }
+
+ if (!string.IsNullOrEmpty(request.MinPremiereDate))
+ {
+ var date = DateTime.ParseExact(request.MinPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+
+ items = items.Where(i => !i.PremiereDate.HasValue || i.PremiereDate.Value >= date);
+ }
+
+ if (!string.IsNullOrEmpty(request.MaxPremiereDate))
+ {
+ var date = DateTime.ParseExact(request.MaxPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+
+ items = items.Where(i => !i.PremiereDate.HasValue || i.PremiereDate.Value <= date);
+ }
+
+ if (request.HasPremiereDate.HasValue)
+ {
+ var val = request.HasPremiereDate.Value;
+
+ items = items.Where(i => i.PremiereDate.HasValue == val);
+ }
+
+ return items;
+ }
+
/// <summary>
/// Applies the paging.
/// </summary>
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index aff12569f1..cb01dae733 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Dto;
+using System.Globalization;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
using MediaBrowser.Controller.Entities.Movies;
@@ -180,6 +181,21 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "IsHD", Description = "Optional filter by items that are HD or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
public bool? IsHD { get; set; }
+ [ApiMember(Name = "ExcludeLocationTypes", Description = "Optional. If specified, results will be filtered based on LocationType. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
+ public string ExcludeLocationTypes { get; set; }
+
+ [ApiMember(Name = "LocationTypes", Description = "Optional. If specified, results will be filtered based on LocationType. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
+ public string LocationTypes { get; set; }
+
+ [ApiMember(Name = "MinPremiereDate", Description = "Optional. The minimum premiere date. Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string MinPremiereDate { get; set; }
+
+ [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 = "HasPremiereDate", Description = "Optional filter by items with premiere dates.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public bool? HasPremiereDate { get; set; }
+
public bool IncludeIndexContainers { get; set; }
}
@@ -298,7 +314,7 @@ namespace MediaBrowser.Api.UserLibrary
else if (request.Recursive)
{
- items = ((Folder) item).GetRecursiveChildren(user);
+ items = ((Folder)item).GetRecursiveChildren(user);
}
else
{
@@ -577,6 +593,20 @@ namespace MediaBrowser.Api.UserLibrary
items = items.Where(f => vals.Contains(f.GetType().Name, StringComparer.OrdinalIgnoreCase));
}
+ // ExcludeLocationTypes
+ if (!string.IsNullOrEmpty(request.ExcludeLocationTypes))
+ {
+ var vals = request.ExcludeLocationTypes.Split(',');
+ items = items.Where(f => !vals.Contains(f.LocationType.ToString(), StringComparer.OrdinalIgnoreCase));
+ }
+
+ // LocationTypes
+ if (!string.IsNullOrEmpty(request.LocationTypes))
+ {
+ var vals = request.LocationTypes.Split(',');
+ items = items.Where(f => vals.Contains(f.LocationType.ToString(), StringComparer.OrdinalIgnoreCase));
+ }
+
if (!string.IsNullOrEmpty(request.NameStartsWithOrGreater))
{
items = items.Where(i => string.Compare(request.NameStartsWithOrGreater, i.SortName, StringComparison.CurrentCultureIgnoreCase) < 1);
@@ -645,7 +675,7 @@ namespace MediaBrowser.Api.UserLibrary
var vals = request.AllGenres.Split(',');
items = items.Where(f => vals.All(v => f.Genres.Contains(v, StringComparer.OrdinalIgnoreCase)));
}
-
+
// Apply studio filter
if (!string.IsNullOrEmpty(request.Studios))
{
@@ -818,11 +848,32 @@ namespace MediaBrowser.Api.UserLibrary
{
return song.ParentIndexNumber.HasValue && song.ParentIndexNumber.Value == filterValue;
}
-
+
return true;
});
}
+ if (!string.IsNullOrEmpty(request.MinPremiereDate))
+ {
+ var date = DateTime.ParseExact(request.MinPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+
+ items = items.Where(i => !i.PremiereDate.HasValue || i.PremiereDate.Value >= date);
+ }
+
+ if (!string.IsNullOrEmpty(request.MaxPremiereDate))
+ {
+ var date = DateTime.ParseExact(request.MaxPremiereDate, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+
+ items = items.Where(i => !i.PremiereDate.HasValue || i.PremiereDate.Value <= date);
+ }
+
+ if (request.HasPremiereDate.HasValue)
+ {
+ var val = request.HasPremiereDate.Value;
+
+ items = items.Where(i => i.PremiereDate.HasValue == val);
+ }
+
return items;
}
diff --git a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
index 3041ce6cee..4b3f35e96b 100644
--- a/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
+++ b/MediaBrowser.Api/UserLibrary/UserLibraryService.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Dto;
+using System.Globalization;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV;
@@ -184,8 +185,8 @@ namespace MediaBrowser.Api.UserLibrary
[ApiMember(Name = "UserId", Description = "User Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
public Guid UserId { get; set; }
- [ApiMember(Name = "DatePlayed", Description = "The date the item was played (if any)", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
- public DateTime? DatePlayed { get; set; }
+ [ApiMember(Name = "DatePlayed", Description = "The date the item was played (if any). Format = yyyyMMddHHmmss", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string DatePlayed { get; set; }
/// <summary>
/// Gets or sets the id.
@@ -671,7 +672,14 @@ namespace MediaBrowser.Api.UserLibrary
{
var user = _userManager.GetUserById(request.UserId);
- var task = UpdatePlayedStatus(user, request.Id, true, request.DatePlayed);
+ DateTime? datePlayed = null;
+
+ if (!string.IsNullOrEmpty(request.DatePlayed))
+ {
+ datePlayed = DateTime.ParseExact(request.DatePlayed, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ }
+
+ var task = UpdatePlayedStatus(user, request.Id, true, datePlayed);
return ToOptimizedResult(task.Result);
}