aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api')
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs36
-rw-r--r--MediaBrowser.Api/TvShowsService.cs25
-rw-r--r--MediaBrowser.Api/UserLibrary/ItemsService.cs55
3 files changed, 87 insertions, 29 deletions
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index 4cd75afca..0e40db58c 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -1,12 +1,12 @@
-using System.Threading;
-using System.Threading.Tasks;
-using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.LiveTv;
using MediaBrowser.Model.Querying;
using ServiceStack.ServiceHost;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
namespace MediaBrowser.Api.LiveTv
{
@@ -58,6 +58,22 @@ namespace MediaBrowser.Api.LiveTv
public string ChannelId { get; set; }
}
+ [Route("/LiveTv/Recordings/{Id}", "GET")]
+ [Api(Description = "Gets a live tv recording")]
+ public class GetRecording : IReturn<RecordingInfoDto>
+ {
+ [ApiMember(Name = "Id", Description = "Recording Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
+ public string Id { get; set; }
+ }
+
+ [Route("/LiveTv/Timers/{Id}", "GET")]
+ [Api(Description = "Gets a live tv timer")]
+ public class GetTimer : IReturn<TimerInfoDto>
+ {
+ [ApiMember(Name = "Id", Description = "Timer Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
+ public string Id { get; set; }
+ }
+
[Route("/LiveTv/Timers", "GET")]
[Api(Description = "Gets live tv timers")]
public class GetTimers : IReturn<QueryResult<TimerInfoDto>>
@@ -182,6 +198,20 @@ namespace MediaBrowser.Api.LiveTv
return ToOptimizedResult(result);
}
+ public object Get(GetRecording request)
+ {
+ var result = _liveTvManager.GetRecording(request.Id, CancellationToken.None).Result;
+
+ return ToOptimizedResult(result);
+ }
+
+ public object Get(GetTimer request)
+ {
+ var result = _liveTvManager.GetTimer(request.Id, CancellationToken.None).Result;
+
+ return ToOptimizedResult(result);
+ }
+
public object Get(GetTimers request)
{
var result = _liveTvManager.GetTimers(new TimerQuery
diff --git a/MediaBrowser.Api/TvShowsService.cs b/MediaBrowser.Api/TvShowsService.cs
index 9191bfc0c..68ebd60c5 100644
--- a/MediaBrowser.Api/TvShowsService.cs
+++ b/MediaBrowser.Api/TvShowsService.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Dto;
+using MediaBrowser.Api.UserLibrary;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
@@ -89,6 +90,9 @@ namespace MediaBrowser.Api
[ApiMember(Name = "IsVirtualUnaired", Description = "Optional filter by items that are virtual unaired episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
public bool? IsVirtualUnaired { get; set; }
+
+ [ApiMember(Name = "AdjacentTo", Description = "Optional. Return items that are siblings of a supplied item.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string AdjacentTo { get; set; }
}
[Route("/Shows/{Id}/Seasons", "GET")]
@@ -120,6 +124,9 @@ namespace MediaBrowser.Api
[ApiMember(Name = "IsVirtualUnaired", Description = "Optional filter by items that are virtual unaired episodes or not.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
public bool? IsVirtualUnaired { get; set; }
+
+ [ApiMember(Name = "AdjacentTo", Description = "Optional. Return items that are siblings of a supplied item.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
+ public string AdjacentTo { get; set; }
}
/// <summary>
@@ -394,6 +401,13 @@ namespace MediaBrowser.Api
seasons = _libraryManager.Sort(seasons, user, new[] { sortOrder }, SortOrder.Ascending)
.Cast<Season>();
+ // This must be the last filter
+ if (!string.IsNullOrEmpty(request.AdjacentTo))
+ {
+ seasons = ItemsService.FilterForAdjacency(seasons, request.AdjacentTo)
+ .Cast<Season>();
+ }
+
var returnItems = seasons.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToArray();
@@ -447,7 +461,7 @@ namespace MediaBrowser.Api
if (!string.IsNullOrEmpty(request.SeasonId))
{
- var season = _libraryManager.GetItemById(request.Id) as Season;
+ var season = _libraryManager.GetItemById(new Guid(request.SeasonId)) as Season;
if (season.IndexNumber.HasValue)
{
@@ -496,6 +510,13 @@ namespace MediaBrowser.Api
episodes = _libraryManager.Sort(episodes, user, new[] { sortOrder }, SortOrder.Ascending)
.Cast<Episode>();
+ // This must be the last filter
+ if (!string.IsNullOrEmpty(request.AdjacentTo))
+ {
+ episodes = ItemsService.FilterForAdjacency(episodes, request.AdjacentTo)
+ .Cast<Episode>();
+ }
+
var returnItems = episodes.Select(i => _dtoService.GetBaseItemDto(i, fields, user))
.ToArray();
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 0e40ef395..3a7ea5ddd 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -310,6 +310,12 @@ namespace MediaBrowser.Api.UserLibrary
items = ApplySortOrder(request, items, user, _libraryManager);
+ // This must be the last filter
+ if (!string.IsNullOrEmpty(request.AdjacentTo))
+ {
+ items = FilterForAdjacency(items, request.AdjacentTo);
+ }
+
var itemsArray = items.ToList();
var pagedItems = ApplyPaging(request, itemsArray);
@@ -666,30 +672,6 @@ namespace MediaBrowser.Api.UserLibrary
});
}
- if (!string.IsNullOrEmpty(request.AdjacentTo))
- {
- var item = _dtoService.GetItemByDtoId(request.AdjacentTo);
-
- var allSiblings = item.Parent.GetChildren(user, true).OrderBy(i => i.SortName).ToList();
-
- var index = allSiblings.IndexOf(item);
-
- var previousId = Guid.Empty;
- var nextId = Guid.Empty;
-
- if (index > 0)
- {
- previousId = allSiblings[index - 1].Id;
- }
-
- if (index < allSiblings.Count - 1)
- {
- nextId = allSiblings[index + 1].Id;
- }
-
- items = items.Where(i => i.Id == previousId || i.Id == nextId);
- }
-
// Min index number
if (request.MinIndexNumber.HasValue)
{
@@ -1144,6 +1126,31 @@ namespace MediaBrowser.Api.UserLibrary
return false;
}
+ internal static IEnumerable<BaseItem> FilterForAdjacency(IEnumerable<BaseItem> items, string adjacentToId)
+ {
+ var list = items.ToList();
+
+ var adjacentToIdGuid = new Guid(adjacentToId);
+ var adjacentToItem = list.FirstOrDefault(i => i.Id == adjacentToIdGuid);
+
+ var index = list.IndexOf(adjacentToItem);
+
+ var previousId = Guid.Empty;
+ var nextId = Guid.Empty;
+
+ if (index > 0)
+ {
+ previousId = list[index - 1].Id;
+ }
+
+ if (index < list.Count - 1)
+ {
+ nextId = list[index + 1].Id;
+ }
+
+ return list.Where(i => i.Id == previousId || i.Id == nextId);
+ }
+
/// <summary>
/// Determines whether the specified item has image.
/// </summary>