{"action":"created","comment":{"url":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/93792620","pull_request_review_id":14329324,"id":93792620,"diff_hunk":"@@ -811,6 +811,38 @@ void NodeList::ignoreNodeBySessionID(const QUuid& nodeID) {\n     }\n }\n \n+void NodeList::unignoreNodeBySessionID(const QUuid& nodeID) {\n+    // enumerate the nodes to send a reliable ignore packet to each that can leverage it\n+    if (!nodeID.isNull() && _sessionUUID != nodeID) {\n+        eachMatchingNode([&nodeID](const SharedNodePointer& node)->bool {\n+            if (node->getType() == NodeType::AudioMixer || node->getType() == NodeType::AvatarMixer) {\n+                return true;\n+            } else {\n+                return false;\n+            }\n+        }, [&nodeID, this](const SharedNodePointer& destinationNode) {\n+            // create a reliable NLPacket with space for the ignore UUID\n+            auto ignorePacket = NLPacket::create(PacketType::NodeUnignoreRequest, NUM_BYTES_RFC4122_UUID, true);\n+\n+            // write the node ID to the packet\n+            ignorePacket->write(nodeID.toRfc4122());\n+\n+            qCDebug(networking) << \"Sending packet to unignore node\" << uuidStringWithoutCurlyBraces(nodeID);\n+\n+            // send off this ignore packet reliably to the matching node","path":"libraries/networking/src/NodeList.cpp","position":22,"original_position":22,"commit_id":"b77822131dd018109fed21de5ca2cbf1a1018a5a","original_commit_id":"b77822131dd018109fed21de5ca2cbf1a1018a5a","user":{"login":"zfox23","id":3409031,"avatar_url":"https://avatars.githubusercontent.com/u/3409031?v=3","gravatar_id":"","url":"https://api.github.com/users/zfox23","html_url":"https://github.com/zfox23","followers_url":"https://api.github.com/users/zfox23/followers","following_url":"https://api.github.com/users/zfox23/following{/other_user}","gists_url":"https://api.github.com/users/zfox23/gists{/gist_id}","starred_url":"https://api.github.com/users/zfox23/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zfox23/subscriptions","organizations_url":"https://api.github.com/users/zfox23/orgs","repos_url":"https://api.github.com/users/zfox23/repos","events_url":"https://api.github.com/users/zfox23/events{/privacy}","received_events_url":"https://api.github.com/users/zfox23/received_events","type":"User","site_admin":false},"body":"*unignore* packet.","created_at":"2016-12-23T18:41:08Z","updated_at":"2016-12-23T18:41:08Z","html_url":"https://github.com/highfidelity/hifi/pull/9262#discussion_r93792620","pull_request_url":"https://api.github.com/repos/highfidelity/hifi/pulls/9262","_links":{"self":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/comments/93792620"},"html":{"href":"https://github.com/highfidelity/hifi/pull/9262#discussion_r93792620"},"pull_request":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/9262"}}},"pull_request":{"url":"https://api.github.com/repos/highfidelity/hifi/pulls/9262","id":99179695,"html_url":"https://github.com/highfidelity/hifi/pull/9262","diff_url":"https://github.com/highfidelity/hifi/pull/9262.diff","patch_url":"https://github.com/highfidelity/hifi/pull/9262.patch","issue_url":"https://api.github.com/repos/highfidelity/hifi/issues/9262","number":9262,"state":"open","locked":false,"title":"First attempt at PAL operations with ignore","user":{"login":"howard-stearns","id":7015115,"avatar_url":"https://avatars.githubusercontent.com/u/7015115?v=3","gravatar_id":"","url":"https://api.github.com/users/howard-stearns","html_url":"https://github.com/howard-stearns","followers_url":"https://api.github.com/users/howard-stearns/followers","following_url":"https://api.github.com/users/howard-stearns/following{/other_user}","gists_url":"https://api.github.com/users/howard-stearns/gists{/gist_id}","starred_url":"https://api.github.com/users/howard-stearns/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/howard-stearns/subscriptions","organizations_url":"https://api.github.com/users/howard-stearns/orgs","repos_url":"https://api.github.com/users/howard-stearns/repos","events_url":"https://api.github.com/users/howard-stearns/events{/privacy}","received_events_url":"https://api.github.com/users/howard-stearns/received_events","type":"User","site_admin":false},"body":"This DNM PR is up so that we can look at the functionality of the PAL with respect to the ignore/unignore lifecycle, and following avatar-mixer optimizations.\r\n\r\nThings to try, with two or more interfaces running this PR against the sandbox in this PR:\r\n- Ignore the other avatar using the PAL:\r\n - The other avatar should see you disappear after a moment, as though you had left.\r\n - You will see the PAL ignore box checked for this user.\r\n - You should loose audio from that user.\r\n - You should see the other avatar disappear, but the clickable avatar node overlay should remain.\r\n - As the other avatar moves, the overlay should follow.\r\n - When you close the PAL, the overlay should disappear.\r\n - When you open the PAL again, the ignored user should be listed and marked as ignored, and the overlay should be visible at the right position. The overlay should indicate when the user is selected or unselected via the overlay or the list.\r\n - You should be able to click the activated ignore button to unignore. At that point, you and the other user should see and hear each other normally. (N.B.: 9253 addresses the PAL styling, including the checkboxes.)\r\n- For an ordinary user, the above ignore/unignore behavior should ONLY work for those that you ignore. I.e., if A ignores B, and B (who does not have kick rights) opens the PAL, B must NOT be able to see A in the list nor have any overlay.\r\n- For a user with kick permissions, the inclusion of an avatar in the list and overlay should include those that have ignored you. (The ignore button and state still refers to you ignoring them, not vice versa). I.e., if griefer ignores admin, both dissapear from each other. But if admin opens the PAL, he can see the griefer in the list, and their position with the overlay, and can take actions (such as ban).\r\n- Generally, open PAL from either interface, in various combinations of one or both avatars:\r\n - newly arrived;\r\n - facing away from each other;\r\n - very far apart from each other;\r\n - various admin/non-admin and login combinations. N.B. that localhost typically has kick rights regardless of login state!\r\n - for avatars that are not in view, we don't _currently_ show the overlay, but we might later (e.g., around the edges of your display to indicate where to turn to find people, or some other \"radar\"). Check to make sure (e.g., in the console) that their avatar.position is changing when they move around.\r\n - Users.ignore(sessionIdString) and Users.unignore(sessionIdString) should work as you expect when the PAL is not open. (You can other sessionIDs in the console with JSON.stringify(AvatarList.getAvatarIdentifiers()).)\r\nThe PAL should populate, display sessionDisplayName, and for admins, the username|fingerprint.\r\n\r\nThis PR might not be how we want to implement this behavior. We're first checking out the behavior, and allowing further development. For example:\r\n- I'm not sure what to test for interactions with physics, and whether or not this behavior is correct.\r\n- This implementation sends identity/data packets in some PAL-opened conditions, that we might want to change this to be different packet types, a subset of the data, or at different frequencies, etc. (There's some special casing of avatar identity/data packets that might wouldn't be necessary if there's a separate packet type.)\r\n- There's a proliferation of packet types, such as one for ignore and other for unignore, rather than one with a flag. I haven't made any attempt to simplify these. Maybe it's fine as is. (My point is that I haven't even thought about it, pending a sanity check on the actual behavior.)\r\n- There's a proliferation of javascript slots and messages, such as Users.ignore and unignore. Same issues.\r\n- I've deliberately left logging in for now, that should be removed before merge.\r\n- There are likely cases where we don't get avatar data fast enough upon opening the PAL. Possibilities include a refresh button, or to have pal.js send new users whenever it notices that it is adding a new node in updateOverlays, or even when removing a node there. (There's some special handling of ignored nodes in Pal.qml that might not be necessary if we do that.)\r\n- There's some data that should be cleared when changing domains. (See Pal.qml comments, but maybe more.)\r\n- Instead of keeping track of ignore state in the Pal.js, we should really expose that to .js/.qml and ask it. That way things will stay in sync if some other code ignores (such as mod.js or equivalent).\r\n- Generally, see FIXME (FIXME HRS) added by this PR.","created_at":"2016-12-22T22:29:20Z","updated_at":"2016-12-23T18:41:08Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5af648468377dbc5cd92e4b70a2c5d68cad42480","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/highfidelity/hifi/pulls/9262/commits","review_comments_url":"https://api.github.com/repos/highfidelity/hifi/pulls/9262/comments","review_comment_url":"https://api.github.com/repos/highfidelity/hifi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/highfidelity/hifi/issues/9262/comments","statuses_url":"https://api.github.com/repos/highfidelity/hifi/statuses/b77822131dd018109fed21de5ca2cbf1a1018a5a","head":{"label":"howard-stearns:monitored-ignore","ref":"monitored-ignore","sha":"b77822131dd018109fed21de5ca2cbf1a1018a5a","user":{"login":"howard-stearns","id":7015115,"avatar_url":"https://avatars.githubusercontent.com/u/7015115?v=3","gravatar_id":"","url":"https://api.github.com/users/howard-stearns","html_url":"https://github.com/howard-stearns","followers_url":"https://api.github.com/users/howard-stearns/followers","following_url":"https://api.github.com/users/howard-stearns/following{/other_user}","gists_url":"https://api.github.com/users/howard-stearns/gists{/gist_id}","starred_url":"https://api.github.com/users/howard-stearns/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/howard-stearns/subscriptions","organizations_url":"https://api.github.com/users/howard-stearns/orgs","repos_url":"https://api.github.com/users/howard-stearns/repos","events_url":"https://api.github.com/users/howard-stearns/events{/privacy}","received_events_url":"https://api.github.com/users/howard-stearns/received_events","type":"User","site_admin":false},"repo":{"id":34746667,"name":"hifi","full_name":"howard-stearns/hifi","owner":{"login":"howard-stearns","id":7015115,"avatar_url":"https://avatars.githubusercontent.com/u/7015115?v=3","gravatar_id":"","url":"https://api.github.com/users/howard-stearns","html_url":"https://github.com/howard-stearns","followers_url":"https://api.github.com/users/howard-stearns/followers","following_url":"https://api.github.com/users/howard-stearns/following{/other_user}","gists_url":"https://api.github.com/users/howard-stearns/gists{/gist_id}","starred_url":"https://api.github.com/users/howard-stearns/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/howard-stearns/subscriptions","organizations_url":"https://api.github.com/users/howard-stearns/orgs","repos_url":"https://api.github.com/users/howard-stearns/repos","events_url":"https://api.github.com/users/howard-stearns/events{/privacy}","received_events_url":"https://api.github.com/users/howard-stearns/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/howard-stearns/hifi","description":"Open source software for shared virtual worlds using HMDs and dynamically assigned devices as servers.  San Francisco based startup, we are hiring: http://highfidelity.com/jobs  Documentation at http://docs.highfidelity.com  Contribute by reporting bugs & doing jobs on http://worklist.net","fork":true,"url":"https://api.github.com/repos/howard-stearns/hifi","forks_url":"https://api.github.com/repos/howard-stearns/hifi/forks","keys_url":"https://api.github.com/repos/howard-stearns/hifi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/howard-stearns/hifi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/howard-stearns/hifi/teams","hooks_url":"https://api.github.com/repos/howard-stearns/hifi/hooks","issue_events_url":"https://api.github.com/repos/howard-stearns/hifi/issues/events{/number}","events_url":"https://api.github.com/repos/howard-stearns/hifi/events","assignees_url":"https://api.github.com/repos/howard-stearns/hifi/assignees{/user}","branches_url":"https://api.github.com/repos/howard-stearns/hifi/branches{/branch}","tags_url":"https://api.github.com/repos/howard-stearns/hifi/tags","blobs_url":"https://api.github.com/repos/howard-stearns/hifi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/howard-stearns/hifi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/howard-stearns/hifi/git/refs{/sha}","trees_url":"https://api.github.com/repos/howard-stearns/hifi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/howard-stearns/hifi/statuses/{sha}","languages_url":"https://api.github.com/repos/howard-stearns/hifi/languages","stargazers_url":"https://api.github.com/repos/howard-stearns/hifi/stargazers","contributors_url":"https://api.github.com/repos/howard-stearns/hifi/contributors","subscribers_url":"https://api.github.com/repos/howard-stearns/hifi/subscribers","subscription_url":"https://api.github.com/repos/howard-stearns/hifi/subscription","commits_url":"https://api.github.com/repos/howard-stearns/hifi/commits{/sha}","git_commits_url":"https://api.github.com/repos/howard-stearns/hifi/git/commits{/sha}","comments_url":"https://api.github.com/repos/howard-stearns/hifi/comments{/number}","issue_comment_url":"https://api.github.com/repos/howard-stearns/hifi/issues/comments{/number}","contents_url":"https://api.github.com/repos/howard-stearns/hifi/contents/{+path}","compare_url":"https://api.github.com/repos/howard-stearns/hifi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/howard-stearns/hifi/merges","archive_url":"https://api.github.com/repos/howard-stearns/hifi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/howard-stearns/hifi/downloads","issues_url":"https://api.github.com/repos/howard-stearns/hifi/issues{/number}","pulls_url":"https://api.github.com/repos/howard-stearns/hifi/pulls{/number}","milestones_url":"https://api.github.com/repos/howard-stearns/hifi/milestones{/number}","notifications_url":"https://api.github.com/repos/howard-stearns/hifi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/howard-stearns/hifi/labels{/name}","releases_url":"https://api.github.com/repos/howard-stearns/hifi/releases{/id}","deployments_url":"https://api.github.com/repos/howard-stearns/hifi/deployments","created_at":"2015-04-28T17:54:06Z","updated_at":"2016-01-17T00:01:04Z","pushed_at":"2016-12-23T00:29:57Z","git_url":"git://github.com/howard-stearns/hifi.git","ssh_url":"git@github.com:howard-stearns/hifi.git","clone_url":"https://github.com/howard-stearns/hifi.git","svn_url":"https://github.com/howard-stearns/hifi","homepage":"","size":266085,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"highfidelity:master","ref":"master","sha":"e67d6e347d709232a73b5e3d6dc817c4d58cf171","user":{"login":"highfidelity","id":1565370,"avatar_url":"https://avatars.githubusercontent.com/u/1565370?v=3","gravatar_id":"","url":"https://api.github.com/users/highfidelity","html_url":"https://github.com/highfidelity","followers_url":"https://api.github.com/users/highfidelity/followers","following_url":"https://api.github.com/users/highfidelity/following{/other_user}","gists_url":"https://api.github.com/users/highfidelity/gists{/gist_id}","starred_url":"https://api.github.com/users/highfidelity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/highfidelity/subscriptions","organizations_url":"https://api.github.com/users/highfidelity/orgs","repos_url":"https://api.github.com/users/highfidelity/repos","events_url":"https://api.github.com/users/highfidelity/events{/privacy}","received_events_url":"https://api.github.com/users/highfidelity/received_events","type":"Organization","site_admin":false},"repo":{"id":5372872,"name":"hifi","full_name":"highfidelity/hifi","owner":{"login":"highfidelity","id":1565370,"avatar_url":"https://avatars.githubusercontent.com/u/1565370?v=3","gravatar_id":"","url":"https://api.github.com/users/highfidelity","html_url":"https://github.com/highfidelity","followers_url":"https://api.github.com/users/highfidelity/followers","following_url":"https://api.github.com/users/highfidelity/following{/other_user}","gists_url":"https://api.github.com/users/highfidelity/gists{/gist_id}","starred_url":"https://api.github.com/users/highfidelity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/highfidelity/subscriptions","organizations_url":"https://api.github.com/users/highfidelity/orgs","repos_url":"https://api.github.com/users/highfidelity/repos","events_url":"https://api.github.com/users/highfidelity/events{/privacy}","received_events_url":"https://api.github.com/users/highfidelity/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/highfidelity/hifi","description":"Open source software for shared virtual worlds using HMDs and dynamically assigned devices as servers.  San Francisco based startup, we are hiring: http://highfidelity.com/jobs  Documentation at http://docs.highfidelity.com  Contribute by reporting bugs & doing jobs on http://worklist.net","fork":false,"url":"https://api.github.com/repos/highfidelity/hifi","forks_url":"https://api.github.com/repos/highfidelity/hifi/forks","keys_url":"https://api.github.com/repos/highfidelity/hifi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/highfidelity/hifi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/highfidelity/hifi/teams","hooks_url":"https://api.github.com/repos/highfidelity/hifi/hooks","issue_events_url":"https://api.github.com/repos/highfidelity/hifi/issues/events{/number}","events_url":"https://api.github.com/repos/highfidelity/hifi/events","assignees_url":"https://api.github.com/repos/highfidelity/hifi/assignees{/user}","branches_url":"https://api.github.com/repos/highfidelity/hifi/branches{/branch}","tags_url":"https://api.github.com/repos/highfidelity/hifi/tags","blobs_url":"https://api.github.com/repos/highfidelity/hifi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/highfidelity/hifi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/highfidelity/hifi/git/refs{/sha}","trees_url":"https://api.github.com/repos/highfidelity/hifi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/highfidelity/hifi/statuses/{sha}","languages_url":"https://api.github.com/repos/highfidelity/hifi/languages","stargazers_url":"https://api.github.com/repos/highfidelity/hifi/stargazers","contributors_url":"https://api.github.com/repos/highfidelity/hifi/contributors","subscribers_url":"https://api.github.com/repos/highfidelity/hifi/subscribers","subscription_url":"https://api.github.com/repos/highfidelity/hifi/subscription","commits_url":"https://api.github.com/repos/highfidelity/hifi/commits{/sha}","git_commits_url":"https://api.github.com/repos/highfidelity/hifi/git/commits{/sha}","comments_url":"https://api.github.com/repos/highfidelity/hifi/comments{/number}","issue_comment_url":"https://api.github.com/repos/highfidelity/hifi/issues/comments{/number}","contents_url":"https://api.github.com/repos/highfidelity/hifi/contents/{+path}","compare_url":"https://api.github.com/repos/highfidelity/hifi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/highfidelity/hifi/merges","archive_url":"https://api.github.com/repos/highfidelity/hifi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/highfidelity/hifi/downloads","issues_url":"https://api.github.com/repos/highfidelity/hifi/issues{/number}","pulls_url":"https://api.github.com/repos/highfidelity/hifi/pulls{/number}","milestones_url":"https://api.github.com/repos/highfidelity/hifi/milestones{/number}","notifications_url":"https://api.github.com/repos/highfidelity/hifi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/highfidelity/hifi/labels{/name}","releases_url":"https://api.github.com/repos/highfidelity/hifi/releases{/id}","deployments_url":"https://api.github.com/repos/highfidelity/hifi/deployments","created_at":"2012-08-10T18:26:22Z","updated_at":"2016-12-23T16:36:35Z","pushed_at":"2016-12-23T18:38:28Z","git_url":"git://github.com/highfidelity/hifi.git","ssh_url":"git@github.com:highfidelity/hifi.git","clone_url":"https://github.com/highfidelity/hifi.git","svn_url":"https://github.com/highfidelity/hifi","homepage":"","size":266487,"stargazers_count":465,"watchers_count":465,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":268,"mirror_url":null,"open_issues_count":44,"forks":268,"open_issues":44,"watchers":465,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/9262"},"html":{"href":"https://github.com/highfidelity/hifi/pull/9262"},"issue":{"href":"https://api.github.com/repos/highfidelity/hifi/issues/9262"},"comments":{"href":"https://api.github.com/repos/highfidelity/hifi/issues/9262/comments"},"review_comments":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/9262/comments"},"review_comment":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/highfidelity/hifi/pulls/9262/commits"},"statuses":{"href":"https://api.github.com/repos/highfidelity/hifi/statuses/b77822131dd018109fed21de5ca2cbf1a1018a5a"}}}}
{"actor":{"display_login":"zfox23"}}