diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Session/SessionManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Session/SessionManager.cs | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index 1fb5af127..9d405a175 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -218,15 +218,29 @@ namespace MediaBrowser.Server.Implementations.Session /// </summary> /// <param name="session">The session.</param> /// <param name="item">The item.</param> + /// <param name="mediaSourceId">The media version identifier.</param> /// <param name="isPaused">if set to <c>true</c> [is paused].</param> + /// <param name="isMuted">if set to <c>true</c> [is muted].</param> /// <param name="currentPositionTicks">The current position ticks.</param> - private void UpdateNowPlayingItem(SessionInfo session, BaseItem item, bool isPaused, bool isMuted, long? currentPositionTicks = null) + private void UpdateNowPlayingItem(SessionInfo session, BaseItem item, string mediaSourceId, bool isPaused, bool isMuted, long? currentPositionTicks = null) { session.IsMuted = isMuted; session.IsPaused = isPaused; session.NowPlayingPositionTicks = currentPositionTicks; session.NowPlayingItem = item; session.LastActivityDate = DateTime.UtcNow; + session.NowPlayingMediaSourceId = mediaSourceId; + + if (string.IsNullOrWhiteSpace(mediaSourceId)) + { + session.NowPlayingRunTimeTicks = item.RunTimeTicks; + } + else + { + var version = _libraryManager.GetItemById(new Guid(mediaSourceId)); + + session.NowPlayingRunTimeTicks = version.RunTimeTicks; + } } /// <summary> @@ -246,6 +260,8 @@ namespace MediaBrowser.Server.Implementations.Session session.NowPlayingItem = null; session.NowPlayingPositionTicks = null; session.IsPaused = false; + session.NowPlayingRunTimeTicks = null; + session.NowPlayingMediaSourceId = null; } } @@ -352,7 +368,9 @@ namespace MediaBrowser.Server.Implementations.Session var item = info.Item; - UpdateNowPlayingItem(session, item, false, false); + var mediaSourceId = GetMediaSourceId(item, info.MediaSourceId); + + UpdateNowPlayingItem(session, item, mediaSourceId, false, false); session.CanSeek = info.CanSeek; session.QueueableMediaTypes = info.QueueableMediaTypes; @@ -371,7 +389,8 @@ namespace MediaBrowser.Server.Implementations.Session EventHelper.QueueEventIfNotNull(PlaybackStart, this, new PlaybackProgressEventArgs { Item = item, - Users = users + Users = users, + MediaSourceId = info.MediaSourceId }, _logger); } @@ -405,7 +424,7 @@ namespace MediaBrowser.Server.Implementations.Session /// <returns>Task.</returns> /// <exception cref="System.ArgumentNullException"></exception> /// <exception cref="System.ArgumentOutOfRangeException">positionTicks</exception> - public async Task OnPlaybackProgress(PlaybackProgressInfo info) + public async Task OnPlaybackProgress(Controller.Session.PlaybackProgressInfo info) { if (info == null) { @@ -419,7 +438,9 @@ namespace MediaBrowser.Server.Implementations.Session var session = Sessions.First(i => i.Id.Equals(info.SessionId)); - UpdateNowPlayingItem(session, info.Item, info.IsPaused, info.IsMuted, info.PositionTicks); + var mediaSourceId = GetMediaSourceId(info.Item, info.MediaSourceId); + + UpdateNowPlayingItem(session, info.Item, mediaSourceId, info.IsPaused, info.IsMuted, info.PositionTicks); var key = info.Item.GetUserDataKey(); @@ -434,7 +455,8 @@ namespace MediaBrowser.Server.Implementations.Session { Item = info.Item, Users = users, - PlaybackPositionTicks = info.PositionTicks + PlaybackPositionTicks = info.PositionTicks, + MediaSourceId = mediaSourceId }, _logger); } @@ -458,7 +480,7 @@ namespace MediaBrowser.Server.Implementations.Session /// <returns>Task.</returns> /// <exception cref="System.ArgumentNullException">info</exception> /// <exception cref="System.ArgumentOutOfRangeException">positionTicks</exception> - public async Task OnPlaybackStopped(PlaybackStopInfo info) + public async Task OnPlaybackStopped(Controller.Session.PlaybackStopInfo info) { if (info == null) { @@ -494,16 +516,32 @@ namespace MediaBrowser.Server.Implementations.Session playedToCompletion = await OnPlaybackStopped(user.Id, key, info.Item, info.PositionTicks).ConfigureAwait(false); } + var mediaSourceId = GetMediaSourceId(info.Item, info.MediaSourceId); + EventHelper.QueueEventIfNotNull(PlaybackStopped, this, new PlaybackStopEventArgs { Item = info.Item, Users = users, PlaybackPositionTicks = info.PositionTicks, - PlayedToCompletion = playedToCompletion + PlayedToCompletion = playedToCompletion, + MediaSourceId = mediaSourceId }, _logger); } + private string GetMediaSourceId(BaseItem item, string reportedMediaSourceId) + { + if (string.IsNullOrWhiteSpace(reportedMediaSourceId)) + { + if (item is Video || item is Audio) + { + reportedMediaSourceId = item.Id.ToString("N"); + } + } + + return reportedMediaSourceId; + } + private async Task<bool> OnPlaybackStopped(Guid userId, string userDataKey, BaseItem item, long? positionTicks) { var data = _userDataRepository.GetUserData(userId, userDataKey); @@ -899,6 +937,8 @@ namespace MediaBrowser.Server.Implementations.Session session.PlayableMediaTypes = capabilities.PlayableMediaTypes.ToList(); session.SupportsFullscreenToggle = capabilities.SupportsFullscreenToggle; + session.SupportsOsdToggle = capabilities.SupportsOsdToggle; + session.SupportsNavigationControl = capabilities.SupportsNavigationControl; } } }
\ No newline at end of file |
