remove ignored avatars from PAL when they disconnect

This commit is contained in:
David Kelly 2017-01-16 18:22:53 -08:00
parent 1df13d6a56
commit 6c701bb0f0
6 changed files with 36 additions and 1 deletions

View file

@ -502,6 +502,10 @@ Rectangle {
ignored = {}; ignored = {};
gainSliderValueDB = {}; gainSliderValueDB = {};
break; break;
case 'avatarDisconnected':
var sessionID = message.params[0];
delete ignored[sessionID];
break;
default: default:
console.log('Unrecognized message:', JSON.stringify(message)); console.log('Unrecognized message:', JSON.stringify(message));
} }

View file

@ -261,6 +261,11 @@ void AvatarManager::handleRemovedAvatar(const AvatarSharedPointer& removedAvatar
if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble || removalReason == YourAvatarEnteredTheirBubble) { if (removalReason == KillAvatarReason::TheirAvatarEnteredYourBubble || removalReason == YourAvatarEnteredTheirBubble) {
DependencyManager::get<NodeList>()->radiusIgnoreNodeBySessionID(avatar->getSessionUUID(), true); DependencyManager::get<NodeList>()->radiusIgnoreNodeBySessionID(avatar->getSessionUUID(), true);
} }
if (removalReason == KillAvatarReason::AvatarDisconnected) {
// remove from node sets, if present
DependencyManager::get<NodeList>()->maintainIgnoreMuteSets(avatar->getSessionUUID());
DependencyManager::get<UsersScriptingInterface>()->avatarDisconnected(avatar->getSessionUUID());
}
_avatarFades.push_back(removedAvatar); _avatarFades.push_back(removedAvatar);
} }

View file

@ -847,6 +847,18 @@ void NodeList::ignoreNodeBySessionID(const QUuid& nodeID, bool ignoreEnabled) {
} }
} }
// removes this UUID from ignore and mute lists.
void NodeList::maintainIgnoreMuteSets(const QUuid& nodeID) {
// don't remove yourself, or nobody
if (!nodeID.isNull() && _sessionUUID != nodeID) {
QWriteLocker ignoredSetLocker{ &_ignoredSetLock };
QWriteLocker personalMutedSetLocker{ &_personalMutedSetLock };
_ignoredNodeIDs.unsafe_erase(nodeID);
_personalMutedNodeIDs.unsafe_erase(nodeID);
qCDebug(networking) << "removed" << nodeID.toString() << "from ignore/mute sets (if present)";
}
}
bool NodeList::isIgnoringNode(const QUuid& nodeID) const { bool NodeList::isIgnoringNode(const QUuid& nodeID) const {
QReadLocker ignoredSetLocker{ &_ignoredSetLock }; QReadLocker ignoredSetLocker{ &_ignoredSetLock };
return _ignoredNodeIDs.find(nodeID) != _ignoredNodeIDs.cend(); return _ignoredNodeIDs.find(nodeID) != _ignoredNodeIDs.cend();

View file

@ -90,6 +90,8 @@ public:
bool getRequestsDomainListData() { return _requestsDomainListData; } bool getRequestsDomainListData() { return _requestsDomainListData; }
void setRequestsDomainListData(bool isRequesting); void setRequestsDomainListData(bool isRequesting);
void maintainIgnoreMuteSets(const QUuid& nodeID);
public slots: public slots:
void reset(); void reset();
void sendDomainServerCheckIn(); void sendDomainServerCheckIn();

View file

@ -139,6 +139,12 @@ signals:
*/ */
void usernameFromIDReply(const QString& nodeID, const QString& username, const QString& machineFingerprint); void usernameFromIDReply(const QString& nodeID, const QString& username, const QString& machineFingerprint);
/**jsdoc
* Notifies scripts that a user has disconnected from the domain
* @function Users.avatar.avatarDisconnected
*/
void avatarDisconnected(const QUuid& nodeID);
private: private:
bool getRequestsDomainListData(); bool getRequestsDomainListData();
void setRequestsDomainListData(bool requests); void setRequestsDomainListData(bool requests);

View file

@ -580,7 +580,11 @@ function onClicked() {
} }
pal.setVisible(!pal.visible); pal.setVisible(!pal.visible);
} }
function avatarDisconnected(nodeID) {
// remove from the pal list
print("got avatarDisconnected for " + nodeID);
pal.sendToQml({method: 'avatarDisconnected', params: [nodeID]});
}
// //
// Button state. // Button state.
// //
@ -593,6 +597,8 @@ button.clicked.connect(onClicked);
pal.visibleChanged.connect(onVisibleChanged); pal.visibleChanged.connect(onVisibleChanged);
pal.closed.connect(off); pal.closed.connect(off);
Users.usernameFromIDReply.connect(usernameFromIDReply); Users.usernameFromIDReply.connect(usernameFromIDReply);
Users.avatarDisconnected.connect(avatarDisconnected);
function clearLocalQMLDataAndClosePAL() { function clearLocalQMLDataAndClosePAL() {
pal.sendToQml({ method: 'clearLocalQMLData' }); pal.sendToQml({ method: 'clearLocalQMLData' });
if (pal.visible) { if (pal.visible) {