public Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken) { return SendCommand(new WebSocketMessage<PlayRequest> { MessageType = "Play", Data = command }, cancellationToken); }
public Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken) { var socket = GetActiveSocket(); return socket.SendAsync(new WebSocketMessage<PlayRequest> { MessageType = "Play", Data = command }, cancellationToken); }
public Task SendPlayCommand(string controllingSessionId, string sessionId, PlayRequest command, CancellationToken cancellationToken) { var session = GetSession(sessionId); var user = session.UserId.HasValue ? _userManager.GetUserById(session.UserId.Value) : null; List<BaseItem> items; if (command.PlayCommand == PlayCommand.PlayInstantMix) { items = command.ItemIds.SelectMany(i => TranslateItemForInstantMix(i, user)) .Where(i => i.LocationType != LocationType.Virtual) .ToList(); command.PlayCommand = PlayCommand.PlayNow; } else { items = command.ItemIds.SelectMany(i => TranslateItemForPlayback(i, user)) .Where(i => i.LocationType != LocationType.Virtual) .ToList(); } if (command.PlayCommand == PlayCommand.PlayShuffle) { items = items.OrderBy(i => Guid.NewGuid()).ToList(); command.PlayCommand = PlayCommand.PlayNow; } command.ItemIds = items.Select(i => i.Id.ToString("N")).ToArray(); if (user != null) { if (items.Any(i => i.GetPlayAccess(user) != PlayAccess.Full)) { throw new ArgumentException(string.Format("{0} is not allowed to play media.", user.Name)); } } if (command.PlayCommand != PlayCommand.PlayNow) { if (items.Any(i => !session.QueueableMediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase))) { throw new ArgumentException(string.Format("{0} is unable to queue the requested media type.", session.DeviceName ?? session.Id.ToString())); } } else { if (items.Any(i => !session.PlayableMediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase))) { throw new ArgumentException(string.Format("{0} is unable to play the requested media type.", session.DeviceName ?? session.Id.ToString())); } } var controllingSession = GetSession(controllingSessionId); AssertCanControl(session, controllingSession); if (controllingSession.UserId.HasValue) { command.ControllingUserId = controllingSession.UserId.Value.ToString("N"); } return session.SessionController.SendPlayCommand(command, cancellationToken); }
public Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken) { var dict = new Dictionary<string, string>(); dict["ItemIds"] = string.Join(",", command.ItemIds); if (command.StartPositionTicks.HasValue) { dict["StartPositionTicks"] = command.StartPositionTicks.Value.ToString(CultureInfo.InvariantCulture); } return SendMessage(command.PlayCommand.ToString(), dict, cancellationToken); }
public async Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken) { _logger.Debug("{0} - Received PlayRequest: {1}", this._session.DeviceName, command.PlayCommand); var user = String.IsNullOrEmpty(command.ControllingUserId) ? null : _userManager.GetUserById(new Guid(command.ControllingUserId)); var items = new List<BaseItem>(); foreach (string id in command.ItemIds) { AddItemFromId(Guid.Parse(id), items); } var playlist = new List<PlaylistItem>(); var isFirst = true; var serverAddress = GetServerAddress(); foreach (var item in items) { if (isFirst && command.StartPositionTicks.HasValue) { playlist.Add(CreatePlaylistItem(item, user, command.StartPositionTicks.Value, serverAddress)); isFirst = false; } else { playlist.Add(CreatePlaylistItem(item, user, 0, serverAddress)); } } _logger.Debug("{0} - Playlist created", _session.DeviceName); if (command.PlayCommand == PlayCommand.PlayLast) { Playlist.AddRange(playlist); } if (command.PlayCommand == PlayCommand.PlayNext) { Playlist.AddRange(playlist); } if (!String.IsNullOrWhiteSpace(command.ControllingUserId)) { await _sessionManager.LogSessionActivity(_session.Client, _session.ApplicationVersion, _session.DeviceId, _session.DeviceName, _session.RemoteEndPoint, user).ConfigureAwait(false); } await PlayItems(playlist).ConfigureAwait(false); }
/// <summary> /// Sends the play command. /// </summary> /// <param name="sessionId">The session id.</param> /// <param name="command">The command.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public Task SendPlayCommand(Guid sessionId, PlayRequest command, CancellationToken cancellationToken) { var session = GetSessionForRemoteControl(sessionId); var tasks = GetControllers(session).Select(i => i.SendPlayCommand(session, command, cancellationToken)); return Task.WhenAll(tasks); }
/// <summary> /// Sends the play command. /// </summary> /// <param name="sessionId">The session id.</param> /// <param name="command">The command.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public Task SendPlayCommand(Guid sessionId, PlayRequest command, CancellationToken cancellationToken) { var session = GetSessionForRemoteControl(sessionId); var items = command.ItemIds.Select(i => _libraryManager.GetItemById(new Guid(i))) .Where(i => i.LocationType != LocationType.Virtual) .ToList(); if (session.UserId.HasValue) { var user = _userManager.GetUserById(session.UserId.Value); if (items.Any(i => i.GetPlayAccess(user) != PlayAccess.Full)) { throw new ArgumentException(string.Format("{0} is not allowed to play media.", user.Name)); } } if (command.PlayCommand != PlayCommand.PlayNow) { if (items.Any(i => !session.QueueableMediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase))) { throw new ArgumentException(string.Format("{0} is unable to queue the requested media type.", session.DeviceName ?? session.Id.ToString())); } } else { if (items.Any(i => !session.PlayableMediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase))) { throw new ArgumentException(string.Format("{0} is unable to play the requested media type.", session.DeviceName ?? session.Id.ToString())); } } return session.SessionController.SendPlayCommand(command, cancellationToken); }
public Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken) { _logger.Debug("{0} - Received PlayRequest: {1}", this._session.DeviceName, command.PlayCommand); var items = new List<BaseItem>(); foreach (string id in command.ItemIds) { AddItemFromId(Guid.Parse(id), items); } var playlist = new List<PlaylistItem>(); var isFirst = true; var serverAddress = GetServerAddress(); foreach (var item in items) { if (isFirst && command.StartPositionTicks.HasValue) { playlist.Add(CreatePlaylistItem(item, command.StartPositionTicks.Value, serverAddress)); isFirst = false; } else { playlist.Add(CreatePlaylistItem(item, 0, serverAddress)); } } _logger.Debug("{0} - Playlist created", _session.DeviceName); if (command.PlayCommand == PlayCommand.PlayLast) { AddItemsToPlaylist(playlist); return Task.FromResult(true); } if (command.PlayCommand == PlayCommand.PlayNext) { AddItemsToPlaylist(playlist); return Task.FromResult(true); } _logger.Debug("{0} - Playing {1} items", _session.DeviceName, playlist.Count); return PlayItems(playlist); }
/// <summary> /// Sends the play command. /// </summary> /// <param name="sessionId">The session id.</param> /// <param name="command">The command.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> public Task SendPlayCommand(Guid sessionId, PlayRequest command, CancellationToken cancellationToken) { var session = GetSessionForRemoteControl(sessionId); var items = command.ItemIds.Select(i => _libraryManager.GetItemById(new Guid(i))) .ToList(); if (items.Any(i => i.LocationType == LocationType.Virtual)) { throw new ArgumentException("Virtual items are not playable."); } if (command.PlayCommand != PlayCommand.PlayNow) { if (items.Any(i => !session.QueueableMediaTypes.Contains(i.MediaType, StringComparer.OrdinalIgnoreCase))) { throw new ArgumentException(string.Format("Session {0} is unable to queue the requested media type.", session.Id)); } } return session.SessionController.SendPlayCommand(command, cancellationToken); }