aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-23 19:00:27 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-23 19:00:27 -0500
commitce8f37de79b4e629b49c7be83715fe0232531b0c (patch)
tree201378545d313bb8cb7886f59a759bac53fc1be1
parent33e384daad10bd55094c09da5ef02b2691086583 (diff)
added stub for roku remote controller
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvException.cs18
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj1
-rw-r--r--MediaBrowser.Server.Implementations/Session/RokuController.cs149
4 files changed, 169 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvException.cs b/MediaBrowser.Controller/LiveTv/LiveTvException.cs
new file mode 100644
index 000000000..0a68180ca
--- /dev/null
+++ b/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
+ {
+ }
+}
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index de9aa3b9f..05a5f58a6 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/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" />
diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
index 5a3a9ffe9..29601b396 100644
--- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj
+++ b/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>
diff --git a/MediaBrowser.Server.Implementations/Session/RokuController.cs b/MediaBrowser.Server.Implementations/Session/RokuController.cs
new file mode 100644
index 000000000..f7ca43c9f
--- /dev/null
+++ b/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"
+ });
+ }
+ }
+}