diff options
Diffstat (limited to 'MediaBrowser.Api/Session/SessionsService.cs')
| -rw-r--r-- | MediaBrowser.Api/Session/SessionsService.cs | 121 |
1 files changed, 58 insertions, 63 deletions
diff --git a/MediaBrowser.Api/Session/SessionsService.cs b/MediaBrowser.Api/Session/SessionsService.cs index 35c29cd15..1056b3c8b 100644 --- a/MediaBrowser.Api/Session/SessionsService.cs +++ b/MediaBrowser.Api/Session/SessionsService.cs @@ -11,6 +11,7 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Services; using MediaBrowser.Controller; +using MediaBrowser.Model.Dto; namespace MediaBrowser.Api.Session { @@ -19,13 +20,15 @@ namespace MediaBrowser.Api.Session /// </summary> [Route("/Sessions", "GET", Summary = "Gets a list of sessions")] [Authenticated] - public class GetSessions : IReturn<SessionInfoDto[]> + public class GetSessions : IReturn<SessionInfo[]> { [ApiMember(Name = "ControllableByUserId", Description = "Optional. Filter by sessions that a given user is allowed to remote control.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] - public string ControllableByUserId { get; set; } + public Guid ControllableByUserId { get; set; } [ApiMember(Name = "DeviceId", Description = "Optional. Filter by device id.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] public string DeviceId { get; set; } + + public int? ActiveWithinSeconds { get; set; } } /// <summary> @@ -189,7 +192,7 @@ namespace MediaBrowser.Api.Session /// Gets or sets the id. /// </summary> /// <value>The id.</value> - [ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + [ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] public string Id { get; set; } [ApiMember(Name = "PlayableMediaTypes", Description = "A list of playable media types, comma delimited. Audio, Video, Book, Game, Photo.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] @@ -198,9 +201,6 @@ namespace MediaBrowser.Api.Session [ApiMember(Name = "SupportedCommands", Description = "A list of supported remote control commands, comma delimited", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] public string SupportedCommands { get; set; } - [ApiMember(Name = "MessageCallbackUrl", Description = "A url to post messages to, including remote control commands.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "POST")] - public string MessageCallbackUrl { get; set; } - [ApiMember(Name = "SupportsMediaControl", Description = "Determines whether media can be played remotely.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")] public bool SupportsMediaControl { get; set; } @@ -210,8 +210,6 @@ namespace MediaBrowser.Api.Session [ApiMember(Name = "SupportsPersistentIdentifier", Description = "Determines whether the device supports a unique identifier.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "POST")] public bool SupportsPersistentIdentifier { get; set; } - public bool SupportsContentUploading { get; set; } - public PostCapabilities() { SupportsPersistentIdentifier = true; @@ -226,7 +224,7 @@ namespace MediaBrowser.Api.Session /// Gets or sets the id. /// </summary> /// <value>The id.</value> - [ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + [ApiMember(Name = "Id", Description = "Session Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] public string Id { get; set; } } @@ -242,11 +240,17 @@ namespace MediaBrowser.Api.Session { } + [Route("/Auth/Providers", "GET")] + [Authenticated(Roles = "Admin")] + public class GetAuthProviders : IReturn<NameIdPair[]> + { + } + [Route("/Auth/Keys/{Key}", "DELETE")] [Authenticated(Roles = "Admin")] public class RevokeKey { - [ApiMember(Name = "Key", Description = "Auth Key", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")] + [ApiMember(Name = "Key", Description = "Auth Key", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")] public string Key { get; set; } } @@ -286,6 +290,11 @@ namespace MediaBrowser.Api.Session _appHost = appHost; } + public object Get(GetAuthProviders request) + { + return _userManager.GetAuthenticationProviders(); + } + public void Delete(RevokeKey request) { _sessionManager.RevokeToken(request.Key); @@ -297,14 +306,13 @@ namespace MediaBrowser.Api.Session _authRepo.Create(new AuthenticationInfo { AppName = request.App, - IsActive = true, AccessToken = Guid.NewGuid().ToString("N"), DateCreated = DateTime.UtcNow, DeviceId = _appHost.SystemId, DeviceName = _appHost.FriendlyName, AppVersion = _appHost.ApplicationVersion.ToString() - }, CancellationToken.None); + }); } public void Post(ReportSessionEnded request) @@ -318,11 +326,10 @@ namespace MediaBrowser.Api.Session { var result = _authRepo.Get(new AuthenticationInfoQuery { - IsActive = true, HasUser = false }); - return ToOptimizedResult(result); + return result; } /// <summary> @@ -332,27 +339,33 @@ namespace MediaBrowser.Api.Session /// <returns>System.Object.</returns> public object Get(GetSessions request) { - var result = _sessionManager.Sessions.Where(i => i.IsActive); + var result = _sessionManager.Sessions; if (!string.IsNullOrEmpty(request.DeviceId)) { result = result.Where(i => string.Equals(i.DeviceId, request.DeviceId, StringComparison.OrdinalIgnoreCase)); } - if (!string.IsNullOrWhiteSpace(request.ControllableByUserId)) + if (!request.ControllableByUserId.Equals(Guid.Empty)) { - result = result.Where(i => i.SupportsMediaControl); + result = result.Where(i => i.SupportsRemoteControl); var user = _userManager.GetUserById(request.ControllableByUserId); if (!user.Policy.EnableRemoteControlOfOtherUsers) { - result = result.Where(i => !i.UserId.HasValue || i.ContainsUser(request.ControllableByUserId)); + result = result.Where(i => i.UserId.Equals(Guid.Empty) || i.ContainsUser(request.ControllableByUserId)); } if (!user.Policy.EnableSharedDeviceControl) { - result = result.Where(i => i.UserId.HasValue); + result = result.Where(i => !i.UserId.Equals(Guid.Empty)); + } + + if (request.ActiveWithinSeconds.HasValue && request.ActiveWithinSeconds.Value > 0) + { + var minActiveDate = DateTime.UtcNow.AddSeconds(0 - request.ActiveWithinSeconds.Value); + result = result.Where(i => i.LastActivityDate >= minActiveDate); } result = result.Where(i => @@ -361,7 +374,7 @@ namespace MediaBrowser.Api.Session if (!string.IsNullOrWhiteSpace(deviceId)) { - if (!_deviceManager.CanAccessDevice(user.Id.ToString("N"), deviceId)) + if (!_deviceManager.CanAccessDevice(user, deviceId)) { return false; } @@ -371,21 +384,19 @@ namespace MediaBrowser.Api.Session }); } - return ToOptimizedResult(result.Select(_sessionManager.GetSessionInfoDto).ToArray()); + return ToOptimizedResult(result.ToArray()); } - public void Post(SendPlaystateCommand request) + public Task Post(SendPlaystateCommand request) { - var task = _sessionManager.SendPlaystateCommand(GetSession(_sessionContext).Result.Id, request.Id, request, CancellationToken.None); - - Task.WaitAll(task); + return _sessionManager.SendPlaystateCommand(GetSession(_sessionContext).Id, request.Id, request, CancellationToken.None); } /// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> - public void Post(DisplayContent request) + public Task Post(DisplayContent request) { var command = new BrowseRequest { @@ -394,16 +405,14 @@ namespace MediaBrowser.Api.Session ItemType = request.ItemType }; - var task = _sessionManager.SendBrowseCommand(GetSession(_sessionContext).Result.Id, request.Id, command, CancellationToken.None); - - Task.WaitAll(task); + return _sessionManager.SendBrowseCommand(GetSession(_sessionContext).Id, request.Id, command, CancellationToken.None); } /// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> - public void Post(SendSystemCommand request) + public Task Post(SendSystemCommand request) { GeneralCommandType commandType; var name = request.Command; @@ -413,24 +422,22 @@ namespace MediaBrowser.Api.Session name = commandType.ToString(); } - var currentSession = GetSession(_sessionContext).Result; + var currentSession = GetSession(_sessionContext); var command = new GeneralCommand { Name = name, - ControllingUserId = currentSession.UserId.HasValue ? currentSession.UserId.Value.ToString("N") : null + ControllingUserId = currentSession.UserId }; - var task = _sessionManager.SendGeneralCommand(currentSession.Id, request.Id, command, CancellationToken.None); - - Task.WaitAll(task); + return _sessionManager.SendGeneralCommand(currentSession.Id, request.Id, command, CancellationToken.None); } /// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> - public void Post(SendMessageCommand request) + public Task Post(SendMessageCommand request) { var command = new MessageCommand { @@ -439,63 +446,55 @@ namespace MediaBrowser.Api.Session Text = request.Text }; - var task = _sessionManager.SendMessageCommand(GetSession(_sessionContext).Result.Id, request.Id, command, CancellationToken.None); - - Task.WaitAll(task); + return _sessionManager.SendMessageCommand(GetSession(_sessionContext).Id, request.Id, command, CancellationToken.None); } /// <summary> /// Posts the specified request. /// </summary> /// <param name="request">The request.</param> - public void Post(Play request) + public Task Post(Play request) { - var task = _sessionManager.SendPlayCommand(GetSession(_sessionContext).Result.Id, request.Id, request, CancellationToken.None); - - Task.WaitAll(task); + return _sessionManager.SendPlayCommand(GetSession(_sessionContext).Id, request.Id, request, CancellationToken.None); } - public void Post(SendGeneralCommand request) + public Task Post(SendGeneralCommand request) { - var currentSession = GetSession(_sessionContext).Result; + var currentSession = GetSession(_sessionContext); var command = new GeneralCommand { Name = request.Command, - ControllingUserId = currentSession.UserId.HasValue ? currentSession.UserId.Value.ToString("N") : null + ControllingUserId = currentSession.UserId }; - var task = _sessionManager.SendGeneralCommand(currentSession.Id, request.Id, command, CancellationToken.None); - - Task.WaitAll(task); + return _sessionManager.SendGeneralCommand(currentSession.Id, request.Id, command, CancellationToken.None); } - public void Post(SendFullGeneralCommand request) + public Task Post(SendFullGeneralCommand request) { - var currentSession = GetSession(_sessionContext).Result; + var currentSession = GetSession(_sessionContext); - request.ControllingUserId = currentSession.UserId.HasValue ? currentSession.UserId.Value.ToString("N") : null; + request.ControllingUserId = currentSession.UserId; - var task = _sessionManager.SendGeneralCommand(currentSession.Id, request.Id, request, CancellationToken.None); - - Task.WaitAll(task); + return _sessionManager.SendGeneralCommand(currentSession.Id, request.Id, request, CancellationToken.None); } public void Post(AddUserToSession request) { - _sessionManager.AddAdditionalUser(request.Id, request.UserId); + _sessionManager.AddAdditionalUser(request.Id, new Guid(request.UserId)); } public void Delete(RemoveUserFromSession request) { - _sessionManager.RemoveAdditionalUser(request.Id, request.UserId); + _sessionManager.RemoveAdditionalUser(request.Id, new Guid(request.UserId)); } public void Post(PostCapabilities request) { if (string.IsNullOrWhiteSpace(request.Id)) { - request.Id = GetSession(_sessionContext).Result.Id; + request.Id = GetSession(_sessionContext).Id; } _sessionManager.ReportCapabilities(request.Id, new ClientCapabilities { @@ -505,12 +504,8 @@ namespace MediaBrowser.Api.Session SupportsMediaControl = request.SupportsMediaControl, - MessageCallbackUrl = request.MessageCallbackUrl, - SupportsSync = request.SupportsSync, - SupportsContentUploading = request.SupportsContentUploading, - SupportsPersistentIdentifier = request.SupportsPersistentIdentifier }); } @@ -519,7 +514,7 @@ namespace MediaBrowser.Api.Session { if (string.IsNullOrWhiteSpace(request.Id)) { - request.Id = GetSession(_sessionContext).Result.Id; + request.Id = GetSession(_sessionContext).Id; } _sessionManager.ReportCapabilities(request.Id, request); } |
