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

(cherry picked from commit 77c73e241f)
Signed-off-by: crobibero <cody@robibe.ro>
pull/7916/head
Cody Robibero 3 years ago committed by crobibero
parent ad1e554141
commit b8722d02a3

@ -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;

@ -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 />

@ -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);
} }
} }

@ -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; }
} }
} }

Loading…
Cancel
Save