فهرست منبع

fixes #564 - Enforce CanSeek and QueueableMediaTypes

Luke Pulverenti 11 سال پیش
والد
کامیت
3cb57db7fe

+ 2 - 1
MediaBrowser.Api/ApiEntryPoint.cs

@@ -182,7 +182,8 @@ namespace MediaBrowser.Api
 
                 if (job.ActiveRequestCount == 0)
                 {
-                    var timerDuration = type == TranscodingJobType.Progressive ? 1000 : 180000;
+                    // The HLS kill timer is long - 1/2 hr. clients should use the manual kill command when stopping.
+                    var timerDuration = type == TranscodingJobType.Progressive ? 1000 : 1800000;
 
                     if (job.KillTimer == null)
                     {

+ 0 - 7
MediaBrowser.Api/UserLibrary/UserLibraryService.cs

@@ -224,13 +224,6 @@ namespace MediaBrowser.Api.UserLibrary
     [Api(Description = "Reports that a user has begun playing an item")]
     public class OnPlaybackStart : IReturnVoid
     {
-        public OnPlaybackStart()
-        {
-            // Have to default these until all clients have a chance to incorporate them
-            CanSeek = true;
-            QueueableMediaTypes = "Audio,Video,Book,Game";
-        }
-
         /// <summary>
         /// Gets or sets the user id.
         /// </summary>

+ 20 - 0
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);
         }
 

+ 1 - 0
MediaBrowser.WebDashboard/Api/DashboardService.cs

@@ -374,6 +374,7 @@ namespace MediaBrowser.WebDashboard.Api
 
             sb.Append("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">");
             sb.Append("<meta name=\"apple-mobile-web-app-capable\" content=\"yes\">");
+            sb.Append("<meta http-equiv=\"X-UA-Compatibility\" content=\"IE=Edge\">");
             //sb.Append("<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\">");
 
             // http://developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html