From 4af51186543c58179b506f2ba86e12ff464522fb Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 1 Feb 2017 17:04:21 -0800 Subject: [PATCH 1/2] First pass --- assignment-client/src/avatars/AvatarMixer.cpp | 9 +++++++-- libraries/avatars/src/AvatarData.cpp | 14 ++++++-------- libraries/avatars/src/AvatarData.h | 5 +++-- libraries/avatars/src/AvatarHashMap.cpp | 4 +++- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 457787013f..61164ee8d7 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -593,10 +593,15 @@ void AvatarMixer::handleAvatarIdentityPacket(QSharedPointer mes // parse the identity packet and update the change timestamp if appropriate AvatarData::Identity identity; AvatarData::parseAvatarIdentityPacket(message->getMessage(), identity); - if (avatar.processAvatarIdentity(identity)) { + bool identityChanged = false; + bool displayNameChanged = false; + avatar.processAvatarIdentity(identity, identityChanged, displayNameChanged); + if (identityChanged) { QMutexLocker nodeDataLocker(&nodeData->getMutex()); nodeData->flagIdentityChange(); - nodeData->setAvatarSessionDisplayNameMustChange(true); + if (displayNameChanged) { + nodeData->setAvatarSessionDisplayNameMustChange(true); + } } } } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index c35572a415..8bc87d6027 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1336,24 +1336,24 @@ const QUrl& AvatarData::cannonicalSkeletonModelURL(const QUrl& emptyURL) { return _skeletonModelURL.scheme() == "file" ? emptyURL : _skeletonModelURL; } -bool AvatarData::processAvatarIdentity(const Identity& identity) { - bool hasIdentityChanged = false; +void AvatarData::processAvatarIdentity(const Identity& identity, bool& identityChanged, bool& displayNameChanged) { if (_firstSkeletonCheck || (identity.skeletonModelURL != cannonicalSkeletonModelURL(emptyURL))) { setSkeletonModelURL(identity.skeletonModelURL); - hasIdentityChanged = true; + identityChanged = true; _firstSkeletonCheck = false; } if (identity.displayName != _displayName) { _displayName = identity.displayName; - hasIdentityChanged = true; + identityChanged = true; + displayNameChanged = true; } maybeUpdateSessionDisplayNameFromTransport(identity.sessionDisplayName); if (identity.attachmentData != _attachmentData) { setAttachmentData(identity.attachmentData); - hasIdentityChanged = true; + identityChanged = true; } bool avatarEntityDataChanged = false; @@ -1362,10 +1362,8 @@ bool AvatarData::processAvatarIdentity(const Identity& identity) { }); if (avatarEntityDataChanged) { setAvatarEntityData(identity.avatarEntityData); - hasIdentityChanged = true; + identityChanged = true; } - - return hasIdentityChanged; } QByteArray AvatarData::identityByteArray() { diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 5d989b0eee..52cf81798e 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -471,8 +471,9 @@ public: static void parseAvatarIdentityPacket(const QByteArray& data, Identity& identityOut); - // returns true if identity has changed, false otherwise. - bool processAvatarIdentity(const Identity& identity); + // identityChanged returns true if identity has changed, false otherwise. + // displayNameChanged returns true if displayName has changed, false otherwise. + void processAvatarIdentity(const Identity& identity, bool& identityChanged, bool& displayNameChanged); QByteArray identityByteArray(); diff --git a/libraries/avatars/src/AvatarHashMap.cpp b/libraries/avatars/src/AvatarHashMap.cpp index f4e94b9a35..9d43bf438b 100644 --- a/libraries/avatars/src/AvatarHashMap.cpp +++ b/libraries/avatars/src/AvatarHashMap.cpp @@ -148,7 +148,9 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer if (!nodeList->isIgnoringNode(identity.uuid) || nodeList->getRequestsDomainListData()) { // mesh URL for a UUID, find avatar in our list auto avatar = newOrExistingAvatar(identity.uuid, sendingNode); - avatar->processAvatarIdentity(identity); + bool identityChanged = false; + bool displayNameChanged = false; + avatar->processAvatarIdentity(identity, identityChanged, displayNameChanged); } } From 5ea3c5dffdee18c7283af99cdec11a62fa0fc823 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Wed, 1 Feb 2017 18:13:24 -0800 Subject: [PATCH 2/2] Skipped this line --- libraries/avatars/src/AvatarData.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 8bc87d6027..b25140d0a8 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1341,6 +1341,9 @@ void AvatarData::processAvatarIdentity(const Identity& identity, bool& identityC if (_firstSkeletonCheck || (identity.skeletonModelURL != cannonicalSkeletonModelURL(emptyURL))) { setSkeletonModelURL(identity.skeletonModelURL); identityChanged = true; + if (_firstSkeletonCheck) { + displayNameChanged = true; + } _firstSkeletonCheck = false; }