Ver código fonte

Send error messages to clients

gion 5 anos atrás
pai
commit
73fcbe90c0

+ 50 - 18
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);

+ 25 - 9
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
     }
 }