Forráskód Böngészése

added stub for roku remote controller

Luke Pulverenti 11 éve
szülő
commit
ce8f37de79

+ 18 - 0
MediaBrowser.Controller/LiveTv/LiveTvException.cs

@@ -0,0 +1,18 @@
+using System;
+
+namespace MediaBrowser.Controller.LiveTv
+{
+    /// <summary>
+    /// Class LiveTvException.
+    /// </summary>
+    public class LiveTvException : Exception
+    {
+    }
+
+    /// <summary>
+    /// Class LiveTvConflictException.
+    /// </summary>
+    public class LiveTvConflictException : LiveTvException
+    {
+    }
+}

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

@@ -112,6 +112,7 @@
     <Compile Include="LiveTv\ChannelInfo.cs" />
     <Compile Include="LiveTv\ILiveTvManager.cs" />
     <Compile Include="LiveTv\ILiveTvService.cs" />
+    <Compile Include="LiveTv\LiveTvException.cs" />
     <Compile Include="LiveTv\StreamResponseInfo.cs" />
     <Compile Include="LiveTv\LiveTvProgram.cs" />
     <Compile Include="LiveTv\LiveTvRecording.cs" />

+ 1 - 0
MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj

@@ -174,6 +174,7 @@
     <Compile Include="ServerApplicationPaths.cs" />
     <Compile Include="ServerManager\ServerManager.cs" />
     <Compile Include="ServerManager\WebSocketConnection.cs" />
+    <Compile Include="Session\RokuController.cs" />
     <Compile Include="Session\SessionManager.cs">
       <SubType>Code</SubType>
     </Compile>

+ 149 - 0
MediaBrowser.Server.Implementations/Session/RokuController.cs

@@ -0,0 +1,149 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller;
+using MediaBrowser.Controller.Session;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Net;
+using MediaBrowser.Model.Serialization;
+using MediaBrowser.Model.Session;
+using MediaBrowser.Model.System;
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.Session
+{
+    public class RokuController : ISessionController
+    {
+        private readonly IHttpClient _httpClient;
+        private readonly IJsonSerializer _json;
+        private readonly IServerApplicationHost _appHost;
+
+        public SessionInfo Session { get; private set; }
+
+        public RokuController(IHttpClient httpClient, IJsonSerializer json, IServerApplicationHost appHost, SessionInfo session)
+        {
+            _httpClient = httpClient;
+            _json = json;
+            _appHost = appHost;
+            Session = session;
+        }
+
+        public bool SupportsMediaRemoteControl
+        {
+            get { return true; }
+        }
+
+        public bool IsSessionActive
+        {
+            get
+            {
+                return (DateTime.UtcNow - Session.LastActivityDate).TotalMinutes <= 10;
+            }
+        }
+
+        public Task SendSystemCommand(SystemCommand command, CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<string>
+            {
+                MessageType = "SystemCommand",
+                Data = command.ToString()
+
+            }, cancellationToken);
+        }
+
+        public Task SendMessageCommand(MessageCommand command, CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<MessageCommand>
+            {
+                MessageType = "MessageCommand",
+                Data = command
+
+            }, cancellationToken);
+        }
+
+        public Task SendPlayCommand(PlayRequest command, CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<PlayRequest>
+            {
+                MessageType = "Play",
+                Data = command
+
+            }, cancellationToken);
+        }
+
+        public Task SendBrowseCommand(BrowseRequest command, CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<BrowseRequest>
+            {
+                MessageType = "Browse",
+                Data = command
+
+            }, cancellationToken);
+        }
+
+        public Task SendPlaystateCommand(PlaystateRequest command, CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<PlaystateRequest>
+            {
+                MessageType = "Playstate",
+                Data = command
+
+            }, cancellationToken);
+        }
+
+        public Task SendLibraryUpdateInfo(LibraryUpdateInfo info, CancellationToken cancellationToken)
+        {
+            // Roku probably won't care about this
+            return Task.FromResult(true);
+        }
+
+        public Task SendRestartRequiredNotification(CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<SystemInfo>
+            {
+                MessageType = "RestartRequired",
+                Data = _appHost.GetSystemInfo()
+
+            }, cancellationToken);
+        }
+
+        public Task SendUserDataChangeInfo(UserDataChangeInfo info, CancellationToken cancellationToken)
+        {
+            // Roku probably won't care about this
+            return Task.FromResult(true);
+        }
+
+        public Task SendServerShutdownNotification(CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<string>
+            {
+                MessageType = "ServerShuttingDown",
+                Data = string.Empty
+
+            }, cancellationToken);
+        }
+
+        public Task SendServerRestartNotification(CancellationToken cancellationToken)
+        {
+            return SendCommand(new WebSocketMessage<string>
+            {
+                MessageType = "ServerRestarting",
+                Data = string.Empty
+
+            }, cancellationToken);
+        }
+
+        private Task SendCommand(object obj, CancellationToken cancellationToken)
+        {
+            var json = _json.SerializeToString(obj);
+
+            return _httpClient.Post(new HttpRequestOptions
+            {
+                Url = "mb/remotecontrol",
+                CancellationToken = cancellationToken,
+                RequestContent = json,
+                RequestContentType = "application/json"
+            });
+        }
+    }
+}