diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Session/SessionManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Session/SessionManager.cs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 9fb9010e5..3cbd54c7b 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -38,6 +38,8 @@ namespace MediaBrowser.Server.Implementations.Session /// </summary> private readonly ILogger _logger; + private readonly ILibraryManager _libraryManager; + /// <summary> /// Gets or sets the configuration manager. /// </summary> @@ -471,6 +473,19 @@ namespace MediaBrowser.Server.Implementations.Session { var session = GetSessionForRemoteControl(sessionId); + if (command.PlayCommand != PlayCommand.PlayNow) + { + if (command.ItemIds.Any(i => + { + var item = _libraryManager.GetItemById(new Guid(i)); + + return !session.QueueableMediaTypes.Contains(item.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); } @@ -499,6 +514,11 @@ namespace MediaBrowser.Server.Implementations.Session { var session = GetSessionForRemoteControl(sessionId); + if (command.Command == PlaystateCommand.Seek && !session.CanSeek) + { + throw new ArgumentException(string.Format("Session {0} is unable to seek.", session.Id)); + } + return session.SessionController.SendPlaystateCommand(command, cancellationToken); } |
