aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-04-12 13:27:53 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-04-12 13:27:53 -0400
commitb6ca79b73fdae969773935068c175ace43ac778d (patch)
tree09b28a93eeb661048c6363d7936aa51244ee375f /MediaBrowser.Server.Implementations
parent3817ff36b0a29a1a411193c53bb1238d230d9056 (diff)
control remote players with now playing bar
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs10
-rw-r--r--MediaBrowser.Server.Implementations/Session/SessionManager.cs52
-rw-r--r--MediaBrowser.Server.Implementations/Session/WebSocketController.cs24
3 files changed, 85 insertions, 1 deletions
diff --git a/MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs b/MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs
index 5a4522bd3..307619cbe 100644
--- a/MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs
+++ b/MediaBrowser.Server.Implementations/Roku/RokuSessionController.cs
@@ -46,6 +46,16 @@ namespace MediaBrowser.Server.Implementations.Roku
return Task.FromResult(true);
}
+ public Task SendPlaybackStartNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken)
+ {
+ return Task.FromResult(true);
+ }
+
+ public Task SendPlaybackStoppedNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken)
+ {
+ return Task.FromResult(true);
+ }
+
public Task SendMessageCommand(MessageCommand command, CancellationToken cancellationToken)
{
return SendCommand(new WebSocketMessage<MessageCommand>
diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs
index 6452d5ac7..53d1e6436 100644
--- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs
+++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs
@@ -444,6 +444,8 @@ namespace MediaBrowser.Server.Implementations.Session
MediaSourceId = info.MediaSourceId
}, _logger);
+
+ await SendPlaybackStartNotification(session, CancellationToken.None).ConfigureAwait(false);
}
/// <summary>
@@ -583,6 +585,8 @@ namespace MediaBrowser.Server.Implementations.Session
MediaSourceId = mediaSourceId
}, _logger);
+
+ await SendPlaybackStoppedNotification(session, CancellationToken.None).ConfigureAwait(false);
}
private string GetMediaSourceId(BaseItem item, string reportedMediaSourceId)
@@ -972,7 +976,6 @@ namespace MediaBrowser.Server.Implementations.Session
return Task.WhenAll(tasks);
}
-
public Task SendSessionEndedNotification(SessionInfo sessionInfo, CancellationToken cancellationToken)
{
var sessions = Sessions.Where(i => i.IsActive && i.SessionController != null).ToList();
@@ -994,6 +997,48 @@ namespace MediaBrowser.Server.Implementations.Session
return Task.WhenAll(tasks);
}
+ public Task SendPlaybackStartNotification(SessionInfo sessionInfo, CancellationToken cancellationToken)
+ {
+ var sessions = Sessions.Where(i => i.IsActive && i.SessionController != null).ToList();
+ var dto = GetSessionInfoDto(sessionInfo);
+
+ var tasks = sessions.Select(session => Task.Run(async () =>
+ {
+ try
+ {
+ await session.SessionController.SendPlaybackStartNotification(dto, cancellationToken).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error in SendPlaybackStartNotification.", ex);
+ }
+
+ }, cancellationToken));
+
+ return Task.WhenAll(tasks);
+ }
+
+ public Task SendPlaybackStoppedNotification(SessionInfo sessionInfo, CancellationToken cancellationToken)
+ {
+ var sessions = Sessions.Where(i => i.IsActive && i.SessionController != null).ToList();
+ var dto = GetSessionInfoDto(sessionInfo);
+
+ var tasks = sessions.Select(session => Task.Run(async () =>
+ {
+ try
+ {
+ await session.SessionController.SendPlaybackStoppedNotification(dto, cancellationToken).ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error in SendPlaybackStoppedNotification.", ex);
+ }
+
+ }, cancellationToken));
+
+ return Task.WhenAll(tasks);
+ }
+
/// <summary>
/// Adds the additional user.
/// </summary>
@@ -1163,6 +1208,11 @@ namespace MediaBrowser.Server.Implementations.Session
info.PrimaryImageTag = GetImageCacheTag(item, ImageType.Primary);
+ if (info.PrimaryImageTag.HasValue)
+ {
+ info.PrimaryImageItemId = GetDtoId(item);
+ }
+
var backropItem = item.HasImage(ImageType.Backdrop) ? item : null;
var thumbItem = item.HasImage(ImageType.Thumb) ? item : null;
diff --git a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs
index 17a3594d8..2f547340e 100644
--- a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs
+++ b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs
@@ -210,5 +210,29 @@ namespace MediaBrowser.Server.Implementations.Session
}, cancellationToken);
}
+
+ public Task SendPlaybackStartNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken)
+ {
+ var socket = GetActiveSocket();
+
+ return socket.SendAsync(new WebSocketMessage<SessionInfoDto>
+ {
+ MessageType = "PlaybackStart",
+ Data = sessionInfo
+
+ }, cancellationToken);
+ }
+
+ public Task SendPlaybackStoppedNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken)
+ {
+ var socket = GetActiveSocket();
+
+ return socket.SendAsync(new WebSocketMessage<SessionInfoDto>
+ {
+ MessageType = "PlaybackStopped",
+ Data = sessionInfo
+
+ }, cancellationToken);
+ }
}
}