mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-01-15 23:58:57 +00:00
Review logging and minor changes in SyncPlay
This commit is contained in:
@@ -8,10 +8,19 @@ namespace MediaBrowser.Controller.SyncPlay
|
||||
public class GroupMember
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the session.
|
||||
/// Initializes a new instance of the <see cref="GroupMember"/> class.
|
||||
/// </summary>
|
||||
/// <param name="session">The session.</param>
|
||||
public GroupMember(SessionInfo session)
|
||||
{
|
||||
Session = session;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the session.
|
||||
/// </summary>
|
||||
/// <value>The session.</value>
|
||||
public SessionInfo Session { get; set; }
|
||||
public SessionInfo Session { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the ping, in milliseconds.
|
||||
|
||||
@@ -14,22 +14,28 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
/// </remarks>
|
||||
public abstract class AbstractGroupState : IGroupState
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger.
|
||||
/// </summary>
|
||||
private readonly ILogger<AbstractGroupState> _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="AbstractGroupState"/> class.
|
||||
/// </summary>
|
||||
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
||||
protected AbstractGroupState(ILogger logger)
|
||||
/// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
|
||||
protected AbstractGroupState(ILoggerFactory loggerFactory)
|
||||
{
|
||||
Logger = logger;
|
||||
LoggerFactory = loggerFactory;
|
||||
_logger = loggerFactory.CreateLogger<AbstractGroupState>();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public abstract GroupStateType Type { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the logger.
|
||||
/// Gets the logger factory.
|
||||
/// </summary>
|
||||
protected ILogger Logger { get; }
|
||||
protected ILoggerFactory LoggerFactory { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public abstract void SessionJoined(IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken);
|
||||
@@ -52,7 +58,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
/// <inheritdoc />
|
||||
public virtual void HandleRequest(IGroupStateContext context, GroupStateType prevState, SetPlaylistItemGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -68,9 +74,9 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
|
||||
if (playingItemRemoved && !context.PlayQueue.IsItemPlaying())
|
||||
{
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, play queue is empty.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogDebug("Play queue in group {GroupId} is now empty.", context.GroupId.ToString());
|
||||
|
||||
IGroupState idleState = new IdleGroupState(Logger);
|
||||
IGroupState idleState = new IdleGroupState(LoggerFactory);
|
||||
context.SetState(idleState);
|
||||
var stopRequest = new StopGroupRequest();
|
||||
idleState.HandleRequest(context, Type, stopRequest, session, cancellationToken);
|
||||
@@ -84,7 +90,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
|
||||
if (!result)
|
||||
{
|
||||
Logger.LogError("HandleRequest: {RequestType} in group {GroupId}, unable to move item in play queue.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogError("Unable to move item in group {GroupId}.", context.GroupId.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -100,7 +106,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
|
||||
if (!result)
|
||||
{
|
||||
Logger.LogError("HandleRequest: {RequestType} in group {GroupId}, unable to add items to play queue.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogError("Unable to add items to play queue in group {GroupId}.", context.GroupId.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -210,7 +216,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
|
||||
private void UnhandledRequest(IGroupPlaybackRequest request)
|
||||
{
|
||||
Logger.LogWarning("HandleRequest: unhandled {RequestType} request in {StateType} state.", request.Type, Type);
|
||||
_logger.LogWarning("Unhandled request of type {RequestType} in {StateType} state.", request.Type, Type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,14 +14,19 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
/// </remarks>
|
||||
public class IdleGroupState : AbstractGroupState
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger.
|
||||
/// </summary>
|
||||
private readonly ILogger<IdleGroupState> _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="IdleGroupState"/> class.
|
||||
/// </summary>
|
||||
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
||||
public IdleGroupState(ILogger logger)
|
||||
: base(logger)
|
||||
/// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
|
||||
public IdleGroupState(ILoggerFactory loggerFactory)
|
||||
: base(loggerFactory)
|
||||
{
|
||||
// Do nothing.
|
||||
_logger = LoggerFactory.CreateLogger<IdleGroupState>();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -43,7 +48,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, PlayGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -52,7 +57,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, UnpauseGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -91,7 +96,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, NextTrackGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -100,7 +105,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, PreviousTrackGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
|
||||
@@ -15,14 +15,19 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
/// </remarks>
|
||||
public class PausedGroupState : AbstractGroupState
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger.
|
||||
/// </summary>
|
||||
private readonly ILogger<PausedGroupState> _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PausedGroupState"/> class.
|
||||
/// </summary>
|
||||
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
||||
public PausedGroupState(ILogger logger)
|
||||
: base(logger)
|
||||
/// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
|
||||
public PausedGroupState(ILoggerFactory loggerFactory)
|
||||
: base(loggerFactory)
|
||||
{
|
||||
// Do nothing.
|
||||
_logger = LoggerFactory.CreateLogger<PausedGroupState>();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -32,7 +37,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void SessionJoined(IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Wait for session to be ready.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.SessionJoined(context, Type, session, cancellationToken);
|
||||
}
|
||||
@@ -47,7 +52,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, PlayGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -56,7 +61,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, UnpauseGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var playingState = new PlayingGroupState(Logger);
|
||||
var playingState = new PlayingGroupState(LoggerFactory);
|
||||
context.SetState(playingState);
|
||||
playingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -96,7 +101,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, StopGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var idleState = new IdleGroupState(Logger);
|
||||
var idleState = new IdleGroupState(LoggerFactory);
|
||||
context.SetState(idleState);
|
||||
idleState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -105,7 +110,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, SeekGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -114,7 +119,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, BufferGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -143,7 +148,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, NextTrackGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -152,7 +157,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, PreviousTrackGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
|
||||
@@ -15,14 +15,19 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
/// </remarks>
|
||||
public class PlayingGroupState : AbstractGroupState
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger.
|
||||
/// </summary>
|
||||
private readonly ILogger<PlayingGroupState> _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PlayingGroupState"/> class.
|
||||
/// </summary>
|
||||
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
||||
public PlayingGroupState(ILogger logger)
|
||||
: base(logger)
|
||||
/// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
|
||||
public PlayingGroupState(ILoggerFactory loggerFactory)
|
||||
: base(loggerFactory)
|
||||
{
|
||||
// Do nothing.
|
||||
_logger = LoggerFactory.CreateLogger<PlayingGroupState>();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -37,7 +42,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void SessionJoined(IGroupStateContext context, GroupStateType prevState, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Wait for session to be ready.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.SessionJoined(context, Type, session, cancellationToken);
|
||||
}
|
||||
@@ -52,7 +57,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, PlayGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -89,7 +94,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, PauseGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var pausedState = new PausedGroupState(Logger);
|
||||
var pausedState = new PausedGroupState(LoggerFactory);
|
||||
context.SetState(pausedState);
|
||||
pausedState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -98,7 +103,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, StopGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var idleState = new IdleGroupState(Logger);
|
||||
var idleState = new IdleGroupState(LoggerFactory);
|
||||
context.SetState(idleState);
|
||||
idleState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -107,7 +112,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, SeekGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -121,7 +126,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
}
|
||||
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -146,7 +151,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, NextTrackGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -155,7 +160,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
public override void HandleRequest(IGroupStateContext context, GroupStateType prevState, PreviousTrackGroupRequest request, SessionInfo session, CancellationToken cancellationToken)
|
||||
{
|
||||
// Change state.
|
||||
var waitingState = new WaitingGroupState(Logger);
|
||||
var waitingState = new WaitingGroupState(LoggerFactory);
|
||||
context.SetState(waitingState);
|
||||
waitingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
|
||||
@@ -15,14 +15,19 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
/// </remarks>
|
||||
public class WaitingGroupState : AbstractGroupState
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger.
|
||||
/// </summary>
|
||||
private readonly ILogger<WaitingGroupState> _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WaitingGroupState"/> class.
|
||||
/// </summary>
|
||||
/// <param name="logger">Instance of the <see cref="ILogger"/> interface.</param>
|
||||
public WaitingGroupState(ILogger logger)
|
||||
: base(logger)
|
||||
/// <param name="loggerFactory">Instance of the <see cref="ILoggerFactory"/> interface.</param>
|
||||
public WaitingGroupState(ILoggerFactory loggerFactory)
|
||||
: base(loggerFactory)
|
||||
{
|
||||
// Do nothing.
|
||||
_logger = LoggerFactory.CreateLogger<WaitingGroupState>();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -97,21 +102,21 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
{
|
||||
if (ResumePlaying)
|
||||
{
|
||||
_logger.LogDebug("Session {SessionId} left group {GroupId}, notifying others to resume.", session.Id, context.GroupId.ToString());
|
||||
|
||||
// Client, that was buffering, left the group.
|
||||
var playingState = new PlayingGroupState(Logger);
|
||||
var playingState = new PlayingGroupState(LoggerFactory);
|
||||
context.SetState(playingState);
|
||||
var unpauseRequest = new UnpauseGroupRequest();
|
||||
playingState.HandleRequest(context, Type, unpauseRequest, session, cancellationToken);
|
||||
|
||||
Logger.LogDebug("SessionLeaving: {SessionId} left group {GroupId}, notifying others to resume.", session.Id, context.GroupId.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
// Group is ready, returning to previous state.
|
||||
var pausedState = new PausedGroupState(Logger);
|
||||
context.SetState(pausedState);
|
||||
_logger.LogDebug("Session {SessionId} left group {GroupId}, returning to previous state.", session.Id, context.GroupId.ToString());
|
||||
|
||||
Logger.LogDebug("SessionLeaving: {SessionId} left group {GroupId}, returning to previous state.", session.Id, context.GroupId.ToString());
|
||||
// Group is ready, returning to previous state.
|
||||
var pausedState = new PausedGroupState(LoggerFactory);
|
||||
context.SetState(pausedState);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -131,13 +136,13 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
var setQueueStatus = context.SetPlayQueue(request.PlayingQueue, request.PlayingItemPosition, request.StartPositionTicks);
|
||||
if (!setQueueStatus)
|
||||
{
|
||||
Logger.LogError("HandleRequest: {RequestType} in group {GroupId}, unable to set playing queue.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogError("Unable to set playing queue in group {GroupId}.", context.GroupId.ToString());
|
||||
|
||||
// Ignore request and return to previous state.
|
||||
IGroupState newState = prevState switch {
|
||||
GroupStateType.Playing => new PlayingGroupState(Logger),
|
||||
GroupStateType.Paused => new PausedGroupState(Logger),
|
||||
_ => new IdleGroupState(Logger)
|
||||
GroupStateType.Playing => new PlayingGroupState(LoggerFactory),
|
||||
GroupStateType.Paused => new PausedGroupState(LoggerFactory),
|
||||
_ => new IdleGroupState(LoggerFactory)
|
||||
};
|
||||
|
||||
context.SetState(newState);
|
||||
@@ -151,7 +156,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Reset status of sessions and await for all Ready events.
|
||||
context.SetAllBuffering(true);
|
||||
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, {SessionId} set a new play queue.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogDebug("Session {SessionId} set a new play queue in group {GroupId}.", session.Id, context.GroupId.ToString());
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -181,14 +186,14 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Return to old state.
|
||||
IGroupState newState = prevState switch
|
||||
{
|
||||
GroupStateType.Playing => new PlayingGroupState(Logger),
|
||||
GroupStateType.Paused => new PausedGroupState(Logger),
|
||||
_ => new IdleGroupState(Logger)
|
||||
GroupStateType.Playing => new PlayingGroupState(LoggerFactory),
|
||||
GroupStateType.Paused => new PausedGroupState(LoggerFactory),
|
||||
_ => new IdleGroupState(LoggerFactory)
|
||||
};
|
||||
|
||||
context.SetState(newState);
|
||||
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, unable to change current playing item.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogDebug("Unable to change current playing item in group {GroupId}.", context.GroupId.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,19 +219,19 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Reset status of sessions and await for all Ready events.
|
||||
context.SetAllBuffering(true);
|
||||
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, waiting for all ready events.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogDebug("Group {GroupId} is waiting for all ready events.", context.GroupId.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ResumePlaying)
|
||||
{
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, ignoring sessions that are not ready and forcing the playback to start.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogDebug("Forcing the playback to start in group {GroupId}. Group-wait is disabled until next state change.", context.GroupId.ToString());
|
||||
|
||||
// An Unpause request is forcing the playback to start, ignoring sessions that are not ready.
|
||||
context.SetAllBuffering(false);
|
||||
|
||||
// Change state.
|
||||
var playingState = new PlayingGroupState(Logger)
|
||||
var playingState = new PlayingGroupState(LoggerFactory)
|
||||
{
|
||||
IgnoreBuffering = true
|
||||
};
|
||||
@@ -272,7 +277,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
}
|
||||
|
||||
// Change state.
|
||||
var idleState = new IdleGroupState(Logger);
|
||||
var idleState = new IdleGroupState(LoggerFactory);
|
||||
context.SetState(idleState);
|
||||
idleState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -326,7 +331,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Make sure the client is playing the correct item.
|
||||
if (!request.PlaylistItemId.Equals(context.PlayQueue.GetPlayingItemPlaylistId(), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, {SessionId} has wrong playlist item.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogDebug("Session {SessionId} reported wrong playlist item in group {GroupId}.", session.Id, context.GroupId.ToString());
|
||||
|
||||
var playQueueUpdate = context.GetPlayQueueUpdate(PlayQueueUpdateReason.SetCurrentItem);
|
||||
var updateSession = context.NewSyncPlayGroupUpdate(GroupUpdateType.PlayQueue, playQueueUpdate);
|
||||
@@ -400,7 +405,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Make sure the client is playing the correct item.
|
||||
if (!request.PlaylistItemId.Equals(context.PlayQueue.GetPlayingItemPlaylistId(), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, {SessionId} has wrong playlist item.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogDebug("Session {SessionId} reported wrong playlist item in group {GroupId}.", session.Id, context.GroupId.ToString());
|
||||
|
||||
var playQueueUpdate = context.GetPlayQueueUpdate(PlayQueueUpdateReason.SetCurrentItem);
|
||||
var update = context.NewSyncPlayGroupUpdate(GroupUpdateType.PlayQueue, playQueueUpdate);
|
||||
@@ -420,7 +425,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
var timeSyncThresholdTicks = TimeSpan.FromMilliseconds(context.TimeSyncOffset).Ticks;
|
||||
if (Math.Abs(elapsedTime.Ticks) > timeSyncThresholdTicks)
|
||||
{
|
||||
Logger.LogWarning("HandleRequest: {RequestType} in group {GroupId}, {SessionId} is not time syncing properly. Ignoring elapsed time.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogWarning("Session {SessionId} is not time syncing properly. Ignoring elapsed time.", session.Id);
|
||||
|
||||
elapsedTime = TimeSpan.Zero;
|
||||
}
|
||||
@@ -436,7 +441,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
var delayTicks = context.PositionTicks - clientPosition.Ticks;
|
||||
var maxPlaybackOffsetTicks = TimeSpan.FromMilliseconds(context.MaxPlaybackOffset).Ticks;
|
||||
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, {SessionId} at {PositionTicks} (delay of {Delay} seconds).", request.Type, context.GroupId.ToString(), session.Id, clientPosition, TimeSpan.FromTicks(delayTicks).TotalSeconds);
|
||||
_logger.LogDebug("Session {SessionId} is at {PositionTicks} (delay of {Delay} seconds) in group {GroupId}.", session.Id, clientPosition, TimeSpan.FromTicks(delayTicks).TotalSeconds, context.GroupId.ToString());
|
||||
|
||||
if (ResumePlaying)
|
||||
{
|
||||
@@ -454,7 +459,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Notify relevant state change event.
|
||||
SendGroupStateUpdate(context, request, session, cancellationToken);
|
||||
|
||||
Logger.LogWarning("HandleRequest: {RequestType} in group {GroupId}, {SessionId} got lost in time, correcting.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogWarning("Session {SessionId} got lost in time, correcting.", session.Id);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -468,7 +473,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
command.When = currentTime.AddTicks(delayTicks);
|
||||
context.SendCommand(session, SyncPlayBroadcastType.CurrentSession, command, cancellationToken);
|
||||
|
||||
Logger.LogInformation("HandleRequest: {RequestType} in group {GroupId}, others still buffering, {SessionId} will pause when ready in {Delay} seconds.", request.Type, context.GroupId.ToString(), session.Id, TimeSpan.FromTicks(delayTicks).TotalSeconds);
|
||||
_logger.LogInformation("Session {SessionId} will pause when ready in {Delay} seconds. Group {GroupId} is waiting for all ready events.", session.Id, TimeSpan.FromTicks(delayTicks).TotalSeconds, context.GroupId.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -487,7 +492,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
|
||||
context.SendCommand(session, filter, command, cancellationToken);
|
||||
|
||||
Logger.LogInformation("HandleRequest: {RequestType} in group {GroupId}, {SessionId} is recovering, notifying others to resume in {Delay} seconds.", request.Type, context.GroupId.ToString(), session.Id, TimeSpan.FromTicks(delayTicks).TotalSeconds);
|
||||
_logger.LogInformation("Session {SessionId} is recovering, group {GroupId} will resume in {Delay} seconds.", session.Id, context.GroupId.ToString(), TimeSpan.FromTicks(delayTicks).TotalSeconds);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -500,11 +505,11 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
var command = context.NewSyncPlayCommand(SendCommandType.Unpause);
|
||||
context.SendCommand(session, SyncPlayBroadcastType.AllGroup, command, cancellationToken);
|
||||
|
||||
Logger.LogWarning("HandleRequest: {RequestType} in group {GroupId}, {SessionId} resumed playback but did not update others in time. {Delay} seconds to recover.", request.Type, context.GroupId.ToString(), session.Id, TimeSpan.FromTicks(delayTicks).TotalSeconds);
|
||||
_logger.LogWarning("Session {SessionId} resumed playback, group {GroupId} has {Delay} seconds to recover.", session.Id, context.GroupId.ToString(), TimeSpan.FromTicks(delayTicks).TotalSeconds);
|
||||
}
|
||||
|
||||
// Change state.
|
||||
var playingState = new PlayingGroupState(Logger);
|
||||
var playingState = new PlayingGroupState(LoggerFactory);
|
||||
context.SetState(playingState);
|
||||
playingState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
@@ -523,7 +528,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Notify relevant state change event.
|
||||
SendGroupStateUpdate(context, request, session, cancellationToken);
|
||||
|
||||
Logger.LogWarning("HandleRequest: {RequestType} in group {GroupId}, {SessionId} is seeking to wrong position, correcting.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogWarning("Session {SessionId} is seeking to wrong position, correcting.", session.Id);
|
||||
return;
|
||||
}
|
||||
else
|
||||
@@ -534,8 +539,10 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
|
||||
if (!context.IsBuffering())
|
||||
{
|
||||
_logger.LogDebug("Session {SessionId} is ready, group {GroupId} is ready.", session.Id, context.GroupId.ToString());
|
||||
|
||||
// Group is ready, returning to previous state.
|
||||
var pausedState = new PausedGroupState(Logger);
|
||||
var pausedState = new PausedGroupState(LoggerFactory);
|
||||
context.SetState(pausedState);
|
||||
|
||||
if (InitialState.Equals(GroupStateType.Playing))
|
||||
@@ -548,8 +555,6 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
{
|
||||
pausedState.HandleRequest(context, Type, request, session, cancellationToken);
|
||||
}
|
||||
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, {SessionId} is ready, returning to previous state.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -569,7 +574,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Make sure the client knows the playing item, to avoid duplicate requests.
|
||||
if (!request.PlaylistItemId.Equals(context.PlayQueue.GetPlayingItemPlaylistId(), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, {SessionId} provided the wrong playlist identifier.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogDebug("Session {SessionId} provided the wrong playlist item for group {GroupId}.", session.Id, context.GroupId.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -589,14 +594,14 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Return to old state.
|
||||
IGroupState newState = prevState switch
|
||||
{
|
||||
GroupStateType.Playing => new PlayingGroupState(Logger),
|
||||
GroupStateType.Paused => new PausedGroupState(Logger),
|
||||
_ => new IdleGroupState(Logger)
|
||||
GroupStateType.Playing => new PlayingGroupState(LoggerFactory),
|
||||
GroupStateType.Paused => new PausedGroupState(LoggerFactory),
|
||||
_ => new IdleGroupState(LoggerFactory)
|
||||
};
|
||||
|
||||
context.SetState(newState);
|
||||
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, no next track available.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogDebug("No next track available in group {GroupId}.", context.GroupId.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -615,7 +620,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Make sure the client knows the playing item, to avoid duplicate requests.
|
||||
if (!request.PlaylistItemId.Equals(context.PlayQueue.GetPlayingItemPlaylistId(), StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, {SessionId} provided the wrong playlist identifier.", request.Type, context.GroupId.ToString(), session.Id);
|
||||
_logger.LogDebug("Session {SessionId} provided the wrong playlist item for group {GroupId}.", session.Id, context.GroupId.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -635,14 +640,14 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
// Return to old state.
|
||||
IGroupState newState = prevState switch
|
||||
{
|
||||
GroupStateType.Playing => new PlayingGroupState(Logger),
|
||||
GroupStateType.Paused => new PausedGroupState(Logger),
|
||||
_ => new IdleGroupState(Logger)
|
||||
GroupStateType.Playing => new PlayingGroupState(LoggerFactory),
|
||||
GroupStateType.Paused => new PausedGroupState(LoggerFactory),
|
||||
_ => new IdleGroupState(LoggerFactory)
|
||||
};
|
||||
|
||||
context.SetState(newState);
|
||||
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, no previous track available.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogDebug("No previous track available in group {GroupId}.", context.GroupId.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -653,12 +658,12 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
|
||||
if (!context.IsBuffering())
|
||||
{
|
||||
Logger.LogDebug("HandleRequest: {RequestType} in group {GroupId}, returning to previous state.", request.Type, context.GroupId.ToString());
|
||||
_logger.LogDebug("Ignoring session {SessionId}, group {GroupId} is ready.", session.Id, context.GroupId.ToString());
|
||||
|
||||
if (ResumePlaying)
|
||||
{
|
||||
// Client, that was buffering, stopped following playback.
|
||||
var playingState = new PlayingGroupState(Logger);
|
||||
var playingState = new PlayingGroupState(LoggerFactory);
|
||||
context.SetState(playingState);
|
||||
var unpauseRequest = new UnpauseGroupRequest();
|
||||
playingState.HandleRequest(context, Type, unpauseRequest, session, cancellationToken);
|
||||
@@ -666,7 +671,7 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
|
||||
else
|
||||
{
|
||||
// Group is ready, returning to previous state.
|
||||
var pausedState = new PausedGroupState(Logger);
|
||||
var pausedState = new PausedGroupState(LoggerFactory);
|
||||
context.SetState(pausedState);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
|
||||
/// Random number generator used to shuffle lists.
|
||||
/// </summary>
|
||||
/// <value>The random number generator.</value>
|
||||
private readonly Random randomNumberGenerator = new Random();
|
||||
private readonly Random _randomNumberGenerator = new Random();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PlayQueueManager" /> class.
|
||||
@@ -102,7 +102,7 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
|
||||
SortedPlaylist = CreateQueueItemsFromArray(items);
|
||||
if (ShuffleMode.Equals(GroupShuffleMode.Shuffle))
|
||||
{
|
||||
ShuffledPlaylist = SortedPlaylist.ToList();
|
||||
ShuffledPlaylist = new List<QueueItem>(SortedPlaylist);
|
||||
Shuffle(ShuffledPlaylist);
|
||||
}
|
||||
|
||||
@@ -134,17 +134,17 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
|
||||
{
|
||||
if (PlayingItemIndex == NoPlayingItemIndex)
|
||||
{
|
||||
ShuffledPlaylist = SortedPlaylist.ToList();
|
||||
ShuffledPlaylist = new List<QueueItem>(SortedPlaylist);
|
||||
Shuffle(ShuffledPlaylist);
|
||||
}
|
||||
else if (ShuffleMode.Equals(GroupShuffleMode.Sorted))
|
||||
{
|
||||
// First time shuffle.
|
||||
var playingItem = SortedPlaylist[PlayingItemIndex];
|
||||
ShuffledPlaylist = SortedPlaylist.ToList();
|
||||
ShuffledPlaylist = new List<QueueItem>(SortedPlaylist);
|
||||
ShuffledPlaylist.RemoveAt(PlayingItemIndex);
|
||||
Shuffle(ShuffledPlaylist);
|
||||
ShuffledPlaylist = ShuffledPlaylist.Prepend(playingItem).ToList();
|
||||
ShuffledPlaylist.Insert(0, playingItem);
|
||||
PlayingItemIndex = 0;
|
||||
}
|
||||
else
|
||||
@@ -153,7 +153,7 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
|
||||
var playingItem = ShuffledPlaylist[PlayingItemIndex];
|
||||
ShuffledPlaylist.RemoveAt(PlayingItemIndex);
|
||||
Shuffle(ShuffledPlaylist);
|
||||
ShuffledPlaylist = ShuffledPlaylist.Prepend(playingItem).ToList();
|
||||
ShuffledPlaylist.Insert(0, playingItem);
|
||||
PlayingItemIndex = 0;
|
||||
}
|
||||
|
||||
@@ -236,14 +236,7 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
|
||||
public string GetPlayingItemPlaylistId()
|
||||
{
|
||||
var playingItem = GetPlayingItem();
|
||||
if (playingItem != null)
|
||||
{
|
||||
return playingItem.PlaylistItemId;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return playingItem?.PlaylistItemId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -253,14 +246,7 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
|
||||
public Guid GetPlayingItemId()
|
||||
{
|
||||
var playingItem = GetPlayingItem();
|
||||
if (playingItem != null)
|
||||
{
|
||||
return playingItem.ItemId;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Guid.Empty;
|
||||
}
|
||||
return playingItem?.ItemId ?? Guid.Empty;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -536,7 +522,7 @@ namespace MediaBrowser.Controller.SyncPlay.Queue
|
||||
while (n > 1)
|
||||
{
|
||||
n--;
|
||||
int k = randomNumberGenerator.Next(n + 1);
|
||||
int k = _randomNumberGenerator.Next(n + 1);
|
||||
T value = list[k];
|
||||
list[k] = list[n];
|
||||
list[n] = value;
|
||||
|
||||
Reference in New Issue
Block a user