Browse Source

Merge pull request #7781 from crobibero/live-tv-infinite

(cherry picked from commit 77c73e241fe1705528e3ffbb42f074c46240b9fb)
Signed-off-by: crobibero <cody@robibe.ro>
Cody Robibero 3 years ago
parent
commit
b8722d02a3

+ 6 - 1
Emby.Server.Implementations/Session/SessionManager.cs

@@ -329,13 +329,17 @@ namespace Emby.Server.Implementations.Session
         }
         }
 
 
         /// <inheritdoc />
         /// <inheritdoc />
-        public void CloseIfNeeded(SessionInfo session)
+        public async Task CloseIfNeededAsync(SessionInfo session)
         {
         {
             if (!session.SessionControllers.Any(i => i.IsSessionActive))
             if (!session.SessionControllers.Any(i => i.IsSessionActive))
             {
             {
                 var key = GetSessionKey(session.Client, session.DeviceId);
                 var key = GetSessionKey(session.Client, session.DeviceId);
 
 
                 _activeConnections.TryRemove(key, out _);
                 _activeConnections.TryRemove(key, out _);
+                if (!string.IsNullOrEmpty(session.PlayState?.LiveStreamId))
+                {
+                    await _mediaSourceManager.CloseLiveStream(session.PlayState.LiveStreamId).ConfigureAwait(false);
+                }
 
 
                 OnSessionEnded(session);
                 OnSessionEnded(session);
             }
             }
@@ -413,6 +417,7 @@ namespace Emby.Server.Implementations.Session
             session.PlayState.IsPaused = info.IsPaused;
             session.PlayState.IsPaused = info.IsPaused;
             session.PlayState.PositionTicks = info.PositionTicks;
             session.PlayState.PositionTicks = info.PositionTicks;
             session.PlayState.MediaSourceId = info.MediaSourceId;
             session.PlayState.MediaSourceId = info.MediaSourceId;
+            session.PlayState.LiveStreamId = info.LiveStreamId;
             session.PlayState.CanSeek = info.CanSeek;
             session.PlayState.CanSeek = info.CanSeek;
             session.PlayState.IsMuted = info.IsMuted;
             session.PlayState.IsMuted = info.IsMuted;
             session.PlayState.VolumeLevel = info.VolumeLevel;
             session.PlayState.VolumeLevel = info.VolumeLevel;

+ 2 - 2
Emby.Server.Implementations/Session/WebSocketController.cs

@@ -53,13 +53,13 @@ namespace Emby.Server.Implementations.Session
             connection.Closed += OnConnectionClosed;
             connection.Closed += OnConnectionClosed;
         }
         }
 
 
-        private void OnConnectionClosed(object? sender, EventArgs e)
+        private async void OnConnectionClosed(object? sender, EventArgs e)
         {
         {
             var connection = sender as IWebSocketConnection ?? throw new ArgumentException($"{nameof(sender)} is not of type {nameof(IWebSocketConnection)}", nameof(sender));
             var connection = sender as IWebSocketConnection ?? throw new ArgumentException($"{nameof(sender)} is not of type {nameof(IWebSocketConnection)}", nameof(sender));
             _logger.LogDebug("Removing websocket from session {Session}", _session.Id);
             _logger.LogDebug("Removing websocket from session {Session}", _session.Id);
             _sockets.Remove(connection);
             _sockets.Remove(connection);
             connection.Closed -= OnConnectionClosed;
             connection.Closed -= OnConnectionClosed;
-            _sessionManager.CloseIfNeeded(_session);
+            await _sessionManager.CloseIfNeededAsync(_session).ConfigureAwait(false);
         }
         }
 
 
         /// <inheritdoc />
         /// <inheritdoc />

+ 1 - 1
MediaBrowser.Controller/Session/ISessionManager.cs

@@ -352,6 +352,6 @@ namespace MediaBrowser.Controller.Session
         /// <returns>Task.</returns>
         /// <returns>Task.</returns>
         Task RevokeUserTokens(Guid userId, string currentAccessToken);
         Task RevokeUserTokens(Guid userId, string currentAccessToken);
 
 
-        void CloseIfNeeded(SessionInfo session);
+        Task CloseIfNeededAsync(SessionInfo session);
     }
     }
 }
 }

+ 6 - 0
MediaBrowser.Model/Session/PlayerStateInfo.cs

@@ -64,5 +64,11 @@ namespace MediaBrowser.Model.Session
         /// </summary>
         /// </summary>
         /// <value>The repeat mode.</value>
         /// <value>The repeat mode.</value>
         public RepeatMode RepeatMode { get; set; }
         public RepeatMode RepeatMode { get; set; }
+
+        /// <summary>
+        /// Gets or sets the now playing live stream identifier.
+        /// </summary>
+        /// <value>The live stream identifier.</value>
+        public string LiveStreamId { get; set; }
     }
     }
 }
 }