mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 04:12:46 +02:00
Don't substitute own avatar; FST URL regex fixes; better error handling
This commit is contained in:
parent
ae68478aea
commit
7c405b0714
3 changed files with 21 additions and 15 deletions
|
@ -370,6 +370,9 @@ void AvatarMixer::manageIdentityData(const SharedNodePointer& node) {
|
||||||
|
|
||||||
MixerAvatar& avatar = nodeData->getAvatar();
|
MixerAvatar& avatar = nodeData->getAvatar();
|
||||||
bool sendIdentity = avatar.needsIdentityUpdate();
|
bool sendIdentity = avatar.needsIdentityUpdate();
|
||||||
|
if (sendIdentity) {
|
||||||
|
nodeData->flagIdentityChange();
|
||||||
|
}
|
||||||
if (nodeData->getAvatarSessionDisplayNameMustChange()) {
|
if (nodeData->getAvatarSessionDisplayNameMustChange()) {
|
||||||
const QString& existingBaseDisplayName = avatar.getSessionDisplayName();
|
const QString& existingBaseDisplayName = avatar.getSessionDisplayName();
|
||||||
if (!existingBaseDisplayName.isEmpty()) {
|
if (!existingBaseDisplayName.isEmpty()) {
|
||||||
|
|
|
@ -27,24 +27,27 @@
|
||||||
#include "ClientTraitsHandler.h"
|
#include "ClientTraitsHandler.h"
|
||||||
#include "AvatarLogging.h"
|
#include "AvatarLogging.h"
|
||||||
|
|
||||||
const QString MixerAvatar::VERIFY_FAIL_MODEL { "qrc:/meshes/verifyFailed.fst" };
|
|
||||||
|
|
||||||
void MixerAvatar::fetchAvatarFST() {
|
void MixerAvatar::fetchAvatarFST() {
|
||||||
_verifyState = nonCertified;
|
_verifyState = nonCertified;
|
||||||
|
|
||||||
|
_pendingEvent = false;
|
||||||
|
|
||||||
|
QUrl avatarURL = getSkeletonModelURL();
|
||||||
|
auto avatarString = avatarURL.toString();
|
||||||
|
qCDebug(avatars) << "MixerAvatar::fetchAvatarFST: called with" << avatarString;
|
||||||
|
if (avatarURL.isEmpty() || avatarURL.isLocalFile() || avatarURL.scheme() == "qrc") {
|
||||||
|
// Not network FST.
|
||||||
|
return;
|
||||||
|
}
|
||||||
_certificateIdFromURL.clear();
|
_certificateIdFromURL.clear();
|
||||||
_certificateIdFromFST.clear();
|
_certificateIdFromFST.clear();
|
||||||
_marketplaceIdFromURL.clear();
|
_marketplaceIdFromURL.clear();
|
||||||
_marketplaceIdFromFST.clear();
|
_marketplaceIdFromFST.clear();
|
||||||
auto resourceManager = DependencyManager::get<ResourceManager>();
|
auto resourceManager = DependencyManager::get<ResourceManager>();
|
||||||
QUrl avatarURL = getSkeletonModelURL();
|
|
||||||
if (avatarURL.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//auto avatarURLString = avatarURL.toDisplayString();
|
|
||||||
// Match UUID + (optionally) URL cert
|
// Match UUID + (optionally) URL cert
|
||||||
static const QRegularExpression marketIdRegex{
|
static const QRegularExpression marketIdRegex{
|
||||||
"^https://metaverse.highfidelity.com/api/v.+/commerce/entity_edition/([-0-9a-z]{36})(.*?certificate_id=([\\w/+%]+)|.*).*$"
|
"^https://.*?highfidelity\\.com/api/.*?/commerce/entity_edition/([-0-9a-z]{36})(.*?certificate_id=([\\w/+%]+)|.*).*$"
|
||||||
};
|
};
|
||||||
auto marketIdMatch = marketIdRegex.match(avatarURL.toDisplayString());
|
auto marketIdMatch = marketIdRegex.match(avatarURL.toDisplayString());
|
||||||
if (marketIdMatch.hasMatch()) {
|
if (marketIdMatch.hasMatch()) {
|
||||||
|
@ -58,18 +61,17 @@ void MixerAvatar::fetchAvatarFST() {
|
||||||
ResourceRequest* fstRequest = resourceManager->createResourceRequest(this, avatarURL);
|
ResourceRequest* fstRequest = resourceManager->createResourceRequest(this, avatarURL);
|
||||||
if (fstRequest) {
|
if (fstRequest) {
|
||||||
QMutexLocker certifyLocker(&_avatarCertifyLock);
|
QMutexLocker certifyLocker(&_avatarCertifyLock);
|
||||||
|
qCDebug(avatars) << "Requesting FST at" << avatarURL;
|
||||||
|
|
||||||
if (_avatarRequest) {
|
|
||||||
_avatarRequest->deleteLater();
|
|
||||||
}
|
|
||||||
_avatarRequest = fstRequest;
|
_avatarRequest = fstRequest;
|
||||||
connect(fstRequest, &ResourceRequest::finished, this, &MixerAvatar::fstRequestComplete);
|
|
||||||
_verifyState = requestingFST;
|
_verifyState = requestingFST;
|
||||||
|
connect(fstRequest, &ResourceRequest::finished, this, &MixerAvatar::fstRequestComplete);
|
||||||
fstRequest->send();
|
fstRequest->send();
|
||||||
} else {
|
} else {
|
||||||
qCDebug(avatars) << "Couldn't create FST request for" << avatarURL;
|
qCDebug(avatars) << "Couldn't create FST request for" << avatarURL;
|
||||||
_verifyState = error;
|
_verifyState = error;
|
||||||
}
|
}
|
||||||
|
_needsIdentityUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MixerAvatar::fstRequestComplete() {
|
void MixerAvatar::fstRequestComplete() {
|
||||||
|
@ -176,6 +178,7 @@ void MixerAvatar::ownerRequestComplete() {
|
||||||
qCDebug(avatars) << "Owner lookup failed for" << getDisplayName() << ":"
|
qCDebug(avatars) << "Owner lookup failed for" << getDisplayName() << ":"
|
||||||
<< jsonData.toObject()["message"].toString();
|
<< jsonData.toObject()["message"].toString();
|
||||||
_verifyState = error;
|
_verifyState = error;
|
||||||
|
_pendingEvent = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
networkReply->deleteLater();
|
networkReply->deleteLater();
|
||||||
|
@ -263,6 +266,7 @@ void MixerAvatar::processCertifyEvents() {
|
||||||
{
|
{
|
||||||
if (_challengeResponse.length() < 8) {
|
if (_challengeResponse.length() < 8) {
|
||||||
_verifyState = error;
|
_verifyState = error;
|
||||||
|
_pendingEvent = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,7 +286,6 @@ void MixerAvatar::processCertifyEvents() {
|
||||||
_needsIdentityUpdate = true;
|
_needsIdentityUpdate = true;
|
||||||
if (_verifyState == verificationFailed) {
|
if (_verifyState == verificationFailed) {
|
||||||
qCDebug(avatars) << "Dynamic verification FAILED for " << getDisplayName() << getSessionUUID();
|
qCDebug(avatars) << "Dynamic verification FAILED for " << getDisplayName() << getSessionUUID();
|
||||||
setSkeletonModelURL(QUrl(VERIFY_FAIL_MODEL));
|
|
||||||
} else {
|
} else {
|
||||||
qCDebug(avatars) << "Dynamic verification SUCCEEDED for " << getDisplayName() << getSessionUUID();
|
qCDebug(avatars) << "Dynamic verification SUCCEEDED for " << getDisplayName() << getSessionUUID();
|
||||||
}
|
}
|
||||||
|
@ -324,7 +327,6 @@ void MixerAvatar::sendOwnerChallenge() {
|
||||||
_challengeTimeout.setInterval(CHALLENGE_TIMEOUT_MS);
|
_challengeTimeout.setInterval(CHALLENGE_TIMEOUT_MS);
|
||||||
_challengeTimeout.connect(&_challengeTimeout, &QTimer::timeout, [this]() {
|
_challengeTimeout.connect(&_challengeTimeout, &QTimer::timeout, [this]() {
|
||||||
_verifyState = verificationFailed;
|
_verifyState = verificationFailed;
|
||||||
setSkeletonModelURL(QUrl(VERIFY_FAIL_MODEL));
|
|
||||||
_needsIdentityUpdate = true;
|
_needsIdentityUpdate = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -326,7 +326,8 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer<ReceivedMessage>
|
||||||
bool displayNameChanged = false;
|
bool displayNameChanged = false;
|
||||||
// In this case, the "sendingNode" is the Avatar Mixer.
|
// In this case, the "sendingNode" is the Avatar Mixer.
|
||||||
avatar->processAvatarIdentity(avatarIdentityStream, identityChanged, displayNameChanged);
|
avatar->processAvatarIdentity(avatarIdentityStream, identityChanged, displayNameChanged);
|
||||||
if (avatar->isCertifyFailed()) {
|
if (avatar->isCertifyFailed() && identityUUID != EMPTY) {
|
||||||
|
qCDebug(avatars) << "Avatar" << avatar->getSessionDisplayName() << "marked as VERIFY-FAILED";
|
||||||
avatar->setSkeletonModelURL(PathUtils::resourcesUrl(VERIFY_FAIL_MODEL));
|
avatar->setSkeletonModelURL(PathUtils::resourcesUrl(VERIFY_FAIL_MODEL));
|
||||||
}
|
}
|
||||||
_replicas.processAvatarIdentity(identityUUID, message->getMessage(), identityChanged, displayNameChanged);
|
_replicas.processAvatarIdentity(identityUUID, message->getMessage(), identityChanged, displayNameChanged);
|
||||||
|
|
Loading…
Reference in a new issue