aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgion <oancaionutandrei@gmail.com>2020-04-22 22:05:53 +0200
committergion <oancaionutandrei@gmail.com>2020-04-27 22:39:37 +0200
commit73fcbe90c04d9b3de0fc0591565d9a3548a0fa70 (patch)
tree1e5142479d7f8808571d50766ef837c63ef9cf61
parent083d3272d09395e2b7d73d886377017573e63686 (diff)
Send error messages to clients
-rw-r--r--Emby.Server.Implementations/Syncplay/SyncplayManager.cs68
-rw-r--r--MediaBrowser.Model/Syncplay/GroupUpdateType.cs34
2 files changed, 75 insertions, 27 deletions
diff --git a/Emby.Server.Implementations/Syncplay/SyncplayManager.cs b/Emby.Server.Implementations/Syncplay/SyncplayManager.cs
index e7df8925e..5aefd1fd9 100644
--- a/Emby.Server.Implementations/Syncplay/SyncplayManager.cs
+++ b/Emby.Server.Implementations/Syncplay/SyncplayManager.cs
@@ -165,8 +165,14 @@ namespace Emby.Server.Implementations.Syncplay
if (user.Policy.SyncplayAccess != SyncplayAccess.CreateAndJoinGroups)
{
- // TODO: report the error to the client
- throw new ArgumentException("User does not have permission to create groups");
+ _logger.LogWarning("Syncplaymanager NewGroup: {0} does not have permission to create groups.", session.Id);
+
+ var error = new GroupUpdate<string>()
+ {
+ Type = GroupUpdateType.CreateGroupDenied
+ };
+ _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), error, CancellationToken.None);
+ return;
}
if (IsSessionInGroup(session))
@@ -187,8 +193,14 @@ namespace Emby.Server.Implementations.Syncplay
if (user.Policy.SyncplayAccess == SyncplayAccess.None)
{
- // TODO: report the error to the client
- throw new ArgumentException("User does not have access to syncplay");
+ _logger.LogWarning("Syncplaymanager JoinGroup: {0} does not have access to Syncplay.", session.Id);
+
+ var error = new GroupUpdate<string>()
+ {
+ Type = GroupUpdateType.JoinGroupDenied
+ };
+ _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), error, CancellationToken.None);
+ return;
}
ISyncplayController group;
@@ -196,17 +208,27 @@ namespace Emby.Server.Implementations.Syncplay
if (group == null)
{
- _logger.LogWarning("Syncplaymanager JoinGroup: {0} does not exist.", groupId);
+ _logger.LogWarning("Syncplaymanager JoinGroup: {0} tried to join group {0} that does not exist.", session.Id, groupId);
- var update = new GroupUpdate<string>();
- update.Type = GroupUpdateType.NotInGroup;
- _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), update, CancellationToken.None);
+ var error = new GroupUpdate<string>()
+ {
+ Type = GroupUpdateType.GroupNotJoined
+ };
+ _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), error, CancellationToken.None);
return;
}
if (!HasAccessToItem(user, group.GetPlayingItemId()))
{
- throw new ArgumentException("User does not have access to playing item");
+ _logger.LogWarning("Syncplaymanager JoinGroup: {0} does not have access to {1}.", session.Id, group.GetPlayingItemId());
+
+ var error = new GroupUpdate<string>()
+ {
+ GroupId = group.GetGroupId().ToString(),
+ Type = GroupUpdateType.LibraryAccessDenied
+ };
+ _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), error, CancellationToken.None);
+ return;
}
if (IsSessionInGroup(session))
@@ -230,9 +252,11 @@ namespace Emby.Server.Implementations.Syncplay
{
_logger.LogWarning("Syncplaymanager LeaveGroup: {0} does not belong to any group.", session.Id);
- var update = new GroupUpdate<string>();
- update.Type = GroupUpdateType.NotInGroup;
- _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), update, CancellationToken.None);
+ var error = new GroupUpdate<string>()
+ {
+ Type = GroupUpdateType.NotInGroup
+ };
+ _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), error, CancellationToken.None);
return;
}
group.SessionLeave(session);
@@ -280,8 +304,14 @@ namespace Emby.Server.Implementations.Syncplay
if (user.Policy.SyncplayAccess == SyncplayAccess.None)
{
- // TODO: same as LeaveGroup
- throw new ArgumentException("User does not have access to syncplay");
+ _logger.LogWarning("Syncplaymanager HandleRequest: {0} does not have access to Syncplay.", session.Id);
+
+ var error = new GroupUpdate<string>()
+ {
+ Type = GroupUpdateType.JoinGroupDenied
+ };
+ _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), error, CancellationToken.None);
+ return;
}
ISyncplayController group;
@@ -289,11 +319,13 @@ namespace Emby.Server.Implementations.Syncplay
if (group == null)
{
- _logger.LogWarning("Syncplaymanager HandleRequest: {0} not in a group.", session.Id);
+ _logger.LogWarning("Syncplaymanager HandleRequest: {0} does not belong to any group.", session.Id);
- var update = new GroupUpdate<string>();
- update.Type = GroupUpdateType.NotInGroup;
- _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), update, CancellationToken.None);
+ var error = new GroupUpdate<string>()
+ {
+ Type = GroupUpdateType.NotInGroup
+ };
+ _sessionManager.SendSyncplayGroupUpdate(session.Id.ToString(), error, CancellationToken.None);
return;
}
group.HandleRequest(session, request);
diff --git a/MediaBrowser.Model/Syncplay/GroupUpdateType.cs b/MediaBrowser.Model/Syncplay/GroupUpdateType.cs
index 0ef8b2785..20e76932d 100644
--- a/MediaBrowser.Model/Syncplay/GroupUpdateType.cs
+++ b/MediaBrowser.Model/Syncplay/GroupUpdateType.cs
@@ -1,37 +1,53 @@
namespace MediaBrowser.Model.Syncplay
{
/// <summary>
- /// Enum GroupUpdateType
+ /// Enum GroupUpdateType.
/// </summary>
public enum GroupUpdateType
{
/// <summary>
/// The user-joined update. Tells members of a group about a new user.
/// </summary>
- UserJoined = 0,
+ UserJoined,
/// <summary>
/// The user-left update. Tells members of a group that a user left.
/// </summary>
- UserLeft = 1,
+ UserLeft,
/// <summary>
/// The group-joined update. Tells a user that the group has been joined.
/// </summary>
- GroupJoined = 2,
+ GroupJoined,
/// <summary>
/// The group-left update. Tells a user that the group has been left.
/// </summary>
- GroupLeft = 3,
+ GroupLeft,
/// <summary>
/// The group-wait update. Tells members of the group that a user is buffering.
/// </summary>
- GroupWait = 4,
+ GroupWait,
/// <summary>
/// The prepare-session update. Tells a user to load some content.
/// </summary>
- PrepareSession = 5,
+ PrepareSession,
/// <summary>
- /// The not-in-group update. Tells a user that no group has been joined.
+ /// The not-in-group error. Tells a user that it doesn't belong to a group.
/// </summary>
- NotInGroup = 7
+ NotInGroup,
+ /// <summary>
+ /// The group-not-joined error. Sent when a request to join a group fails.
+ /// </summary>
+ GroupNotJoined,
+ /// <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
}
}