aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIonut Andrei Oanca <oancaionutandrei@gmail.com>2020-10-22 15:51:58 +0200
committerIonut Andrei Oanca <oancaionutandrei@gmail.com>2020-10-22 16:12:27 +0200
commit0c735a039538bfaa44d25df415f3d41519e37194 (patch)
tree993fb632511beafb13adf0a9b2a793bc407de351
parent1cabe82b59071a277d81f9438189b565e93f0660 (diff)
Address requested changes by review
-rw-r--r--Emby.Server.Implementations/SyncPlay/GroupController.cs50
-rw-r--r--Emby.Server.Implementations/SyncPlay/GroupStates/AbstractGroupState.cs2
-rw-r--r--Emby.Server.Implementations/SyncPlay/GroupStates/IdleGroupState.cs3
-rw-r--r--Emby.Server.Implementations/SyncPlay/GroupStates/PausedGroupState.cs9
-rw-r--r--Emby.Server.Implementations/SyncPlay/GroupStates/PlayingGroupState.cs3
-rw-r--r--Emby.Server.Implementations/SyncPlay/GroupStates/WaitingGroupState.cs17
-rw-r--r--MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs25
7 files changed, 54 insertions, 55 deletions
diff --git a/Emby.Server.Implementations/SyncPlay/GroupController.cs b/Emby.Server.Implementations/SyncPlay/GroupController.cs
index 687aa7a3a..65a711fb4 100644
--- a/Emby.Server.Implementations/SyncPlay/GroupController.cs
+++ b/Emby.Server.Implementations/SyncPlay/GroupController.cs
@@ -127,16 +127,6 @@ namespace Emby.Server.Implementations.SyncPlay
}
/// <summary>
- /// Checks if a session is in this group.
- /// </summary>
- /// <param name="sessionId">The session identifier to check.</param>
- /// <returns><c>true</c> if the session is in this group; <c>false</c> otherwise.</returns>
- private bool ContainsSession(string sessionId)
- {
- return Participants.ContainsKey(sessionId);
- }
-
- /// <summary>
/// Adds the session to the group.
/// </summary>
/// <param name="session">The session.</param>
@@ -174,16 +164,22 @@ namespace Emby.Server.Implementations.SyncPlay
case SyncPlayBroadcastType.CurrentSession:
return new SessionInfo[] { from };
case SyncPlayBroadcastType.AllGroup:
- return Participants.Values.Select(
- session => session.Session).ToArray();
+ return Participants
+ .Values
+ .Select(session => session.Session)
+ .ToArray();
case SyncPlayBroadcastType.AllExceptCurrentSession:
- return Participants.Values.Select(
- session => session.Session).Where(
- session => !session.Id.Equals(from.Id)).ToArray();
+ return Participants
+ .Values
+ .Select(session => session.Session)
+ .Where(session => !session.Id.Equals(from.Id))
+ .ToArray();
case SyncPlayBroadcastType.AllReady:
- return Participants.Values.Where(
- session => !session.IsBuffering).Select(
- session => session.Session).ToArray();
+ return Participants
+ .Values
+ .Where(session => !session.IsBuffering)
+ .Select(session => session.Session)
+ .ToArray();
default:
return Array.Empty<SessionInfo>();
}
@@ -236,7 +232,8 @@ namespace Emby.Server.Implementations.SyncPlay
}
// Get list of users.
- var users = Participants.Values
+ var users = Participants
+ .Values
.Select(participant => _userManager.GetUserById(participant.Session.UserId));
// Find problematic users.
@@ -365,7 +362,7 @@ namespace Emby.Server.Implementations.SyncPlay
/// <inheritdoc />
public void SetIgnoreGroupWait(SessionInfo session, bool ignoreGroupWait)
{
- if (!ContainsSession(session.Id))
+ if (!Participants.ContainsKey(session.Id))
{
return;
}
@@ -443,8 +440,8 @@ namespace Emby.Server.Implementations.SyncPlay
public long SanitizePositionTicks(long? positionTicks)
{
var ticks = positionTicks ?? 0;
- ticks = ticks >= 0 ? ticks : 0;
- ticks = ticks > RunTimeTicks ? RunTimeTicks : ticks;
+ ticks = Math.Max(ticks, 0);
+ ticks = Math.Min(ticks, RunTimeTicks);
return ticks;
}
@@ -663,8 +660,13 @@ namespace Emby.Server.Implementations.SyncPlay
{
var currentTime = DateTime.UtcNow;
var elapsedTime = currentTime - LastActivity;
- // Event may happen during the delay added to account for latency.
- startPositionTicks += elapsedTime.Ticks > 0 ? elapsedTime.Ticks : 0;
+ // Elapsed time is negative if event happens
+ // during the delay added to account for latency.
+ // In this phase clients haven't started the playback yet.
+ // In other words, LastActivity is in the future,
+ // when playback unpause is supposed to happen.
+ // Adjust ticks only if playback actually started.
+ startPositionTicks += Math.Max(elapsedTime.Ticks, 0);
}
return new PlayQueueUpdate()
diff --git a/Emby.Server.Implementations/SyncPlay/GroupStates/AbstractGroupState.cs b/Emby.Server.Implementations/SyncPlay/GroupStates/AbstractGroupState.cs
index 1eb110772..26cd51b8d 100644
--- a/Emby.Server.Implementations/SyncPlay/GroupStates/AbstractGroupState.cs
+++ b/Emby.Server.Implementations/SyncPlay/GroupStates/AbstractGroupState.cs
@@ -212,7 +212,7 @@ namespace MediaBrowser.Controller.SyncPlay
private void UnhandledRequest(IPlaybackGroupRequest request)
{
- _logger.LogWarning("HandleRequest: unhandled {0} request for {1} state.", request.GetRequestType(), this.GetGroupState());
+ _logger.LogWarning("HandleRequest: unhandled {0} request for {1} state.", request.GetRequestType(), GetGroupState());
}
}
}
diff --git a/Emby.Server.Implementations/SyncPlay/GroupStates/IdleGroupState.cs b/Emby.Server.Implementations/SyncPlay/GroupStates/IdleGroupState.cs
index b8510715a..70fe3e006 100644
--- a/Emby.Server.Implementations/SyncPlay/GroupStates/IdleGroupState.cs
+++ b/Emby.Server.Implementations/SyncPlay/GroupStates/IdleGroupState.cs
@@ -16,7 +16,8 @@ namespace MediaBrowser.Controller.SyncPlay
/// <summary>
/// Default constructor.
/// </summary>
- public IdleGroupState(ILogger logger) : base(logger)
+ public IdleGroupState(ILogger logger)
+ : base(logger)
{
// Do nothing.
}
diff --git a/Emby.Server.Implementations/SyncPlay/GroupStates/PausedGroupState.cs b/Emby.Server.Implementations/SyncPlay/GroupStates/PausedGroupState.cs
index 8c4bd20b1..ca2cb0988 100644
--- a/Emby.Server.Implementations/SyncPlay/GroupStates/PausedGroupState.cs
+++ b/Emby.Server.Implementations/SyncPlay/GroupStates/PausedGroupState.cs
@@ -17,7 +17,8 @@ namespace MediaBrowser.Controller.SyncPlay
/// <summary>
/// Default constructor.
/// </summary>
- public PausedGroupState(ILogger logger) : base(logger)
+ public PausedGroupState(ILogger logger)
+ : base(logger)
{
// Do nothing.
}
@@ -70,8 +71,12 @@ namespace MediaBrowser.Controller.SyncPlay
var currentTime = DateTime.UtcNow;
var elapsedTime = currentTime - context.LastActivity;
context.LastActivity = currentTime;
+ // Elapsed time is negative if event happens
+ // during the delay added to account for latency.
+ // In this phase clients haven't started the playback yet.
+ // In other words, LastActivity is in the future,
+ // when playback unpause is supposed to happen.
// Seek only if playback actually started.
- // Pause request may be issued during the delay added to account for latency.
context.PositionTicks += Math.Max(elapsedTime.Ticks, 0);
var command = context.NewSyncPlayCommand(SendCommandType.Pause);
diff --git a/Emby.Server.Implementations/SyncPlay/GroupStates/PlayingGroupState.cs b/Emby.Server.Implementations/SyncPlay/GroupStates/PlayingGroupState.cs
index a3b0baf96..85119669d 100644
--- a/Emby.Server.Implementations/SyncPlay/GroupStates/PlayingGroupState.cs
+++ b/Emby.Server.Implementations/SyncPlay/GroupStates/PlayingGroupState.cs
@@ -22,7 +22,8 @@ namespace MediaBrowser.Controller.SyncPlay
/// <summary>
/// Default constructor.
/// </summary>
- public PlayingGroupState(ILogger logger) : base(logger)
+ public PlayingGroupState(ILogger logger)
+ : base(logger)
{
// Do nothing.
}
diff --git a/Emby.Server.Implementations/SyncPlay/GroupStates/WaitingGroupState.cs b/Emby.Server.Implementations/SyncPlay/GroupStates/WaitingGroupState.cs
index ff1d379d7..8e970751f 100644
--- a/Emby.Server.Implementations/SyncPlay/GroupStates/WaitingGroupState.cs
+++ b/Emby.Server.Implementations/SyncPlay/GroupStates/WaitingGroupState.cs
@@ -32,7 +32,8 @@ namespace MediaBrowser.Controller.SyncPlay
/// <summary>
/// Default constructor.
/// </summary>
- public WaitingGroupState(ILogger logger) : base(logger)
+ public WaitingGroupState(ILogger logger)
+ : base(logger)
{
// Do nothing.
}
@@ -59,8 +60,12 @@ namespace MediaBrowser.Controller.SyncPlay
var currentTime = DateTime.UtcNow;
var elapsedTime = currentTime - context.LastActivity;
context.LastActivity = currentTime;
+ // Elapsed time is negative if event happens
+ // during the delay added to account for latency.
+ // In this phase clients haven't started the playback yet.
+ // In other words, LastActivity is in the future,
+ // when playback unpause is supposed to happen.
// Seek only if playback actually started.
- // Event may happen during the delay added to account for latency.
context.PositionTicks += Math.Max(elapsedTime.Ticks, 0);
}
@@ -355,6 +360,12 @@ namespace MediaBrowser.Controller.SyncPlay
var currentTime = DateTime.UtcNow;
var elapsedTime = currentTime - context.LastActivity;
context.LastActivity = currentTime;
+ // Elapsed time is negative if event happens
+ // during the delay added to account for latency.
+ // In this phase clients haven't started the playback yet.
+ // In other words, LastActivity is in the future,
+ // when playback unpause is supposed to happen.
+ // Seek only if playback actually started.
context.PositionTicks += Math.Max(elapsedTime.Ticks, 0);
// Send pause command to all non-buffering sessions.
@@ -484,7 +495,7 @@ namespace MediaBrowser.Controller.SyncPlay
{
// Client, that was buffering, resumed playback but did not update others in time.
delayTicks = context.GetHighestPing() * 2 * TimeSpan.TicksPerMillisecond;
- delayTicks = delayTicks < context.DefaultPing ? context.DefaultPing : delayTicks;
+ delayTicks = Math.Max(delayTicks, context.DefaultPing);
context.LastActivity = currentTime.AddTicks(delayTicks);
diff --git a/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs b/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs
index 366bedfa1..9ab0dfd2a 100644
--- a/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs
+++ b/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs
@@ -25,7 +25,7 @@ namespace MediaBrowser.Controller.SyncPlay
/// <summary>
/// Class PlayQueueManager.
/// </summary>
- public class PlayQueueManager : IDisposable
+ public class PlayQueueManager
{
/// <summary>
/// Gets or sets the playing item index.
@@ -83,27 +83,6 @@ namespace MediaBrowser.Controller.SyncPlay
Reset();
}
- /// <inheritdoc />
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- /// <summary>
- /// Releases unmanaged and optionally managed resources.
- /// </summary>
- /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
- protected virtual void Dispose(bool disposing)
- {
- if (_disposed)
- {
- return;
- }
-
- _disposed = true;
- }
-
/// <summary>
/// Gets the next available identifier.
/// </summary>
@@ -284,7 +263,7 @@ namespace MediaBrowser.Controller.SyncPlay
ShuffledPlaylist.Add(playingItem);
}
PlayingItemIndex = 0;
- }
+ }
else
{
PlayingItemIndex = NoPlayingItemIndex;