소스 검색

Enable remote "fullscreen" command

This is really only pseudo-fullscreen, as the js fullscreen API doesn't
allow fullscreen without user interaction.
Tim Hobbs 11 년 전
부모
커밋
d5e49f590d

+ 1 - 1
MediaBrowser.Api/SessionsService.cs

@@ -131,7 +131,7 @@ namespace MediaBrowser.Api
         /// Gets or sets the play command.
         /// </summary>
         /// <value>The play command.</value>
-        [ApiMember(Name = "Command", Description = "The command to send - stop, pause, unpause, nexttrack, previoustrack, seek.", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
+        [ApiMember(Name = "Command", Description = "The command to send - stop, pause, unpause, nexttrack, previoustrack, seek, fullscreen.", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
         public PlaystateCommand Command { get; set; }
     }
 

+ 29 - 0
MediaBrowser.Dlna/PlayTo/Device.cs

@@ -30,6 +30,15 @@ namespace MediaBrowser.Dlna.PlayTo
             }
         }
 
+        private bool _fullscreen;
+        public bool IsFullscreen
+        {
+            get
+            {
+                return _fullscreen;
+            }
+        }
+
         private string _currentId = String.Empty;
         public string CurrentId
         {
@@ -207,6 +216,26 @@ namespace MediaBrowser.Dlna.PlayTo
             return SetVolume(tmp);
         }
 
+        public async Task<bool> ToggleFullscreen()
+        {
+            var command = RendererCommands.ServiceActions.FirstOrDefault(c => c.Name == "Fullscreen");
+            if (command == null)
+                return true;
+
+            var service = Properties.Services.FirstOrDefault(s => s.ServiceType == ServiceRenderingType);
+
+            if (service == null) {
+                throw new InvalidOperationException("Unable to find service");
+            }
+
+            _fullscreen = !_fullscreen;
+
+            var result = await new SsdpHttpClient(_httpClient, _config).SendCommandAsync(Properties.BaseUrl, service, command.Name, RendererCommands.BuildPost(command, service.ServiceType, _fullscreen))
+                .ConfigureAwait(false);
+
+            return true;
+        }
+
         public async Task<bool> SetVolume(int value)
         {
             var command = RendererCommands.ServiceActions.FirstOrDefault(c => c.Name == "SetVolume");

+ 3 - 0
MediaBrowser.Dlna/PlayTo/DlnaController.cs

@@ -283,6 +283,9 @@ namespace MediaBrowser.Dlna.PlayTo
                 case PlaystateCommand.PreviousTrack:
                     _currentItem = null;
                     return SetPrevious();
+
+                case PlaystateCommand.Fullscreen:
+                    return _device.ToggleFullscreen();
             }
 
             return Task.FromResult(true);

+ 5 - 1
MediaBrowser.Model/Session/PlaystateCommand.cs

@@ -29,7 +29,11 @@ namespace MediaBrowser.Model.Session
         /// <summary>
         /// The seek
         /// </summary>
-        Seek
+        Seek,
+        /// <summary>
+        /// The fullscreen
+        /// </summary>
+        Fullscreen
     }
 
     public class PlaystateRequest