aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/SessionsService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/SessionsService.cs')
-rw-r--r--MediaBrowser.Api/SessionsService.cs64
1 files changed, 59 insertions, 5 deletions
diff --git a/MediaBrowser.Api/SessionsService.cs b/MediaBrowser.Api/SessionsService.cs
index 590fd6f06..271e5bbd6 100644
--- a/MediaBrowser.Api/SessionsService.cs
+++ b/MediaBrowser.Api/SessionsService.cs
@@ -1,9 +1,13 @@
-using MediaBrowser.Controller.Dto;
+using MediaBrowser.Common.Extensions;
+using MediaBrowser.Controller.Dto;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Model.Net;
using MediaBrowser.Model.Session;
using ServiceStack.ServiceHost;
+using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading;
namespace MediaBrowser.Api
{
@@ -14,11 +18,39 @@ namespace MediaBrowser.Api
[Api(("Gets a list of sessions"))]
public class GetSessions : IReturn<List<SessionInfoDto>>
{
+ [ApiMember(Name = "SupportsRemoteControl", Description = "Optional. Filter by sessions that can be remote controlled.", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
+ public bool? SupportsRemoteControl { get; set; }
+ }
+
+ [Route("/Sessions/{Id}/Viewing", "POST")]
+ [Api(("Instructs a session to browse to an item or view"))]
+ public class BrowseTo : IReturnVoid
+ {
+ [ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
+ public Guid Id { get; set; }
+
/// <summary>
- /// Gets or sets a value indicating whether this instance is recent.
+ /// Artist, Genre, Studio, Person, or any kind of BaseItem
/// </summary>
- /// <value><c>true</c> if this instance is recent; otherwise, <c>false</c>.</value>
- public bool IsRecent { get; set; }
+ /// <value>The type of the item.</value>
+ [ApiMember(Name = "ItemType", Description = "Only required if the item is an Artist, Genre, Studio, or Person.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string ItemType { get; set; }
+
+ /// <summary>
+ /// Artist name, genre name, item Id, etc
+ /// </summary>
+ /// <value>The item identifier.</value>
+ [ApiMember(Name = "ItemIdentifier", Description = "The Id of the item, unless it is an Artist, Genre, Studio, or Person, in which case it should be the name.", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string ItemIdentifier { get; set; }
+
+ /// <summary>
+ /// Gets or sets the context (Movies, Music, TvShows, etc)
+ /// Applicable to genres, studios and persons only because the context of items and artists can be inferred.
+ /// This is optional to supply and clients are free to ignore it.
+ /// </summary>
+ /// <value>The context.</value>
+ [ApiMember(Name = "Context", Description = "The navigation context for the client (movies, music, tvshows, games etc). This is optional to supply and clients are free to ignore it.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")]
+ public string Context { get; set; }
}
/// <summary>
@@ -47,9 +79,31 @@ namespace MediaBrowser.Api
/// <returns>System.Object.</returns>
public object Get(GetSessions request)
{
- var result = request.IsRecent ? _sessionManager.RecentConnections : _sessionManager.AllConnections;
+ var result = _sessionManager.Sessions.Where(i => i.IsActive);
+
+ if (request.SupportsRemoteControl.HasValue)
+ {
+ result = result.Where(i => i.IsActive == request.SupportsRemoteControl.Value);
+ }
return ToOptimizedResult(result.Select(SessionInfoDtoBuilder.GetSessionInfoDto).ToList());
}
+
+ public void Post(BrowseTo request)
+ {
+ var session = _sessionManager.Sessions.FirstOrDefault(i => i.Id == request.Id);
+
+ if (session == null)
+ {
+ throw new ResourceNotFoundException(string.Format("Session {0} not found.", request.Id));
+ }
+
+ session.WebSocket.SendAsync(new WebSocketMessage<BrowseTo>
+ {
+ MessageType = "Browse",
+ Data = request
+
+ }, CancellationToken.None);
+ }
}
}