From 3cb57db7fee72a634fb124bba3f3422128d7ef85 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 11 Oct 2013 09:47:38 -0400 Subject: fixes #564 - Enforce CanSeek and QueueableMediaTypes --- .../Session/SessionManager.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'MediaBrowser.Server.Implementations/Session') 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 /// private readonly ILogger _logger; + private readonly ILibraryManager _libraryManager; + /// /// Gets or sets the configuration manager. /// @@ -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); } -- cgit v1.2.3