aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs10
-rw-r--r--MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs3
-rw-r--r--MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs3
-rw-r--r--MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs3
-rw-r--r--MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs6
-rw-r--r--MediaBrowser.Controller/SyncPlay/IGroupController.cs1
-rw-r--r--MediaBrowser.Controller/SyncPlay/IGroupState.cs1
-rw-r--r--MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs14
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs33
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs21
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs2
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs29
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs27
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs33
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs15
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs2
-rw-r--r--MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs2
-rw-r--r--MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs9
26 files changed, 243 insertions, 91 deletions
diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs
index 829ef2bba..bc2e22380 100644
--- a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs
+++ b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs
@@ -1,10 +1,10 @@
-using System;
using System.Threading;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
using MediaBrowser.Model.SyncPlay;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.GroupStates
{
/// <summary>
/// Class AbstractGroupState.
@@ -104,7 +104,11 @@ namespace MediaBrowser.Controller.SyncPlay
return;
}
- var reason = request.Mode.Equals("next", StringComparison.OrdinalIgnoreCase) ? PlayQueueUpdateReason.QueueNext : PlayQueueUpdateReason.Queue;
+ var reason = request.Mode switch
+ {
+ GroupQueueMode.QueueNext => PlayQueueUpdateReason.QueueNext,
+ _ => PlayQueueUpdateReason.Queue
+ };
var playQueueUpdate = context.GetPlayQueueUpdate(reason);
var update = context.NewSyncPlayGroupUpdate(GroupUpdateType.PlayQueue, playQueueUpdate);
context.SendGroupUpdate(session, SyncPlayBroadcastType.AllGroup, update, cancellationToken);
diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs
index d9350cc9b..660afb607 100644
--- a/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs
+++ b/MediaBrowser.Controller/SyncPlay/GroupStates/IdleGroupState.cs
@@ -1,9 +1,10 @@
using System.Threading;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
using MediaBrowser.Model.SyncPlay;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.GroupStates
{
/// <summary>
/// Class IdleGroupState.
diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs
index 5ae478605..29942898e 100644
--- a/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs
+++ b/MediaBrowser.Controller/SyncPlay/GroupStates/PausedGroupState.cs
@@ -1,10 +1,11 @@
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
using MediaBrowser.Model.SyncPlay;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.GroupStates
{
/// <summary>
/// Class PausedGroupState.
diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs
index 394c64e51..c5d73dedb 100644
--- a/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs
+++ b/MediaBrowser.Controller/SyncPlay/GroupStates/PlayingGroupState.cs
@@ -1,10 +1,11 @@
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
using MediaBrowser.Model.SyncPlay;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.GroupStates
{
/// <summary>
/// Class PlayingGroupState.
diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs
index c78077b35..78318dd94 100644
--- a/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs
+++ b/MediaBrowser.Controller/SyncPlay/GroupStates/WaitingGroupState.cs
@@ -1,10 +1,11 @@
using System;
using System.Threading;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
using MediaBrowser.Model.SyncPlay;
using Microsoft.Extensions.Logging;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.GroupStates
{
/// <summary>
/// Class WaitingGroupState.
@@ -464,8 +465,7 @@ namespace MediaBrowser.Controller.SyncPlay
{
// Others are still buffering, tell this client to pause when ready.
var command = context.NewSyncPlayCommand(SendCommandType.Pause);
- var pauseAtTime = currentTime.AddTicks(delayTicks);
- command.When = context.DateToUTCString(pauseAtTime);
+ command.When = currentTime.AddTicks(delayTicks);
context.SendCommand(session, SyncPlayBroadcastType.CurrentSession, command, cancellationToken);
Logger.LogInformation("HandleRequest: {0} in group {1}, others still buffering, {2} will pause when ready in {3} seconds.", request.Type, context.GroupId.ToString(), session.Id, TimeSpan.FromTicks(delayTicks).TotalSeconds);
diff --git a/MediaBrowser.Controller/SyncPlay/IGroupController.cs b/MediaBrowser.Controller/SyncPlay/IGroupController.cs
index 038233fdd..aa8bb9eae 100644
--- a/MediaBrowser.Controller/SyncPlay/IGroupController.cs
+++ b/MediaBrowser.Controller/SyncPlay/IGroupController.cs
@@ -2,6 +2,7 @@ using System;
using System.Threading;
using Jellyfin.Data.Entities;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.Queue;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay
diff --git a/MediaBrowser.Controller/SyncPlay/IGroupState.cs b/MediaBrowser.Controller/SyncPlay/IGroupState.cs
index f6ebe2a58..0028823b4 100644
--- a/MediaBrowser.Controller/SyncPlay/IGroupState.cs
+++ b/MediaBrowser.Controller/SyncPlay/IGroupState.cs
@@ -1,5 +1,6 @@
using System.Threading;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay
diff --git a/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs b/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs
index 2ddaae640..3609be36b 100644
--- a/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs
+++ b/MediaBrowser.Controller/SyncPlay/IGroupStateContext.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.Queue;
using MediaBrowser.Model.SyncPlay;
namespace MediaBrowser.Controller.SyncPlay
@@ -98,13 +99,6 @@ namespace MediaBrowser.Controller.SyncPlay
GroupUpdate<T> NewSyncPlayGroupUpdate<T>(GroupUpdateType type, T data);
/// <summary>
- /// Converts DateTime to UTC string.
- /// </summary>
- /// <param name="dateTime">The date to convert.</param>
- /// <returns>The UTC string.</returns>
- string DateToUTCString(DateTime dateTime);
-
- /// <summary>
/// Sanitizes the PositionTicks, considers the current playing item when available.
/// </summary>
/// <param name="positionTicks">The PositionTicks.</param>
@@ -187,7 +181,7 @@ namespace MediaBrowser.Controller.SyncPlay
/// <param name="newItems">The new items to add to the play queue.</param>
/// <param name="mode">The mode with which the items will be added.</param>
/// <returns><c>true</c> if the play queue has been changed; <c>false</c> if something went wrong.</returns>
- bool AddToPlayQueue(IEnumerable<Guid> newItems, string mode);
+ bool AddToPlayQueue(IEnumerable<Guid> newItems, GroupQueueMode mode);
/// <summary>
/// Restarts current item in play queue.
@@ -210,13 +204,13 @@ namespace MediaBrowser.Controller.SyncPlay
/// Sets the repeat mode.
/// </summary>
/// <param name="mode">The new mode.</param>
- void SetRepeatMode(string mode);
+ void SetRepeatMode(GroupRepeatMode mode);
/// <summary>
/// Sets the shuffle mode.
/// </summary>
/// <param name="mode">The new mode.</param>
- void SetShuffleMode(string mode);
+ void SetShuffleMode(GroupShuffleMode mode);
/// <summary>
/// Creates a play queue update.
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs
index b5bed89f2..a12ab96b7 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs
@@ -3,7 +3,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class BufferGroupRequest.
@@ -11,28 +11,43 @@ namespace MediaBrowser.Controller.SyncPlay
public class BufferGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets when the request has been made by the client.
+ /// Initializes a new instance of the <see cref="BufferGroupRequest"/> class.
+ /// </summary>
+ /// <param name="when">When the request has been made, as reported by the client.</param>
+ /// <param name="positionTicks">The position ticks.</param>
+ /// <param name="isPlaying">Whether the client playback is unpaused.</param>
+ /// <param name="playlistItemId">The playlist item identifier of the playing item.</param>
+ public BufferGroupRequest(DateTime when, long positionTicks, bool isPlaying, string playlistItemId)
+ {
+ When = when;
+ PositionTicks = positionTicks;
+ IsPlaying = isPlaying;
+ PlaylistItemId = playlistItemId;
+ }
+
+ /// <summary>
+ /// Gets when the request has been made by the client.
/// </summary>
/// <value>The date of the request.</value>
- public DateTime When { get; set; }
+ public DateTime When { get; }
/// <summary>
- /// Gets or sets the position ticks.
+ /// Gets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
- public long PositionTicks { get; set; }
+ public long PositionTicks { get; }
/// <summary>
- /// Gets or sets a value indicating whether the client playback is unpaused.
+ /// Gets a value indicating whether the client playback is unpaused.
/// </summary>
/// <value>The client playback status.</value>
- public bool IsPlaying { get; set; }
+ public bool IsPlaying { get; }
/// <summary>
- /// Gets or sets the playlist item identifier of the playing item.
+ /// Gets the playlist item identifier of the playing item.
/// </summary>
/// <value>The playlist item identifier.</value>
- public string PlaylistItemId { get; set; }
+ public string PlaylistItemId { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.Buffer;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs
index 325839f10..25034cb10 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class IgnoreWaitGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class IgnoreWaitGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets a value indicating whether the client should be ignored.
+ /// Initializes a new instance of the <see cref="IgnoreWaitGroupRequest"/> class.
+ /// </summary>
+ /// <param name="ignoreWait">Whether the client should be ignored.</param>
+ public IgnoreWaitGroupRequest(bool ignoreWait)
+ {
+ IgnoreWait = ignoreWait;
+ }
+
+ /// <summary>
+ /// Gets a value indicating whether the client should be ignored.
/// </summary>
/// <value>The client group-wait status.</value>
- public bool IgnoreWait { get; set; }
+ public bool IgnoreWait { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.IgnoreWait;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs
index 3c95f53d4..a12eff8b8 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class MovePlaylistItemGroupRequest.
@@ -10,16 +10,27 @@ namespace MediaBrowser.Controller.SyncPlay
public class MovePlaylistItemGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the playlist identifier of the item.
+ /// Initializes a new instance of the <see cref="MovePlaylistItemGroupRequest"/> class.
+ /// </summary>
+ /// <param name="playlistItemId">The playlist identifier of the item.</param>
+ /// <param name="newIndex">The new position.</param>
+ public MovePlaylistItemGroupRequest(string playlistItemId, int newIndex)
+ {
+ PlaylistItemId = playlistItemId;
+ NewIndex = newIndex;
+ }
+
+ /// <summary>
+ /// Gets the playlist identifier of the item.
/// </summary>
/// <value>The playlist identifier of the item.</value>
- public string PlaylistItemId { get; set; }
+ public string PlaylistItemId { get; }
/// <summary>
- /// Gets or sets the new position.
+ /// Gets the new position.
/// </summary>
/// <value>The new position.</value>
- public int NewIndex { get; set; }
+ public int NewIndex { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.MovePlaylistItem;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs
index 8636d6f4d..f87bbc556 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class NextTrackGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class NextTrackGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the playing item identifier.
+ /// Initializes a new instance of the <see cref="NextTrackGroupRequest"/> class.
+ /// </summary>
+ /// <param name="playlistItemId">The playing item identifier.</param>
+ public NextTrackGroupRequest(string playlistItemId)
+ {
+ PlaylistItemId = playlistItemId;
+ }
+
+ /// <summary>
+ /// Gets the playing item identifier.
/// </summary>
/// <value>The playing item identifier.</value>
- public string PlaylistItemId { get; set; }
+ public string PlaylistItemId { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.NextTrack;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs
index 45bd3b15f..0dcd1423f 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PauseGroupRequest.
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs
index 9dacb7985..2528bb3e7 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PingGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class PingGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the ping time.
+ /// Initializes a new instance of the <see cref="PingGroupRequest"/> class.
+ /// </summary>
+ /// <param name="ping">The ping time.</param>
+ public PingGroupRequest(long ping)
+ {
+ Ping = ping;
+ }
+
+ /// <summary>
+ /// Gets the ping time.
/// </summary>
/// <value>The ping time.</value>
- public long Ping { get; set; }
+ public long Ping { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.Ping;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs
index e090a882e..306c161ed 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs
@@ -4,7 +4,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PlayGroupRequest.
@@ -12,22 +12,37 @@ namespace MediaBrowser.Controller.SyncPlay
public class PlayGroupRequest : IGroupPlaybackRequest
{
/// <summary>
+ /// Initializes a new instance of the <see cref="PlayGroupRequest"/> class.
+ /// </summary>
+ /// <param name="playingQueue">The playing queue.</param>
+ /// <param name="playingItemPosition">The playing item position.</param>
+ /// <param name="startPositionTicks">The start position ticks.</param>
+ public PlayGroupRequest(Guid[] playingQueue, int playingItemPosition, long startPositionTicks)
+ {
+ var list = new List<Guid>();
+ list.AddRange(playingQueue);
+ PlayingQueue = list;
+ PlayingItemPosition = playingItemPosition;
+ StartPositionTicks = startPositionTicks;
+ }
+
+ /// <summary>
/// Gets the playing queue.
/// </summary>
/// <value>The playing queue.</value>
- public List<Guid> PlayingQueue { get; } = new List<Guid>();
+ public IReadOnlyList<Guid> PlayingQueue { get; }
/// <summary>
- /// Gets or sets the playing item from the queue.
+ /// Gets the position of the playing item in the queue.
/// </summary>
- /// <value>The playing item.</value>
- public int PlayingItemPosition { get; set; }
+ /// <value>The playing item position.</value>
+ public int PlayingItemPosition { get; }
/// <summary>
- /// Gets or sets the start position ticks.
+ /// Gets the start position ticks.
/// </summary>
/// <value>The start position ticks.</value>
- public long StartPositionTicks { get; set; }
+ public long StartPositionTicks { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.Play;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs
index aca5d678e..206fef331 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class PreviousTrackGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class PreviousTrackGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the playing item identifier.
+ /// Initializes a new instance of the <see cref="PreviousTrackGroupRequest"/> class.
+ /// </summary>
+ /// <param name="playlistItemId">The playing item identifier.</param>
+ public PreviousTrackGroupRequest(string playlistItemId)
+ {
+ PlaylistItemId = playlistItemId;
+ }
+
+ /// <summary>
+ /// Gets the playing item identifier.
/// </summary>
/// <value>The playing item identifier.</value>
- public string PlaylistItemId { get; set; }
+ public string PlaylistItemId { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.PreviousTrack;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs
index 82380b209..9580b5315 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs
@@ -4,7 +4,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class QueueGroupRequest.
@@ -12,16 +12,29 @@ namespace MediaBrowser.Controller.SyncPlay
public class QueueGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets the items to queue.
+ /// Initializes a new instance of the <see cref="QueueGroupRequest"/> class.
/// </summary>
- /// <value>The items to queue.</value>
- public List<Guid> ItemIds { get; } = new List<Guid>();
+ /// <param name="items">The items to add to the queue.</param>
+ /// <param name="mode">The enqueue mode.</param>
+ public QueueGroupRequest(Guid[] items, GroupQueueMode mode)
+ {
+ var list = new List<Guid>();
+ list.AddRange(items);
+ ItemIds = list;
+ Mode = mode;
+ }
+
+ /// <summary>
+ /// Gets the items to enqueue.
+ /// </summary>
+ /// <value>The items to enqueue.</value>
+ public IReadOnlyList<Guid> ItemIds { get; }
/// <summary>
- /// Gets or sets the mode in which to add the new items.
+ /// Gets the mode in which to add the new items.
/// </summary>
- /// <value>The mode.</value>
- public string Mode { get; set; }
+ /// <value>The enqueue mode.</value>
+ public GroupQueueMode Mode { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.Queue;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs
index c8a2268cf..a2b3553ce 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs
@@ -3,7 +3,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class ReadyGroupRequest.
@@ -11,28 +11,43 @@ namespace MediaBrowser.Controller.SyncPlay
public class ReadyGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets when the request has been made by the client.
+ /// Initializes a new instance of the <see cref="ReadyGroupRequest"/> class.
+ /// </summary>
+ /// <param name="when">When the request has been made, as reported by the client.</param>
+ /// <param name="positionTicks">The position ticks.</param>
+ /// <param name="isPlaying">Whether the client playback is unpaused.</param>
+ /// <param name="playlistItemId">The playlist item identifier of the playing item.</param>
+ public ReadyGroupRequest(DateTime when, long positionTicks, bool isPlaying, string playlistItemId)
+ {
+ When = when;
+ PositionTicks = positionTicks;
+ IsPlaying = isPlaying;
+ PlaylistItemId = playlistItemId;
+ }
+
+ /// <summary>
+ /// Gets when the request has been made by the client.
/// </summary>
/// <value>The date of the request.</value>
- public DateTime When { get; set; }
+ public DateTime When { get; }
/// <summary>
- /// Gets or sets the position ticks.
+ /// Gets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
- public long PositionTicks { get; set; }
+ public long PositionTicks { get; }
/// <summary>
- /// Gets or sets a value indicating whether the client playback is unpaused.
+ /// Gets a value indicating whether the client playback is unpaused.
/// </summary>
/// <value>The client playback status.</value>
- public bool IsPlaying { get; set; }
+ public bool IsPlaying { get; }
/// <summary>
- /// Gets or sets the playlist item identifier of the playing item.
+ /// Gets the playlist item identifier of the playing item.
/// </summary>
/// <value>The playlist item identifier.</value>
- public string PlaylistItemId { get; set; }
+ public string PlaylistItemId { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.Ready;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs
index 4ead1301b..21c602846 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs
@@ -3,7 +3,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class RemoveFromPlaylistGroupRequest.
@@ -11,10 +11,21 @@ namespace MediaBrowser.Controller.SyncPlay
public class RemoveFromPlaylistGroupRequest : IGroupPlaybackRequest
{
/// <summary>
+ /// Initializes a new instance of the <see cref="RemoveFromPlaylistGroupRequest"/> class.
+ /// </summary>
+ /// <param name="items">The playlist ids of the items to remove.</param>
+ public RemoveFromPlaylistGroupRequest(string[] items)
+ {
+ var list = new List<string>();
+ list.AddRange(items);
+ PlaylistItemIds = list;
+ }
+
+ /// <summary>
/// Gets the playlist identifiers ot the items.
/// </summary>
/// <value>The playlist identifiers ot the items.</value>
- public List<string> PlaylistItemIds { get; } = new List<string>();
+ public IReadOnlyList<string> PlaylistItemIds { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.RemoveFromPlaylist;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs
index d311bffdc..f7bfc1978 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SeekGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class SeekGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the position ticks.
+ /// Initializes a new instance of the <see cref="SeekGroupRequest"/> class.
+ /// </summary>
+ /// <param name="positionTicks">The position ticks.</param>
+ public SeekGroupRequest(long positionTicks)
+ {
+ PositionTicks = positionTicks;
+ }
+
+ /// <summary>
+ /// Gets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
- public long PositionTicks { get; set; }
+ public long PositionTicks { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.Seek;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs
index 0983d9129..2ca33c1cc 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SetPlaylistItemGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class SetPlaylistItemGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the playlist identifier of the playing item.
+ /// Initializes a new instance of the <see cref="SetPlaylistItemGroupRequest"/> class.
+ /// </summary>
+ /// <param name="playlistItemId">The playlist identifier of the item.</param>
+ public SetPlaylistItemGroupRequest(string playlistItemId)
+ {
+ PlaylistItemId = playlistItemId;
+ }
+
+ /// <summary>
+ /// Gets the playlist identifier of the playing item.
/// </summary>
/// <value>The playlist identifier of the playing item.</value>
- public string PlaylistItemId { get; set; }
+ public string PlaylistItemId { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.SetPlaylistItem;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs
index 79373ef5f..cd4505e4d 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SetRepeatModeGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class SetRepeatModeGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the repeat mode.
+ /// Initializes a new instance of the <see cref="SetRepeatModeGroupRequest"/> class.
+ /// </summary>
+ /// <param name="mode">The repeat mode.</param>
+ public SetRepeatModeGroupRequest(GroupRepeatMode mode)
+ {
+ Mode = mode;
+ }
+
+ /// <summary>
+ /// Gets the repeat mode.
/// </summary>
/// <value>The repeat mode.</value>
- public string Mode { get; set; }
+ public GroupRepeatMode Mode { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.SetRepeatMode;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs
index 316fb49f4..4530a34c0 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class SetShuffleModeGroupRequest.
@@ -10,10 +10,19 @@ namespace MediaBrowser.Controller.SyncPlay
public class SetShuffleModeGroupRequest : IGroupPlaybackRequest
{
/// <summary>
- /// Gets or sets the shuffle mode.
+ /// Initializes a new instance of the <see cref="SetShuffleModeGroupRequest"/> class.
+ /// </summary>
+ /// <param name="mode">The shuffle mode.</param>
+ public SetShuffleModeGroupRequest(GroupShuffleMode mode)
+ {
+ Mode = mode;
+ }
+
+ /// <summary>
+ /// Gets the shuffle mode.
/// </summary>
/// <value>The shuffle mode.</value>
- public string Mode { get; set; }
+ public GroupShuffleMode Mode { get; }
/// <inheritdoc />
public PlaybackRequestType Type { get; } = PlaybackRequestType.SetShuffleMode;
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs
index 9f6f8ea63..ec01cd110 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class StopGroupRequest.
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs
index 84a6b0a6e..bdf4fd476 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs
@@ -2,7 +2,7 @@ using System.Threading;
using MediaBrowser.Controller.Session;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
{
/// <summary>
/// Class UnpauseGroupRequest.
diff --git a/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs b/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs
index 821a6314b..2d1d1533b 100644
--- a/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs
+++ b/MediaBrowser.Controller/SyncPlay/Queue/PlayQueueManager.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using MediaBrowser.Model.SyncPlay;
-namespace MediaBrowser.Controller.SyncPlay
+namespace MediaBrowser.Controller.SyncPlay.Queue
{
/// <summary>
/// Class PlayQueueManager.
@@ -563,11 +563,8 @@ namespace MediaBrowser.Controller.SyncPlay
var list = new List<QueueItem>();
foreach (var item in items)
{
- list.Add(new QueueItem()
- {
- ItemId = item,
- PlaylistItemId = "syncPlayItem" + GetNextProgressiveId()
- });
+ var queueItem = new QueueItem(item, "syncPlayItem" + GetNextProgressiveId());
+ list.Add(queueItem);
}
return list;