Merge pull request #2733 from OancaAndrei/syncplay

Add syncplay feature
This commit is contained in:
Joshua M. Boniface
2020-05-26 20:00:01 -04:00
committed by GitHub
25 changed files with 2248 additions and 2 deletions

View File

@@ -0,0 +1,23 @@
namespace MediaBrowser.Model.Configuration
{
/// <summary>
/// Enum SyncPlayAccess.
/// </summary>
public enum SyncPlayAccess
{
/// <summary>
/// User can create groups and join them.
/// </summary>
CreateAndJoinGroups,
/// <summary>
/// User can only join already existing groups.
/// </summary>
JoinGroups,
/// <summary>
/// SyncPlay is disabled for the user.
/// </summary>
None
}
}

View File

@@ -0,0 +1,40 @@
using System.Collections.Generic;
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Class GroupInfoView.
/// </summary>
public class GroupInfoView
{
/// <summary>
/// Gets or sets the group identifier.
/// </summary>
/// <value>The group identifier.</value>
public string GroupId { get; set; }
/// <summary>
/// Gets or sets the playing item id.
/// </summary>
/// <value>The playing item id.</value>
public string PlayingItemId { get; set; }
/// <summary>
/// Gets or sets the playing item name.
/// </summary>
/// <value>The playing item name.</value>
public string PlayingItemName { get; set; }
/// <summary>
/// Gets or sets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
public long PositionTicks { get; set; }
/// <summary>
/// Gets or sets the participants.
/// </summary>
/// <value>The participants.</value>
public IReadOnlyList<string> Participants { get; set; }
}
}

View File

@@ -0,0 +1,26 @@
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Class GroupUpdate.
/// </summary>
public class GroupUpdate<T>
{
/// <summary>
/// Gets or sets the group identifier.
/// </summary>
/// <value>The group identifier.</value>
public string GroupId { get; set; }
/// <summary>
/// Gets or sets the update type.
/// </summary>
/// <value>The update type.</value>
public GroupUpdateType Type { get; set; }
/// <summary>
/// Gets or sets the data.
/// </summary>
/// <value>The data.</value>
public T Data { get; set; }
}
}

View File

@@ -0,0 +1,53 @@
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Enum GroupUpdateType.
/// </summary>
public enum GroupUpdateType
{
/// <summary>
/// The user-joined update. Tells members of a group about a new user.
/// </summary>
UserJoined,
/// <summary>
/// The user-left update. Tells members of a group that a user left.
/// </summary>
UserLeft,
/// <summary>
/// The group-joined update. Tells a user that the group has been joined.
/// </summary>
GroupJoined,
/// <summary>
/// The group-left update. Tells a user that the group has been left.
/// </summary>
GroupLeft,
/// <summary>
/// The group-wait update. Tells members of the group that a user is buffering.
/// </summary>
GroupWait,
/// <summary>
/// The prepare-session update. Tells a user to load some content.
/// </summary>
PrepareSession,
/// <summary>
/// The not-in-group error. Tells a user that they don't belong to a group.
/// </summary>
NotInGroup,
/// <summary>
/// The group-does-not-exist error. Sent when trying to join a non-existing group.
/// </summary>
GroupDoesNotExist,
/// <summary>
/// The create-group-denied error. Sent when a user tries to create a group without required permissions.
/// </summary>
CreateGroupDenied,
/// <summary>
/// The join-group-denied error. Sent when a user tries to join a group without required permissions.
/// </summary>
JoinGroupDenied,
/// <summary>
/// The library-access-denied error. Sent when a user tries to join a group without required access to the library.
/// </summary>
LibraryAccessDenied
}
}

View File

@@ -0,0 +1,22 @@
using System;
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Class JoinGroupRequest.
/// </summary>
public class JoinGroupRequest
{
/// <summary>
/// Gets or sets the Group id.
/// </summary>
/// <value>The Group id to join.</value>
public Guid GroupId { get; set; }
/// <summary>
/// Gets or sets the playing item id.
/// </summary>
/// <value>The client's currently playing item id.</value>
public Guid PlayingItemId { get; set; }
}
}

View File

@@ -0,0 +1,34 @@
using System;
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Class PlaybackRequest.
/// </summary>
public class PlaybackRequest
{
/// <summary>
/// Gets or sets the request type.
/// </summary>
/// <value>The request type.</value>
public PlaybackRequestType Type { get; set; }
/// <summary>
/// Gets or sets when the request has been made by the client.
/// </summary>
/// <value>The date of the request.</value>
public DateTime? When { get; set; }
/// <summary>
/// Gets or sets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
public long? PositionTicks { get; set; }
/// <summary>
/// Gets or sets the ping time.
/// </summary>
/// <value>The ping time.</value>
public long? Ping { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Enum PlaybackRequestType
/// </summary>
public enum PlaybackRequestType
{
/// <summary>
/// A user is requesting a play command for the group.
/// </summary>
Play = 0,
/// <summary>
/// A user is requesting a pause command for the group.
/// </summary>
Pause = 1,
/// <summary>
/// A user is requesting a seek command for the group.
/// </summary>
Seek = 2,
/// <summary>
/// A user is signaling that playback is buffering.
/// </summary>
Buffering = 3,
/// <summary>
/// A user is signaling that playback resumed.
/// </summary>
BufferingDone = 4,
/// <summary>
/// A user is reporting its ping.
/// </summary>
UpdatePing = 5
}
}

View File

@@ -0,0 +1,38 @@
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Class SendCommand.
/// </summary>
public class SendCommand
{
/// <summary>
/// Gets or sets the group identifier.
/// </summary>
/// <value>The group identifier.</value>
public string GroupId { get; set; }
/// <summary>
/// Gets or sets the UTC time when to execute the command.
/// </summary>
/// <value>The UTC time when to execute the command.</value>
public string When { get; set; }
/// <summary>
/// Gets or sets the position ticks.
/// </summary>
/// <value>The position ticks.</value>
public long? PositionTicks { get; set; }
/// <summary>
/// Gets or sets the command.
/// </summary>
/// <value>The command.</value>
public SendCommandType Command { get; set; }
/// <summary>
/// Gets or sets the UTC time when this command has been emitted.
/// </summary>
/// <value>The UTC time when this command has been emitted.</value>
public string EmittedAt { get; set; }
}
}

View File

@@ -0,0 +1,21 @@
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Enum SendCommandType.
/// </summary>
public enum SendCommandType
{
/// <summary>
/// The play command. Instructs users to start playback.
/// </summary>
Play = 0,
/// <summary>
/// The pause command. Instructs users to pause playback.
/// </summary>
Pause = 1,
/// <summary>
/// The seek command. Instructs users to seek to a specified time.
/// </summary>
Seek = 2
}
}

View File

@@ -0,0 +1,20 @@
namespace MediaBrowser.Model.SyncPlay
{
/// <summary>
/// Class UtcTimeResponse.
/// </summary>
public class UtcTimeResponse
{
/// <summary>
/// Gets or sets the UTC time when request has been received.
/// </summary>
/// <value>The UTC time when request has been received.</value>
public string RequestReceptionTime { get; set; }
/// <summary>
/// Gets or sets the UTC time when response has been sent.
/// </summary>
/// <value>The UTC time when response has been sent.</value>
public string ResponseTransmissionTime { get; set; }
}
}

View File

@@ -80,6 +80,12 @@ namespace MediaBrowser.Model.Users
public string AuthenticationProviderId { get; set; }
public string PasswordResetProviderId { get; set; }
/// <summary>
/// Gets or sets a value indicating what SyncPlay features the user can access.
/// </summary>
/// <value>Access level to SyncPlay features.</value>
public SyncPlayAccess SyncPlayAccess { get; set; }
public UserPolicy()
{
IsHidden = true;
@@ -125,6 +131,7 @@ namespace MediaBrowser.Model.Users
EnableContentDownloading = true;
EnablePublicSharing = true;
EnableRemoteAccess = true;
SyncPlayAccess = SyncPlayAccess.CreateAndJoinGroups;
}
}
}