From 5487dfc145096faeaa9ee82d92ffa224ef69fc11 Mon Sep 17 00:00:00 2001 From: gion Date: Tue, 12 May 2020 09:08:35 +0200 Subject: [PATCH] Rename GroupInfoView to GroupInfoDto --- .../SyncPlay/SyncPlayController.cs | 4 +- .../SyncPlay/SyncPlayManager.cs | 4 +- MediaBrowser.Api/SyncPlay/SyncPlayService.cs | 262 ++++++++++++++++++ .../SyncPlay/ISyncPlayController.cs | 2 +- .../SyncPlay/ISyncPlayManager.cs | 2 +- .../{GroupInfoView.cs => GroupInfoDto.cs} | 2 +- 6 files changed, 269 insertions(+), 7 deletions(-) create mode 100644 MediaBrowser.Api/SyncPlay/SyncPlayService.cs rename MediaBrowser.Model/SyncPlay/{GroupInfoView.cs => GroupInfoDto.cs} (97%) diff --git a/Emby.Server.Implementations/SyncPlay/SyncPlayController.cs b/Emby.Server.Implementations/SyncPlay/SyncPlayController.cs index 5384795122..c98fd6d4af 100644 --- a/Emby.Server.Implementations/SyncPlay/SyncPlayController.cs +++ b/Emby.Server.Implementations/SyncPlay/SyncPlayController.cs @@ -499,9 +499,9 @@ namespace Emby.Server.Implementations.SyncPlay } /// - public GroupInfoView GetInfo() + public GroupInfoDto GetInfo() { - return new GroupInfoView() + return new GroupInfoDto() { GroupId = GetGroupId().ToString(), PlayingItemName = _group.PlayingItem.Name, diff --git a/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs b/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs index 966ed5024e..550939d701 100644 --- a/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs +++ b/Emby.Server.Implementations/SyncPlay/SyncPlayManager.cs @@ -286,13 +286,13 @@ namespace Emby.Server.Implementations.SyncPlay } /// - public List ListGroups(SessionInfo session, Guid filterItemId) + public List ListGroups(SessionInfo session, Guid filterItemId) { var user = _userManager.GetUserById(session.UserId); if (user.SyncPlayAccess == SyncPlayAccess.None) { - return new List(); + return new List(); } // Filter by item if requested diff --git a/MediaBrowser.Api/SyncPlay/SyncPlayService.cs b/MediaBrowser.Api/SyncPlay/SyncPlayService.cs new file mode 100644 index 0000000000..6035f84e4a --- /dev/null +++ b/MediaBrowser.Api/SyncPlay/SyncPlayService.cs @@ -0,0 +1,262 @@ +using System.Threading; +using System; +using System.Collections.Generic; +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Net; +using MediaBrowser.Controller.Session; +using MediaBrowser.Controller.SyncPlay; +using MediaBrowser.Model.Services; +using MediaBrowser.Model.SyncPlay; +using Microsoft.Extensions.Logging; + +namespace MediaBrowser.Api.SyncPlay +{ + [Route("/SyncPlay/New", "POST", Summary = "Create a new SyncPlay group")] + [Authenticated] + public class SyncPlayNew : IReturnVoid + { + } + + [Route("/SyncPlay/Join", "POST", Summary = "Join an existing SyncPlay group")] + [Authenticated] + public class SyncPlayJoin : IReturnVoid + { + /// + /// Gets or sets the Group id. + /// + /// The Group id to join. + [ApiMember(Name = "GroupId", Description = "Group Id", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string GroupId { get; set; } + } + + [Route("/SyncPlay/Leave", "POST", Summary = "Leave joined SyncPlay group")] + [Authenticated] + public class SyncPlayLeave : IReturnVoid + { + } + + [Route("/SyncPlay/List", "GET", Summary = "List SyncPlay groups")] + [Authenticated] + public class SyncPlayList : IReturnVoid + { + /// + /// Gets or sets the filter item id. + /// + /// The filter item id. + [ApiMember(Name = "FilterItemId", Description = "Filter by item id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")] + public string FilterItemId { get; set; } + } + + [Route("/SyncPlay/Play", "POST", Summary = "Request play in SyncPlay group")] + [Authenticated] + public class SyncPlayPlay : IReturnVoid + { + } + + [Route("/SyncPlay/Pause", "POST", Summary = "Request pause in SyncPlay group")] + [Authenticated] + public class SyncPlayPause : IReturnVoid + { + } + + [Route("/SyncPlay/Seek", "POST", Summary = "Request seek in SyncPlay group")] + [Authenticated] + public class SyncPlaySeek : IReturnVoid + { + [ApiMember(Name = "PositionTicks", IsRequired = true, DataType = "long", ParameterType = "query", Verb = "POST")] + public long PositionTicks { get; set; } + } + + [Route("/SyncPlay/Buffering", "POST", Summary = "Request group wait in SyncPlay group while buffering")] + [Authenticated] + public class SyncPlayBuffering : IReturnVoid + { + /// + /// Gets or sets the date used to pin PositionTicks in time. + /// + /// The date related to PositionTicks. + [ApiMember(Name = "When", IsRequired = true, DataType = "string", ParameterType = "query", Verb = "POST")] + public string When { get; set; } + + [ApiMember(Name = "PositionTicks", IsRequired = true, DataType = "long", ParameterType = "query", Verb = "POST")] + public long PositionTicks { get; set; } + + /// + /// Gets or sets whether this is a buffering or a ready request. + /// + /// true if buffering is complete; false otherwise. + [ApiMember(Name = "BufferingDone", IsRequired = true, DataType = "bool", ParameterType = "query", Verb = "POST")] + public bool BufferingDone { get; set; } + } + + [Route("/SyncPlay/Ping", "POST", Summary = "Update session ping")] + [Authenticated] + public class SyncPlayPing : IReturnVoid + { + [ApiMember(Name = "Ping", IsRequired = true, DataType = "double", ParameterType = "query", Verb = "POST")] + public double Ping { get; set; } + } + + /// + /// Class SyncPlayService. + /// + public class SyncPlayService : BaseApiService + { + /// + /// The session context. + /// + private readonly ISessionContext _sessionContext; + + /// + /// The SyncPlay manager. + /// + private readonly ISyncPlayManager _syncPlayManager; + + public SyncPlayService( + ILogger logger, + IServerConfigurationManager serverConfigurationManager, + IHttpResultFactory httpResultFactory, + ISessionContext sessionContext, + ISyncPlayManager syncPlayManager) + : base(logger, serverConfigurationManager, httpResultFactory) + { + _sessionContext = sessionContext; + _syncPlayManager = syncPlayManager; + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlayNew request) + { + var currentSession = GetSession(_sessionContext); + _syncPlayManager.NewGroup(currentSession, CancellationToken.None); + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlayJoin request) + { + var currentSession = GetSession(_sessionContext); + + Guid groupId; + if (!Guid.TryParse(request.GroupId, out groupId)) + { + Logger.LogError("JoinGroup: {0} is not a valid format for GroupId. Ignoring request.", request.GroupId); + return; + } + + var joinRequest = new JoinGroupRequest() + { + GroupId = groupId + }; + + _syncPlayManager.JoinGroup(currentSession, groupId, joinRequest, CancellationToken.None); + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlayLeave request) + { + var currentSession = GetSession(_sessionContext); + _syncPlayManager.LeaveGroup(currentSession, CancellationToken.None); + } + + /// + /// Handles the specified request. + /// + /// The request. + /// The requested list of groups. + public List Get(SyncPlayListGroups request) + { + var currentSession = GetSession(_sessionContext); + var filterItemId = Guid.Empty; + + if (!string.IsNullOrEmpty(request.FilterItemId) && !Guid.TryParse(request.FilterItemId, out filterItemId)) + { + Logger.LogWarning("ListGroups: {0} is not a valid format for FilterItemId. Ignoring filter.", request.FilterItemId); + } + + return _syncPlayManager.ListGroups(currentSession, filterItemId); + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlayPlay request) + { + var currentSession = GetSession(_sessionContext); + var syncPlayRequest = new PlaybackRequest() + { + Type = PlaybackRequestType.Play + }; + _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlayPause request) + { + var currentSession = GetSession(_sessionContext); + var syncPlayRequest = new PlaybackRequest() + { + Type = PlaybackRequestType.Pause + }; + _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlaySeek request) + { + var currentSession = GetSession(_sessionContext); + var syncPlayRequest = new PlaybackRequest() + { + Type = PlaybackRequestType.Seek, + PositionTicks = request.PositionTicks + }; + _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlayBuffering request) + { + var currentSession = GetSession(_sessionContext); + var syncPlayRequest = new PlaybackRequest() + { + Type = request.BufferingDone ? PlaybackRequestType.Ready : PlaybackRequestType.Buffer, + When = DateTime.Parse(request.When), + PositionTicks = request.PositionTicks + }; + _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); + } + + /// + /// Handles the specified request. + /// + /// The request. + public void Post(SyncPlayPing request) + { + var currentSession = GetSession(_sessionContext); + var syncPlayRequest = new PlaybackRequest() + { + Type = PlaybackRequestType.Ping, + Ping = Convert.ToInt64(request.Ping) + }; + _syncPlayManager.HandleRequest(currentSession, syncPlayRequest, CancellationToken.None); + } + } +} diff --git a/MediaBrowser.Controller/SyncPlay/ISyncPlayController.cs b/MediaBrowser.Controller/SyncPlay/ISyncPlayController.cs index 60d17fe367..d869c05bd1 100644 --- a/MediaBrowser.Controller/SyncPlay/ISyncPlayController.cs +++ b/MediaBrowser.Controller/SyncPlay/ISyncPlayController.cs @@ -62,6 +62,6 @@ namespace MediaBrowser.Controller.SyncPlay /// Gets the info about the group for the clients. /// /// The group info for the clients. - GroupInfoView GetInfo(); + GroupInfoDto GetInfo(); } } diff --git a/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs b/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs index 006fb687b8..65770021dc 100644 --- a/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs +++ b/MediaBrowser.Controller/SyncPlay/ISyncPlayManager.cs @@ -40,7 +40,7 @@ namespace MediaBrowser.Controller.SyncPlay /// The session. /// The item id to filter by. /// The list of available groups. - List ListGroups(SessionInfo session, Guid filterItemId); + List ListGroups(SessionInfo session, Guid filterItemId); /// /// Handle a request by a session in a group. diff --git a/MediaBrowser.Model/SyncPlay/GroupInfoView.cs b/MediaBrowser.Model/SyncPlay/GroupInfoDto.cs similarity index 97% rename from MediaBrowser.Model/SyncPlay/GroupInfoView.cs rename to MediaBrowser.Model/SyncPlay/GroupInfoDto.cs index f4c6859988..ac84a26dc3 100644 --- a/MediaBrowser.Model/SyncPlay/GroupInfoView.cs +++ b/MediaBrowser.Model/SyncPlay/GroupInfoDto.cs @@ -7,7 +7,7 @@ namespace MediaBrowser.Model.SyncPlay /// /// Class GroupInfoView. /// - public class GroupInfoView + public class GroupInfoDto { /// /// Gets or sets the group identifier.