Parcourir la source

added generic remote control commands

Luke Pulverenti il y a 11 ans
Parent
commit
57623886b2

+ 2 - 4
MediaBrowser.Api/DisplayPreferencesService.cs

@@ -12,8 +12,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class UpdateDisplayPreferences
     /// </summary>
-    [Route("/DisplayPreferences/{DisplayPreferencesId}", "POST")]
-    [Api(("Updates a user's display preferences for an item"))]
+    [Route("/DisplayPreferences/{DisplayPreferencesId}", "POST", Summary = "Updates a user's display preferences for an item")]
     public class UpdateDisplayPreferences : DisplayPreferences, IReturnVoid
     {
         /// <summary>
@@ -30,8 +29,7 @@ namespace MediaBrowser.Api
         public string Client { get; set; }
     }
 
-    [Route("/DisplayPreferences/{Id}", "GET")]
-    [Api(("Gets a user's display preferences for an item"))]
+    [Route("/DisplayPreferences/{Id}", "GET", Summary = "Gets a user's display preferences for an item")]
     public class GetDisplayPreferences : IReturn<DisplayPreferences>
     {
         /// <summary>

+ 5 - 10
MediaBrowser.Api/EnvironmentService.cs

@@ -13,8 +13,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class GetDirectoryContents
     /// </summary>
-    [Route("/Environment/DirectoryContents", "GET")]
-    [Api(Description = "Gets the contents of a given directory in the file system")]
+    [Route("/Environment/DirectoryContents", "GET", Summary = "Gets the contents of a given directory in the file system")]
     public class GetDirectoryContents : IReturn<List<FileSystemEntryInfo>>
     {
         /// <summary>
@@ -46,8 +45,7 @@ namespace MediaBrowser.Api
         public bool IncludeHidden { get; set; }
     }
 
-    [Route("/Environment/NetworkShares", "GET")]
-    [Api(Description = "Gets shares from a network device")]
+    [Route("/Environment/NetworkShares", "GET", Summary = "Gets shares from a network device")]
     public class GetNetworkShares : IReturn<List<FileSystemEntryInfo>>
     {
         /// <summary>
@@ -61,8 +59,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class GetDrives
     /// </summary>
-    [Route("/Environment/Drives", "GET")]
-    [Api(Description = "Gets available drives from the server's file system")]
+    [Route("/Environment/Drives", "GET", Summary = "Gets available drives from the server's file system")]
     public class GetDrives : IReturn<List<FileSystemEntryInfo>>
     {
     }
@@ -70,14 +67,12 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class GetNetworkComputers
     /// </summary>
-    [Route("/Environment/NetworkDevices", "GET")]
-    [Api(Description = "Gets a list of devices on the network")]
+    [Route("/Environment/NetworkDevices", "GET", Summary = "Gets a list of devices on the network")]
     public class GetNetworkDevices : IReturn<List<FileSystemEntryInfo>>
     {
     }
 
-    [Route("/Environment/ParentPath", "GET")]
-    [Api(Description = "Gets the parent path of a given path")]
+    [Route("/Environment/ParentPath", "GET", Summary = "Gets the parent path of a given path")]
     public class GetParentPath : IReturn<string>
     {
         /// <summary>

+ 6 - 9
MediaBrowser.Api/GamesService.cs

@@ -1,5 +1,4 @@
-using System.Globalization;
-using MediaBrowser.Controller.Dto;
+using MediaBrowser.Controller.Dto;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Persistence;
@@ -7,6 +6,7 @@ using MediaBrowser.Model.Dto;
 using ServiceStack;
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.IO;
 using System.Linq;
 
@@ -15,8 +15,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class GetSimilarGames
     /// </summary>
-    [Route("/Games/{Id}/Similar", "GET")]
-    [Api(Description = "Finds games similar to a given game.")]
+    [Route("/Games/{Id}/Similar", "GET", Summary = "Finds games similar to a given game.")]
     public class GetSimilarGames : BaseGetSimilarItemsFromItem
     {
     }
@@ -24,8 +23,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class GetGameSystemSummaries
     /// </summary>
-    [Route("/Games/SystemSummaries", "GET")]
-    [Api(Description = "Finds games similar to a given game.")]
+    [Route("/Games/SystemSummaries", "GET", Summary = "Finds games similar to a given game.")]
     public class GetGameSystemSummaries : IReturn<List<GameSystemSummary>>
     {
         /// <summary>
@@ -39,8 +37,7 @@ namespace MediaBrowser.Api
     /// <summary>
     /// Class GetGameSystemSummaries
     /// </summary>
-    [Route("/Games/PlayerIndex", "GET")]
-    [Api(Description = "Gets an index of players (1-x) and the number of games listed under each")]
+    [Route("/Games/PlayerIndex", "GET", Summary = "Gets an index of players (1-x) and the number of games listed under each")]
     public class GetPlayerIndex : IReturn<List<ItemIndex>>
     {
         /// <summary>
@@ -117,7 +114,7 @@ namespace MediaBrowser.Api
         }
 
         private static readonly CultureInfo UsCulture = new CultureInfo("en-US");
-        
+
         public object Get(GetPlayerIndex request)
         {
             var games = GetAllLibraryItems(request.UserId, _userManager, _libraryManager)

+ 18 - 18
MediaBrowser.Api/Playback/Progressive/AudioService.cs

@@ -17,23 +17,22 @@ namespace MediaBrowser.Api.Playback.Progressive
     /// <summary>
     /// Class GetAudioStream
     /// </summary>
-    [Route("/Audio/{Id}/stream.mp3", "GET")]
-    [Route("/Audio/{Id}/stream.wma", "GET")]
-    [Route("/Audio/{Id}/stream.aac", "GET")]
-    [Route("/Audio/{Id}/stream.flac", "GET")]
-    [Route("/Audio/{Id}/stream.ogg", "GET")]
-    [Route("/Audio/{Id}/stream.oga", "GET")]
-    [Route("/Audio/{Id}/stream.webm", "GET")]
-    [Route("/Audio/{Id}/stream", "GET")]
-    [Route("/Audio/{Id}/stream.mp3", "HEAD")]
-    [Route("/Audio/{Id}/stream.wma", "HEAD")]
-    [Route("/Audio/{Id}/stream.aac", "HEAD")]
-    [Route("/Audio/{Id}/stream.flac", "HEAD")]
-    [Route("/Audio/{Id}/stream.ogg", "HEAD")]
-    [Route("/Audio/{Id}/stream.oga", "HEAD")]
-    [Route("/Audio/{Id}/stream.webm", "HEAD")]
-    [Route("/Audio/{Id}/stream", "HEAD")]
-    [Api(Description = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.mp3", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.wma", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.aac", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.flac", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.ogg", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.oga", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.webm", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream", "GET", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.mp3", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.wma", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.aac", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.flac", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.ogg", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.oga", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream.webm", "HEAD", Summary = "Gets an audio stream")]
+    [Route("/Audio/{Id}/stream", "HEAD", Summary = "Gets an audio stream")]
     public class GetAudioStream : StreamRequest
     {
 
@@ -44,7 +43,8 @@ namespace MediaBrowser.Api.Playback.Progressive
     /// </summary>
     public class AudioService : BaseProgressiveStreamingService
     {
-        public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IEncodingManager encodingManager, IDlnaManager dlnaManager, IHttpClient httpClient, IImageProcessor imageProcessor) : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, dtoService, fileSystem, itemRepository, liveTvManager, encodingManager, dlnaManager, httpClient, imageProcessor)
+        public AudioService(IServerConfigurationManager serverConfig, IUserManager userManager, ILibraryManager libraryManager, IIsoManager isoManager, IMediaEncoder mediaEncoder, IDtoService dtoService, IFileSystem fileSystem, IItemRepository itemRepository, ILiveTvManager liveTvManager, IEncodingManager encodingManager, IDlnaManager dlnaManager, IHttpClient httpClient, IImageProcessor imageProcessor)
+            : base(serverConfig, userManager, libraryManager, isoManager, mediaEncoder, dtoService, fileSystem, itemRepository, liveTvManager, encodingManager, dlnaManager, httpClient, imageProcessor)
         {
         }
 

+ 2 - 3
MediaBrowser.Api/UserLibrary/ItemsService.cs

@@ -20,9 +20,8 @@ namespace MediaBrowser.Api.UserLibrary
     /// <summary>
     /// Class GetItems
     /// </summary>
-    [Route("/Items", "GET")]
-    [Route("/Users/{UserId}/Items", "GET")]
-    [Api(Description = "Gets items based on a query.")]
+    [Route("/Items", "GET", Summary = "Gets items based on a query.")]
+    [Route("/Users/{UserId}/Items", "GET", Summary = "Gets items based on a query.")]
     public class GetItems : BaseItemsRequest, IReturn<ItemsResult>
     {
         /// <summary>

+ 0 - 1
MediaBrowser.Controller/Dlna/DeviceProfile.cs

@@ -3,7 +3,6 @@ using MediaBrowser.Model.Entities;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Runtime.Serialization;
 using System.Xml.Serialization;
 
 namespace MediaBrowser.Controller.Dlna

+ 3 - 0
MediaBrowser.Controller/Dlna/TranscodingProfile.cs

@@ -18,6 +18,9 @@ namespace MediaBrowser.Controller.Dlna
         [XmlAttribute("audioCodec")]
         public string AudioCodec { get; set; }
 
+        [XmlAttribute("protocol")]
+        public string Protocol { get; set; }
+        
         [XmlAttribute("estimateContentLength")]
         public bool EstimateContentLength { get; set; }
 

+ 8 - 0
MediaBrowser.Controller/Session/ISessionController.cs

@@ -59,6 +59,14 @@ namespace MediaBrowser.Controller.Session
         /// <returns>Task.</returns>
         Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken);
 
+        /// <summary>
+        /// Sends the generic command.
+        /// </summary>
+        /// <param name="command">The command.</param>
+        /// <param name="cancellationToken">The cancellation token.</param>
+        /// <returns>Task.</returns>
+        Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken);
+        
         /// <summary>
         /// Sends the library update info.
         /// </summary>

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

@@ -619,5 +619,10 @@ namespace MediaBrowser.Dlna.PlayTo
                 _logger.Log(LogSeverity.Debug, "Controller disposed");
             }
         }
+
+        public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
+        {
+            throw new NotImplementedException();
+        }
     }
 }

+ 3 - 0
MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj

@@ -428,6 +428,9 @@
     <Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
       <Link>Session\BrowseRequest.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Session\GenericCommand.cs">
+      <Link>Session\GenericCommand.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
       <Link>Session\MessageCommand.cs</Link>
     </Compile>

+ 3 - 0
MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj

@@ -415,6 +415,9 @@
     <Compile Include="..\MediaBrowser.Model\Session\BrowseRequest.cs">
       <Link>Session\BrowseRequest.cs</Link>
     </Compile>
+    <Compile Include="..\MediaBrowser.Model\Session\GenericCommand.cs">
+      <Link>Session\GenericCommand.cs</Link>
+    </Compile>
     <Compile Include="..\MediaBrowser.Model\Session\MessageCommand.cs">
       <Link>Session\MessageCommand.cs</Link>
     </Compile>

+ 1 - 0
MediaBrowser.Model/MediaBrowser.Model.csproj

@@ -132,6 +132,7 @@
     <Compile Include="Querying\UserQuery.cs" />
     <Compile Include="Search\SearchQuery.cs" />
     <Compile Include="Session\BrowseRequest.cs" />
+    <Compile Include="Session\GenericCommand.cs" />
     <Compile Include="Session\MessageCommand.cs" />
     <Compile Include="Session\PlaybackReports.cs" />
     <Compile Include="Session\PlayRequest.cs" />

+ 43 - 0
MediaBrowser.Model/Session/GenericCommand.cs

@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Model.Session
+{
+    public class GenericCommand
+    {
+        public string Name { get; set; }
+
+        public Dictionary<string, string> Arguments { get; set; }
+
+        public GenericCommand()
+        {
+            Arguments = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+        }
+    }
+
+    public enum CoreGenericCommand
+    {
+        MoveUp = 0,
+        MoveDown = 1,
+        MoveLeft = 2,
+        MoveRight = 3,
+        PageUp = 4,
+        PageDown = 5,
+        PreviousLetter = 6,
+        NextLetter = 7,
+        ToggleOsd = 8,
+        ToggleContextMenu = 9,
+        Select = 10,
+        Back = 11,
+        TakeScreenshot = 12,
+        SendKey = 13,
+        SendString = 14,
+        GoHome = 15,
+        GoToSettings = 16,
+        VolumeUp = 17,
+        VolumeDown = 18,
+        Mute = 19,
+        Unmute = 20,
+        ToggleMute = 21
+    }
+}

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

@@ -33,7 +33,15 @@ namespace MediaBrowser.Model.Session
         /// <summary>
         /// The fullscreen
         /// </summary>
-        Fullscreen
+        Fullscreen,
+        /// <summary>
+        /// The rewind
+        /// </summary>
+        Rewind,
+        /// <summary>
+        /// The fast forward
+        /// </summary>
+        FastForward
     }
 
     public class PlaystateRequest

+ 11 - 0
MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs

@@ -146,5 +146,16 @@ namespace MediaBrowser.Server.Implementations.Roku
                 RequestContentType = "application/json"
             });
         }
+
+
+        public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<GenericCommand>
+            {
+                MessageType = "Command",
+                Data = command
+
+            }, cancellationToken);
+        }
     }
 }

+ 12 - 0
MediaBrowser.Server.Implementations/Session/WebSocketController.cs

@@ -198,5 +198,17 @@ namespace MediaBrowser.Server.Implementations.Session
 
             }, cancellationToken);
         }
+
+        public Task SendGenericCommand(GenericCommand command, CancellationToken cancellationToken)
+        {
+            var socket = GetActiveSocket();
+
+            return socket.SendAsync(new WebSocketMessage<GenericCommand>
+            {
+                MessageType = "Command",
+                Data = command
+
+            }, cancellationToken);
+        }
     }
 }