diff --git a/Emby.Server.Implementations/SyncPlay/GroupController.cs b/Emby.Server.Implementations/SyncPlay/GroupController.cs
index 612fba5048..dc262f1cfc 100644
--- a/Emby.Server.Implementations/SyncPlay/GroupController.cs
+++ b/Emby.Server.Implementations/SyncPlay/GroupController.cs
@@ -12,8 +12,8 @@ using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.SyncPlay;
using MediaBrowser.Controller.SyncPlay.GroupStates;
using MediaBrowser.Controller.SyncPlay.Queue;
+using MediaBrowser.Controller.SyncPlay.Requests;
using MediaBrowser.Model.SyncPlay;
-using MediaBrowser.Model.SyncPlay.RequestBodies;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.SyncPlay
@@ -257,7 +257,7 @@ namespace Emby.Server.Implementations.SyncPlay
public bool IsGroupEmpty() => _participants.Count == 0;
///
- public void CreateGroup(SessionInfo session, NewGroupRequestBody request, CancellationToken cancellationToken)
+ public void CreateGroup(SessionInfo session, NewGroupRequest request, CancellationToken cancellationToken)
{
GroupName = request.GroupName;
AddSession(session);
@@ -292,7 +292,7 @@ namespace Emby.Server.Implementations.SyncPlay
}
///
- public void SessionJoin(SessionInfo session, JoinGroupRequestBody request, CancellationToken cancellationToken)
+ public void SessionJoin(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken)
{
AddSession(session);
@@ -308,7 +308,7 @@ namespace Emby.Server.Implementations.SyncPlay
}
///
- public void SessionRestore(SessionInfo session, JoinGroupRequestBody request, CancellationToken cancellationToken)
+ public void SessionRestore(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken)
{
var updateSession = NewSyncPlayGroupUpdate(GroupUpdateType.GroupJoined, GetInfo());
SendGroupUpdate(session, SyncPlayBroadcastType.CurrentSession, updateSession, cancellationToken);
@@ -322,7 +322,7 @@ namespace Emby.Server.Implementations.SyncPlay
}
///
- public void SessionLeave(SessionInfo session, CancellationToken cancellationToken)
+ public void SessionLeave(SessionInfo session, LeaveGroupRequest request, CancellationToken cancellationToken)
{
_state.SessionLeaving(this, _state.Type, session, cancellationToken);
@@ -343,7 +343,7 @@ namespace Emby.Server.Implementations.SyncPlay
// The server's job is to maintain a consistent state for clients to reference
// and notify clients of state changes. The actual syncing of media playback
// happens client side. Clients are aware of the server's time and use it to sync.
- _logger.LogInformation("Session {SessionId} requested {RequestType} in group {GroupId} that is {StateType}.", session.Id, request.Type, GroupId.ToString(), _state.Type);
+ _logger.LogInformation("Session {SessionId} requested {RequestType} in group {GroupId} that is {StateType}.", session.Id, request.Action, GroupId.ToString(), _state.Type);
request.Apply(this, _state, session, cancellationToken);
}
diff --git a/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs b/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs
index 5a0d619269..fbd3c3cfb2 100644
--- a/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs
+++ b/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs
@@ -5,8 +5,8 @@ using Jellyfin.Data.Enums;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.SyncPlay;
+using MediaBrowser.Controller.SyncPlay.Requests;
using MediaBrowser.Model.SyncPlay;
-using MediaBrowser.Model.SyncPlay.RequestBodies;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.SyncPlay
@@ -94,10 +94,9 @@ namespace Emby.Server.Implementations.SyncPlay
}
///
- public void NewGroup(SessionInfo session, NewGroupRequestBody request, CancellationToken cancellationToken)
+ public void NewGroup(SessionInfo session, NewGroupRequest request, CancellationToken cancellationToken)
{
- // TODO: create abstract class for GroupRequests to avoid explicit request type here.
- if (!IsRequestValid(session, GroupRequestType.NewGroup, request))
+ if (!IsRequestValid(session, request))
{
return;
}
@@ -111,7 +110,8 @@ namespace Emby.Server.Implementations.SyncPlay
{
if (IsSessionInGroup(session))
{
- LeaveGroup(session, cancellationToken);
+ var leaveGroupRequest = new LeaveGroupRequest();
+ LeaveGroup(session, leaveGroupRequest, cancellationToken);
}
var group = new GroupController(_loggerFactory, _userManager, _sessionManager, _libraryManager);
@@ -124,10 +124,9 @@ namespace Emby.Server.Implementations.SyncPlay
}
///
- public void JoinGroup(SessionInfo session, Guid groupId, JoinGroupRequestBody request, CancellationToken cancellationToken)
+ public void JoinGroup(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken)
{
- // TODO: create abstract class for GroupRequests to avoid explicit request type here.
- if (!IsRequestValid(session, GroupRequestType.JoinGroup, request))
+ if (!IsRequestValid(session, request))
{
return;
}
@@ -137,11 +136,11 @@ namespace Emby.Server.Implementations.SyncPlay
// Locking required to access list of groups.
lock (_groupsLock)
{
- _groups.TryGetValue(groupId, out IGroupController group);
+ _groups.TryGetValue(request.GroupId, out IGroupController group);
if (group == null)
{
- _logger.LogWarning("Session {SessionId} tried to join group {GroupId} that does not exist.", session.Id, groupId);
+ _logger.LogWarning("Session {SessionId} tried to join group {GroupId} that does not exist.", session.Id, request.GroupId);
var error = new GroupUpdate(Guid.Empty, GroupUpdateType.GroupDoesNotExist, string.Empty);
_sessionManager.SendSyncPlayGroupUpdate(session, error, CancellationToken.None);
@@ -165,13 +164,14 @@ namespace Emby.Server.Implementations.SyncPlay
if (IsSessionInGroup(session))
{
- if (FindJoinedGroupId(session).Equals(groupId))
+ if (FindJoinedGroupId(session).Equals(request.GroupId))
{
group.SessionRestore(session, request, cancellationToken);
return;
}
- LeaveGroup(session, cancellationToken);
+ var leaveGroupRequest = new LeaveGroupRequest();
+ LeaveGroup(session, leaveGroupRequest, cancellationToken);
}
AddSessionToGroup(session, group);
@@ -182,10 +182,9 @@ namespace Emby.Server.Implementations.SyncPlay
}
///
- public void LeaveGroup(SessionInfo session, CancellationToken cancellationToken)
+ public void LeaveGroup(SessionInfo session, LeaveGroupRequest request, CancellationToken cancellationToken)
{
- // TODO: create abstract class for GroupRequests to avoid explicit request type here.
- if (!IsRequestValid(session, GroupRequestType.LeaveGroup))
+ if (!IsRequestValid(session, request))
{
return;
}
@@ -210,7 +209,7 @@ namespace Emby.Server.Implementations.SyncPlay
lock (group)
{
RemoveSessionFromGroup(session, group);
- group.SessionLeave(session, cancellationToken);
+ group.SessionLeave(session, request, cancellationToken);
if (group.IsGroupEmpty())
{
@@ -223,10 +222,9 @@ namespace Emby.Server.Implementations.SyncPlay
}
///
- public List ListGroups(SessionInfo session)
+ public List ListGroups(SessionInfo session, ListGroupsRequest request)
{
- // TODO: create abstract class for GroupRequests to avoid explicit request type here.
- if (!IsRequestValid(session, GroupRequestType.ListGroups))
+ if (!IsRequestValid(session, request))
{
return new List();
}
@@ -256,8 +254,7 @@ namespace Emby.Server.Implementations.SyncPlay
///
public void HandleRequest(SessionInfo session, IGroupPlaybackRequest request, CancellationToken cancellationToken)
{
- // TODO: create abstract class for GroupRequests to avoid explicit request type here.
- if (!IsRequestValid(session, GroupRequestType.Playback, request))
+ if (!IsRequestValid(session, request))
{
return;
}
@@ -304,11 +301,8 @@ namespace Emby.Server.Implementations.SyncPlay
return;
}
- var request = new JoinGroupRequestBody()
- {
- GroupId = groupId
- };
- JoinGroup(session, groupId, request, CancellationToken.None);
+ var request = new JoinGroupRequest(groupId);
+ JoinGroup(session, request, CancellationToken.None);
}
///
@@ -409,13 +403,11 @@ namespace Emby.Server.Implementations.SyncPlay
/// Checks if a given session is allowed to make a given request.
///
/// The session.
- /// The request type.
/// The request.
- /// Whether to check if request is null.
- /// true if the request is valid, false otherwise. Will return false also when session is null.
- private bool IsRequestValid(SessionInfo session, GroupRequestType requestType, T request, bool checkRequest = true)
+ /// true if the request is valid, false otherwise. Will return false also when session or request is null.
+ private bool IsRequestValid(SessionInfo session, ISyncPlayRequest request)
{
- if (session == null || (request == null && checkRequest))
+ if (session == null || (request == null))
{
return false;
}
@@ -424,7 +416,7 @@ namespace Emby.Server.Implementations.SyncPlay
if (user.SyncPlayAccess == SyncPlayAccess.None)
{
- _logger.LogWarning("Session {SessionId} requested {RequestType} but does not have access to SyncPlay.", session.Id, requestType);
+ _logger.LogWarning("Session {SessionId} requested {RequestType} but does not have access to SyncPlay.", session.Id, request.Type);
// TODO: rename to a more generic error. Next PR will fix this.
var error = new GroupUpdate(Guid.Empty, GroupUpdateType.JoinGroupDenied, string.Empty);
@@ -432,7 +424,7 @@ namespace Emby.Server.Implementations.SyncPlay
return false;
}
- if (requestType.Equals(GroupRequestType.NewGroup) && user.SyncPlayAccess != SyncPlayAccess.CreateAndJoinGroups)
+ if (request.Type.Equals(RequestType.NewGroup) && user.SyncPlayAccess != SyncPlayAccess.CreateAndJoinGroups)
{
_logger.LogWarning("Session {SessionId} does not have permission to create groups.", session.Id);
@@ -443,16 +435,5 @@ namespace Emby.Server.Implementations.SyncPlay
return true;
}
-
- ///
- /// Checks if a given session is allowed to make a given type of request.
- ///
- /// The session.
- /// The request type.
- /// true if the request is valid, false otherwise. Will return false also when session is null.
- private bool IsRequestValid(SessionInfo session, GroupRequestType requestType)
- {
- return IsRequestValid(session, requestType, session, false);
- }
}
}
diff --git a/Jellyfin.Api/Controllers/SyncPlayController.cs b/Jellyfin.Api/Controllers/SyncPlayController.cs
index e8c9a09568..ed5ea3c8a7 100644
--- a/Jellyfin.Api/Controllers/SyncPlayController.cs
+++ b/Jellyfin.Api/Controllers/SyncPlayController.cs
@@ -8,6 +8,7 @@ using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.SyncPlay;
using MediaBrowser.Controller.SyncPlay.PlaybackRequests;
+using MediaBrowser.Controller.SyncPlay.Requests;
using MediaBrowser.Model.SyncPlay;
using MediaBrowser.Model.SyncPlay.RequestBodies;
using Microsoft.AspNetCore.Authorization;
@@ -54,7 +55,8 @@ namespace Jellyfin.Api.Controllers
[FromBody, Required] NewGroupRequestBody requestData)
{
var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request);
- _syncPlayManager.NewGroup(currentSession, requestData, CancellationToken.None);
+ var syncPlayRequest = new NewGroupRequest(requestData.GroupName);
+ _syncPlayManager.NewGroup(currentSession, syncPlayRequest, CancellationToken.None);
return NoContent();
}
@@ -70,7 +72,8 @@ namespace Jellyfin.Api.Controllers
[FromBody, Required] JoinGroupRequestBody requestData)
{
var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request);
- _syncPlayManager.JoinGroup(currentSession, requestData.GroupId, requestData, CancellationToken.None);
+ var syncPlayRequest = new JoinGroupRequest(requestData.GroupId);
+ _syncPlayManager.JoinGroup(currentSession, syncPlayRequest, CancellationToken.None);
return NoContent();
}
@@ -84,7 +87,8 @@ namespace Jellyfin.Api.Controllers
public ActionResult SyncPlayLeaveGroup()
{
var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request);
- _syncPlayManager.LeaveGroup(currentSession, CancellationToken.None);
+ var syncPlayRequest = new LeaveGroupRequest();
+ _syncPlayManager.LeaveGroup(currentSession, syncPlayRequest, CancellationToken.None);
return NoContent();
}
@@ -98,7 +102,8 @@ namespace Jellyfin.Api.Controllers
public ActionResult> SyncPlayGetGroups()
{
var currentSession = RequestHelpers.GetSession(_sessionManager, _authorizationContext, Request);
- return Ok(_syncPlayManager.ListGroups(currentSession));
+ var syncPlayRequest = new ListGroupsRequest();
+ return Ok(_syncPlayManager.ListGroups(currentSession, syncPlayRequest));
}
///
diff --git a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs
index 057488d6b4..0b15e3ae4a 100644
--- a/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs
+++ b/MediaBrowser.Controller/SyncPlay/GroupStates/AbstractGroupState.cs
@@ -209,14 +209,14 @@ namespace MediaBrowser.Controller.SyncPlay.GroupStates
protected void SendGroupStateUpdate(IGroupStateContext context, IGroupPlaybackRequest reason, SessionInfo session, CancellationToken cancellationToken)
{
// Notify relevant state change event.
- var stateUpdate = new GroupStateUpdate(Type, reason.Type);
+ var stateUpdate = new GroupStateUpdate(Type, reason.Action);
var update = context.NewSyncPlayGroupUpdate(GroupUpdateType.StateUpdate, stateUpdate);
context.SendGroupUpdate(session, SyncPlayBroadcastType.AllGroup, update, cancellationToken);
}
private void UnhandledRequest(IGroupPlaybackRequest request)
{
- _logger.LogWarning("Unhandled request of type {RequestType} in {StateType} state.", request.Type, Type);
+ _logger.LogWarning("Unhandled request of type {RequestType} in {StateType} state.", request.Action, Type);
}
}
}
diff --git a/MediaBrowser.Controller/SyncPlay/IGroupController.cs b/MediaBrowser.Controller/SyncPlay/IGroupController.cs
index 5bcc3e2ca3..07f9659dd1 100644
--- a/MediaBrowser.Controller/SyncPlay/IGroupController.cs
+++ b/MediaBrowser.Controller/SyncPlay/IGroupController.cs
@@ -3,8 +3,8 @@ using System.Threading;
using Jellyfin.Data.Entities;
using MediaBrowser.Controller.Session;
using MediaBrowser.Controller.SyncPlay.Queue;
+using MediaBrowser.Controller.SyncPlay.Requests;
using MediaBrowser.Model.SyncPlay;
-using MediaBrowser.Model.SyncPlay.RequestBodies;
namespace MediaBrowser.Controller.SyncPlay
{
@@ -37,7 +37,7 @@ namespace MediaBrowser.Controller.SyncPlay
/// The session.
/// The request.
/// The cancellation token.
- void CreateGroup(SessionInfo session, NewGroupRequestBody request, CancellationToken cancellationToken);
+ void CreateGroup(SessionInfo session, NewGroupRequest request, CancellationToken cancellationToken);
///
/// Adds the session to the group.
@@ -45,7 +45,7 @@ namespace MediaBrowser.Controller.SyncPlay
/// The session.
/// The request.
/// The cancellation token.
- void SessionJoin(SessionInfo session, JoinGroupRequestBody request, CancellationToken cancellationToken);
+ void SessionJoin(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken);
///
/// Restores the state of a session that already joined the group.
@@ -53,14 +53,15 @@ namespace MediaBrowser.Controller.SyncPlay
/// The session.
/// The request.
/// The cancellation token.
- void SessionRestore(SessionInfo session, JoinGroupRequestBody request, CancellationToken cancellationToken);
+ void SessionRestore(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken);
///
/// Removes the session from the group.
///
/// The session.
+ /// The request.
/// The cancellation token.
- void SessionLeave(SessionInfo session, CancellationToken cancellationToken);
+ void SessionLeave(SessionInfo session, LeaveGroupRequest request, CancellationToken cancellationToken);
///
/// Handles the requested action by the session.
diff --git a/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs b/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs
index 3b195e98ca..201f29952f 100644
--- a/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/IGroupPlaybackRequest.cs
@@ -7,13 +7,13 @@ namespace MediaBrowser.Controller.SyncPlay
///
/// Interface IGroupPlaybackRequest.
///
- public interface IGroupPlaybackRequest
+ public interface IGroupPlaybackRequest : ISyncPlayRequest
{
///
/// Gets the playback request type.
///
/// The playback request type.
- PlaybackRequestType Type { get; }
+ PlaybackRequestType Action { get; }
///
/// Applies the request to a group.
diff --git a/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs b/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs
index 26fcb009ca..146e4351df 100644
--- a/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs
+++ b/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Threading;
using MediaBrowser.Controller.Session;
+using MediaBrowser.Controller.SyncPlay.Requests;
using MediaBrowser.Model.SyncPlay;
using MediaBrowser.Model.SyncPlay.RequestBodies;
@@ -18,30 +19,31 @@ namespace MediaBrowser.Controller.SyncPlay
/// The session that's creating the group.
/// The request.
/// The cancellation token.
- void NewGroup(SessionInfo session, NewGroupRequestBody request, CancellationToken cancellationToken);
+ void NewGroup(SessionInfo session, NewGroupRequest request, CancellationToken cancellationToken);
///
/// Adds the session to a group.
///
/// The session.
- /// The group identifier.
/// The request.
/// The cancellation token.
- void JoinGroup(SessionInfo session, Guid groupId, JoinGroupRequestBody request, CancellationToken cancellationToken);
+ void JoinGroup(SessionInfo session, JoinGroupRequest request, CancellationToken cancellationToken);
///
/// Removes the session from a group.
///
/// The session.
+ /// The request.
/// The cancellation token.
- void LeaveGroup(SessionInfo session, CancellationToken cancellationToken);
+ void LeaveGroup(SessionInfo session, LeaveGroupRequest request, CancellationToken cancellationToken);
///
/// Gets list of available groups for a session.
///
/// The session.
+ /// The request.
/// The list of available groups.
- List ListGroups(SessionInfo session);
+ List ListGroups(SessionInfo session, ListGroupsRequest request);
///
/// Handle a request by a session in a group.
diff --git a/MediaBrowser.Controller/SyncPlay/ISyncPlayRequest.cs b/MediaBrowser.Controller/SyncPlay/ISyncPlayRequest.cs
new file mode 100644
index 0000000000..bf19817732
--- /dev/null
+++ b/MediaBrowser.Controller/SyncPlay/ISyncPlayRequest.cs
@@ -0,0 +1,16 @@
+using MediaBrowser.Model.SyncPlay;
+
+namespace MediaBrowser.Controller.SyncPlay
+{
+ ///
+ /// Interface ISyncPlayRequest.
+ ///
+ public interface ISyncPlayRequest
+ {
+ ///
+ /// Gets the request type.
+ ///
+ /// The request type.
+ RequestType Type { get; }
+ }
+}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/AbstractPlaybackRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/AbstractPlaybackRequest.cs
new file mode 100644
index 0000000000..4090f65b9c
--- /dev/null
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/AbstractPlaybackRequest.cs
@@ -0,0 +1,29 @@
+using System.Threading;
+using MediaBrowser.Controller.Session;
+using MediaBrowser.Model.SyncPlay;
+
+namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
+{
+ ///
+ /// Class AbstractPlaybackRequest.
+ ///
+ public abstract class AbstractPlaybackRequest : IGroupPlaybackRequest
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ protected AbstractPlaybackRequest()
+ {
+ // Do nothing.
+ }
+
+ ///
+ public RequestType Type { get; } = RequestType.Playback;
+
+ ///
+ public abstract PlaybackRequestType Action { get; }
+
+ ///
+ public abstract void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken);
+ }
+}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs
index a12ab96b77..2981dbbdd6 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/BufferGroupRequest.cs
@@ -8,7 +8,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class BufferGroupRequest.
///
- public class BufferGroupRequest : IGroupPlaybackRequest
+ public class BufferGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -50,10 +50,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public string PlaylistItemId { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Buffer;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Buffer;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs
index 25034cb10b..a375895ad0 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/IgnoreWaitGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class IgnoreWaitGroupRequest.
///
- public class IgnoreWaitGroupRequest : IGroupPlaybackRequest
+ public class IgnoreWaitGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public bool IgnoreWait { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.IgnoreWait;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.IgnoreWait;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs
index a12eff8b84..efca4ed3ef 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/MovePlaylistItemGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class MovePlaylistItemGroupRequest.
///
- public class MovePlaylistItemGroupRequest : IGroupPlaybackRequest
+ public class MovePlaylistItemGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -33,10 +33,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public int NewIndex { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.MovePlaylistItem;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.MovePlaylistItem;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs
index f87bbc556d..73b7d0908b 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/NextTrackGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class NextTrackGroupRequest.
///
- public class NextTrackGroupRequest : IGroupPlaybackRequest
+ public class NextTrackGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public string PlaylistItemId { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.NextTrack;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.NextTrack;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs
index 0dcd1423fd..8ce2b1fc80 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PauseGroupRequest.cs
@@ -7,13 +7,13 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class PauseGroupRequest.
///
- public class PauseGroupRequest : IGroupPlaybackRequest
+ public class PauseGroupRequest : AbstractPlaybackRequest
{
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Pause;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Pause;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs
index 2528bb3e70..19c940cdf8 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PingGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class PingGroupRequest.
///
- public class PingGroupRequest : IGroupPlaybackRequest
+ public class PingGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public long Ping { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Ping;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Ping;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs
index dbe2987357..88e0ebad2b 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PlayGroupRequest.cs
@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class PlayGroupRequest.
///
- public class PlayGroupRequest : IGroupPlaybackRequest
+ public class PlayGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -43,10 +43,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public long StartPositionTicks { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Play;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Play;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs
index 206fef3312..4c70beb0ef 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/PreviousTrackGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class PreviousTrackGroupRequest.
///
- public class PreviousTrackGroupRequest : IGroupPlaybackRequest
+ public class PreviousTrackGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public string PlaylistItemId { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.PreviousTrack;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.PreviousTrack;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs
index d6247ddd6d..ba5e3e2327 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/QueueGroupRequest.cs
@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class QueueGroupRequest.
///
- public class QueueGroupRequest : IGroupPlaybackRequest
+ public class QueueGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -35,10 +35,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public GroupQueueMode Mode { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Queue;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Queue;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs
index a2b3553cee..b09db4ba80 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/ReadyGroupRequest.cs
@@ -8,7 +8,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class ReadyGroupRequest.
///
- public class ReadyGroupRequest : IGroupPlaybackRequest
+ public class ReadyGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -50,10 +50,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public string PlaylistItemId { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Ready;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Ready;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs
index dc7ba8465c..dac1914aa7 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/RemoveFromPlaylistGroupRequest.cs
@@ -9,7 +9,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class RemoveFromPlaylistGroupRequest.
///
- public class RemoveFromPlaylistGroupRequest : IGroupPlaybackRequest
+ public class RemoveFromPlaylistGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -27,10 +27,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public IReadOnlyList PlaylistItemIds { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.RemoveFromPlaylist;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.RemoveFromPlaylist;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs
index f7bfc19788..41e28467c0 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SeekGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class SeekGroupRequest.
///
- public class SeekGroupRequest : IGroupPlaybackRequest
+ public class SeekGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public long PositionTicks { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Seek;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Seek;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs
index 2ca33c1ccf..58fed3fa07 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetPlaylistItemGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class SetPlaylistItemGroupRequest.
///
- public class SetPlaylistItemGroupRequest : IGroupPlaybackRequest
+ public class SetPlaylistItemGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public string PlaylistItemId { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.SetPlaylistItem;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.SetPlaylistItem;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs
index cd4505e4d0..6a5ec1d117 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetRepeatModeGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class SetRepeatModeGroupRequest.
///
- public class SetRepeatModeGroupRequest : IGroupPlaybackRequest
+ public class SetRepeatModeGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public GroupRepeatMode Mode { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.SetRepeatMode;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.SetRepeatMode;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs
index 4530a34c02..fe007c8d89 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/SetShuffleModeGroupRequest.cs
@@ -7,7 +7,7 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class SetShuffleModeGroupRequest.
///
- public class SetShuffleModeGroupRequest : IGroupPlaybackRequest
+ public class SetShuffleModeGroupRequest : AbstractPlaybackRequest
{
///
/// Initializes a new instance of the class.
@@ -25,10 +25,10 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
public GroupShuffleMode Mode { get; }
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.SetShuffleMode;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.SetShuffleMode;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs
index ec01cd1105..c42e229d1f 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/StopGroupRequest.cs
@@ -7,13 +7,13 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class StopGroupRequest.
///
- public class StopGroupRequest : IGroupPlaybackRequest
+ public class StopGroupRequest : AbstractPlaybackRequest
{
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Stop;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Stop;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs
index bdf4fd4767..b4c1744e95 100644
--- a/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs
+++ b/MediaBrowser.Controller/SyncPlay/PlaybackRequests/UnpauseGroupRequest.cs
@@ -7,13 +7,13 @@ namespace MediaBrowser.Controller.SyncPlay.PlaybackRequests
///
/// Class UnpauseGroupRequest.
///
- public class UnpauseGroupRequest : IGroupPlaybackRequest
+ public class UnpauseGroupRequest : AbstractPlaybackRequest
{
///
- public PlaybackRequestType Type { get; } = PlaybackRequestType.Unpause;
+ public override PlaybackRequestType Action { get; } = PlaybackRequestType.Unpause;
///
- public void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
+ public override void Apply(IGroupStateContext context, IGroupState state, SessionInfo session, CancellationToken cancellationToken)
{
state.HandleRequest(context, state.Type, this, session, cancellationToken);
}
diff --git a/MediaBrowser.Controller/SyncPlay/Requests/JoinGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/JoinGroupRequest.cs
new file mode 100644
index 0000000000..38c9e8e20c
--- /dev/null
+++ b/MediaBrowser.Controller/SyncPlay/Requests/JoinGroupRequest.cs
@@ -0,0 +1,29 @@
+using System;
+using MediaBrowser.Model.SyncPlay;
+
+namespace MediaBrowser.Controller.SyncPlay.Requests
+{
+ ///
+ /// Class JoinGroupRequest.
+ ///
+ public class JoinGroupRequest : ISyncPlayRequest
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The identifier of the group to join.
+ public JoinGroupRequest(Guid groupId)
+ {
+ GroupId = groupId;
+ }
+
+ ///
+ /// Gets the group identifier.
+ ///
+ /// The identifier of the group to join.
+ public Guid GroupId { get; }
+
+ ///
+ public RequestType Type { get; } = RequestType.JoinGroup;
+ }
+}
diff --git a/MediaBrowser.Controller/SyncPlay/Requests/LeaveGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/LeaveGroupRequest.cs
new file mode 100644
index 0000000000..545778264f
--- /dev/null
+++ b/MediaBrowser.Controller/SyncPlay/Requests/LeaveGroupRequest.cs
@@ -0,0 +1,13 @@
+using MediaBrowser.Model.SyncPlay;
+
+namespace MediaBrowser.Controller.SyncPlay.Requests
+{
+ ///
+ /// Class LeaveGroupRequest.
+ ///
+ public class LeaveGroupRequest : ISyncPlayRequest
+ {
+ ///
+ public RequestType Type { get; } = RequestType.LeaveGroup;
+ }
+}
diff --git a/MediaBrowser.Controller/SyncPlay/Requests/ListGroupsRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/ListGroupsRequest.cs
new file mode 100644
index 0000000000..4a234fdab5
--- /dev/null
+++ b/MediaBrowser.Controller/SyncPlay/Requests/ListGroupsRequest.cs
@@ -0,0 +1,13 @@
+using MediaBrowser.Model.SyncPlay;
+
+namespace MediaBrowser.Controller.SyncPlay.Requests
+{
+ ///
+ /// Class ListGroupsRequest.
+ ///
+ public class ListGroupsRequest : ISyncPlayRequest
+ {
+ ///
+ public RequestType Type { get; } = RequestType.ListGroups;
+ }
+}
diff --git a/MediaBrowser.Controller/SyncPlay/Requests/NewGroupRequest.cs b/MediaBrowser.Controller/SyncPlay/Requests/NewGroupRequest.cs
new file mode 100644
index 0000000000..1321f0de8e
--- /dev/null
+++ b/MediaBrowser.Controller/SyncPlay/Requests/NewGroupRequest.cs
@@ -0,0 +1,28 @@
+using MediaBrowser.Model.SyncPlay;
+
+namespace MediaBrowser.Controller.SyncPlay.Requests
+{
+ ///
+ /// Class NewGroupRequest.
+ ///
+ public class NewGroupRequest : ISyncPlayRequest
+ {
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The name of the new group.
+ public NewGroupRequest(string groupName)
+ {
+ GroupName = groupName;
+ }
+
+ ///
+ /// Gets the group name.
+ ///
+ /// The name of the new group.
+ public string GroupName { get; }
+
+ ///
+ public RequestType Type { get; } = RequestType.NewGroup;
+ }
+}
diff --git a/MediaBrowser.Model/SyncPlay/GroupRequestType.cs b/MediaBrowser.Model/SyncPlay/RequestType.cs
similarity index 91%
rename from MediaBrowser.Model/SyncPlay/GroupRequestType.cs
rename to MediaBrowser.Model/SyncPlay/RequestType.cs
index 75c0712364..a6e397dcd6 100644
--- a/MediaBrowser.Model/SyncPlay/GroupRequestType.cs
+++ b/MediaBrowser.Model/SyncPlay/RequestType.cs
@@ -1,9 +1,9 @@
namespace MediaBrowser.Model.SyncPlay
{
///
- /// Enum GroupRequestType.
+ /// Enum RequestType.
///
- public enum GroupRequestType
+ public enum RequestType
{
///
/// A user is requesting to create a new group.