First pass

This commit is contained in:
Zach Fox 2017-02-01 17:04:21 -08:00
parent d0393aeea0
commit 4af5118654
4 changed files with 19 additions and 13 deletions

View file

@ -593,10 +593,15 @@ void AvatarMixer::handleAvatarIdentityPacket(QSharedPointer<ReceivedMessage> mes
// parse the identity packet and update the change timestamp if appropriate // parse the identity packet and update the change timestamp if appropriate
AvatarData::Identity identity; AvatarData::Identity identity;
AvatarData::parseAvatarIdentityPacket(message->getMessage(), 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()); QMutexLocker nodeDataLocker(&nodeData->getMutex());
nodeData->flagIdentityChange(); nodeData->flagIdentityChange();
nodeData->setAvatarSessionDisplayNameMustChange(true); if (displayNameChanged) {
nodeData->setAvatarSessionDisplayNameMustChange(true);
}
} }
} }
} }

View file

@ -1336,24 +1336,24 @@ const QUrl& AvatarData::cannonicalSkeletonModelURL(const QUrl& emptyURL) {
return _skeletonModelURL.scheme() == "file" ? emptyURL : _skeletonModelURL; return _skeletonModelURL.scheme() == "file" ? emptyURL : _skeletonModelURL;
} }
bool AvatarData::processAvatarIdentity(const Identity& identity) { void AvatarData::processAvatarIdentity(const Identity& identity, bool& identityChanged, bool& displayNameChanged) {
bool hasIdentityChanged = false;
if (_firstSkeletonCheck || (identity.skeletonModelURL != cannonicalSkeletonModelURL(emptyURL))) { if (_firstSkeletonCheck || (identity.skeletonModelURL != cannonicalSkeletonModelURL(emptyURL))) {
setSkeletonModelURL(identity.skeletonModelURL); setSkeletonModelURL(identity.skeletonModelURL);
hasIdentityChanged = true; identityChanged = true;
_firstSkeletonCheck = false; _firstSkeletonCheck = false;
} }
if (identity.displayName != _displayName) { if (identity.displayName != _displayName) {
_displayName = identity.displayName; _displayName = identity.displayName;
hasIdentityChanged = true; identityChanged = true;
displayNameChanged = true;
} }
maybeUpdateSessionDisplayNameFromTransport(identity.sessionDisplayName); maybeUpdateSessionDisplayNameFromTransport(identity.sessionDisplayName);
if (identity.attachmentData != _attachmentData) { if (identity.attachmentData != _attachmentData) {
setAttachmentData(identity.attachmentData); setAttachmentData(identity.attachmentData);
hasIdentityChanged = true; identityChanged = true;
} }
bool avatarEntityDataChanged = false; bool avatarEntityDataChanged = false;
@ -1362,10 +1362,8 @@ bool AvatarData::processAvatarIdentity(const Identity& identity) {
}); });
if (avatarEntityDataChanged) { if (avatarEntityDataChanged) {
setAvatarEntityData(identity.avatarEntityData); setAvatarEntityData(identity.avatarEntityData);
hasIdentityChanged = true; identityChanged = true;
} }
return hasIdentityChanged;
} }
QByteArray AvatarData::identityByteArray() { QByteArray AvatarData::identityByteArray() {

View file

@ -471,8 +471,9 @@ public:
static void parseAvatarIdentityPacket(const QByteArray& data, Identity& identityOut); static void parseAvatarIdentityPacket(const QByteArray& data, Identity& identityOut);
// returns true if identity has changed, false otherwise. // identityChanged returns true if identity has changed, false otherwise.
bool processAvatarIdentity(const Identity& identity); // displayNameChanged returns true if displayName has changed, false otherwise.
void processAvatarIdentity(const Identity& identity, bool& identityChanged, bool& displayNameChanged);
QByteArray identityByteArray(); QByteArray identityByteArray();

View file

@ -148,7 +148,9 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer<ReceivedMessage>
if (!nodeList->isIgnoringNode(identity.uuid) || nodeList->getRequestsDomainListData()) { if (!nodeList->isIgnoringNode(identity.uuid) || nodeList->getRequestsDomainListData()) {
// mesh URL for a UUID, find avatar in our list // mesh URL for a UUID, find avatar in our list
auto avatar = newOrExistingAvatar(identity.uuid, sendingNode); auto avatar = newOrExistingAvatar(identity.uuid, sendingNode);
avatar->processAvatarIdentity(identity); bool identityChanged = false;
bool displayNameChanged = false;
avatar->processAvatarIdentity(identity, identityChanged, displayNameChanged);
} }
} }