diff options
Diffstat (limited to 'MediaBrowser.Api/SessionsService.cs')
| -rw-r--r-- | MediaBrowser.Api/SessionsService.cs | 218 |
1 files changed, 30 insertions, 188 deletions
diff --git a/MediaBrowser.Api/SessionsService.cs b/MediaBrowser.Api/SessionsService.cs index b93b5326e..5888d9fba 100644 --- a/MediaBrowser.Api/SessionsService.cs +++ b/MediaBrowser.Api/SessionsService.cs @@ -1,7 +1,5 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Dto; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Session; -using MediaBrowser.Model.Net; using MediaBrowser.Model.Session; using ServiceStack.ServiceHost; using System; @@ -189,6 +187,7 @@ namespace MediaBrowser.Api /// Initializes a new instance of the <see cref="SessionsService" /> class. /// </summary> /// <param name="sessionManager">The session manager.</param> + /// <param name="dtoService">The dto service.</param> public SessionsService(ISessionManager sessionManager, IDtoService dtoService) { _sessionManager = sessionManager; @@ -214,52 +213,15 @@ namespace MediaBrowser.Api public void Post(SendPlaystateCommand request) { - var task = SendPlaystateCommand(request); - - Task.WaitAll(task); - } - - private async Task SendPlaystateCommand(SendPlaystateCommand request) - { - var session = _sessionManager.Sessions.FirstOrDefault(i => i.Id == request.Id); - - if (session == null) + var command = new PlaystateRequest { - throw new ResourceNotFoundException(string.Format("Session {0} not found.", request.Id)); - } + Command = request.Command, + SeekPositionTicks = request.SeekPositionTicks + }; - if (!session.SupportsRemoteControl) - { - throw new ArgumentException(string.Format("Session {0} does not support remote control.", session.Id)); - } + var task = _sessionManager.SendPlaystateCommand(request.Id, command, CancellationToken.None); - var socket = session.WebSockets.OrderByDescending(i => i.LastActivityDate).FirstOrDefault(i => i.State == WebSocketState.Open); - - if (socket != null) - { - try - { - await socket.SendAsync(new WebSocketMessage<PlaystateRequest> - { - MessageType = "Playstate", - - Data = new PlaystateRequest - { - Command = request.Command, - SeekPositionTicks = request.SeekPositionTicks - } - - }, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - Logger.ErrorException("Error sending web socket message", ex); - } - } - else - { - throw new InvalidOperationException("The requested session does not have an open web socket."); - } + Task.WaitAll(task); } /// <summary> @@ -268,55 +230,17 @@ namespace MediaBrowser.Api /// <param name="request">The request.</param> public void Post(BrowseTo request) { - var task = BrowseTo(request); - - Task.WaitAll(task); - } - - /// <summary> - /// Browses to. - /// </summary> - /// <param name="request">The request.</param> - /// <returns>Task.</returns> - /// <exception cref="ResourceNotFoundException"></exception> - /// <exception cref="System.ArgumentException"></exception> - /// <exception cref="System.InvalidOperationException">The requested session does not have an open web socket.</exception> - private async Task BrowseTo(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)); - } - - if (!session.SupportsRemoteControl) + var command = new BrowseRequest { - throw new ArgumentException(string.Format("Session {0} does not support remote control.", session.Id)); - } + Context = request.Context, + ItemId = request.ItemId, + ItemName = request.ItemName, + ItemType = request.ItemType + }; - var socket = session.WebSockets.OrderByDescending(i => i.LastActivityDate).FirstOrDefault(i => i.State == WebSocketState.Open); + var task = _sessionManager.SendBrowseCommand(request.Id, command, CancellationToken.None); - if (socket != null) - { - try - { - await socket.SendAsync(new WebSocketMessage<BrowseTo> - { - MessageType = "Browse", - Data = request - - }, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - Logger.ErrorException("Error sending web socket message", ex); - } - } - else - { - throw new InvalidOperationException("The requested session does not have an open web socket."); - } + Task.WaitAll(task); } /// <summary> @@ -336,53 +260,16 @@ namespace MediaBrowser.Api /// <param name="request">The request.</param> public void Post(SendMessageCommand request) { - var task = SendMessageCommand(request); - - Task.WaitAll(task); - } - - private async Task SendMessageCommand(SendMessageCommand 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)); - } - - if (!session.SupportsRemoteControl) + var command = new MessageCommand { - throw new ArgumentException(string.Format("Session {0} does not support remote control.", session.Id)); - } + Header = string.IsNullOrEmpty(request.Header) ? "Message from Server" : request.Header, + TimeoutMs = request.TimeoutMs, + Text = request.Text + }; - var socket = session.WebSockets.OrderByDescending(i => i.LastActivityDate).FirstOrDefault(i => i.State == WebSocketState.Open); + var task = _sessionManager.SendMessageCommand(request.Id, command, CancellationToken.None); - if (socket != null) - { - try - { - await socket.SendAsync(new WebSocketMessage<MessageCommand> - { - MessageType = "MessageCommand", - - Data = new MessageCommand - { - Header = string.IsNullOrEmpty(request.Header) ? "Message from Server" : request.Header, - TimeoutMs = request.TimeoutMs, - Text = request.Text - } - - }, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - Logger.ErrorException("Error sending web socket message", ex); - } - } - else - { - throw new InvalidOperationException("The requested session does not have an open web socket."); - } + Task.WaitAll(task); } /// <summary> @@ -391,62 +278,17 @@ namespace MediaBrowser.Api /// <param name="request">The request.</param> public void Post(Play request) { - var task = Play(request); - - Task.WaitAll(task); - } - - /// <summary> - /// Plays the specified request. - /// </summary> - /// <param name="request">The request.</param> - /// <returns>Task.</returns> - /// <exception cref="ResourceNotFoundException"></exception> - /// <exception cref="System.ArgumentException"></exception> - /// <exception cref="System.InvalidOperationException">The requested session does not have an open web socket.</exception> - private async Task Play(Play request) - { - var session = _sessionManager.Sessions.FirstOrDefault(i => i.Id == request.Id); - - if (session == null) + var command = new PlayRequest { - throw new ResourceNotFoundException(string.Format("Session {0} not found.", request.Id)); - } + ItemIds = request.ItemIds.Split(',').ToArray(), - if (!session.SupportsRemoteControl) - { - throw new ArgumentException(string.Format("Session {0} does not support remote control.", session.Id)); - } + PlayCommand = request.PlayCommand, + StartPositionTicks = request.StartPositionTicks + }; - var socket = session.WebSockets.OrderByDescending(i => i.LastActivityDate).FirstOrDefault(i => i.State == WebSocketState.Open); + var task = _sessionManager.SendPlayCommand(request.Id, command, CancellationToken.None); - if (socket != null) - { - try - { - await socket.SendAsync(new WebSocketMessage<PlayRequest> - { - MessageType = "Play", - - Data = new PlayRequest - { - ItemIds = request.ItemIds.Split(',').ToArray(), - - PlayCommand = request.PlayCommand, - StartPositionTicks = request.StartPositionTicks - } - - }, CancellationToken.None).ConfigureAwait(false); - } - catch (Exception ex) - { - Logger.ErrorException("Error sending web socket message", ex); - } - } - else - { - throw new InvalidOperationException("The requested session does not have an open web socket."); - } + Task.WaitAll(task); } } } |
