mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01: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();
|
||||
bool sendIdentity = avatar.needsIdentityUpdate();
|
||||
if (sendIdentity) {
|
||||
nodeData->flagIdentityChange();
|
||||
}
|
||||
if (nodeData->getAvatarSessionDisplayNameMustChange()) {
|
||||
const QString& existingBaseDisplayName = avatar.getSessionDisplayName();
|
||||
if (!existingBaseDisplayName.isEmpty()) {
|
||||
|
|
|
@ -27,24 +27,27 @@
|
|||
#include "ClientTraitsHandler.h"
|
||||
#include "AvatarLogging.h"
|
||||
|
||||
const QString MixerAvatar::VERIFY_FAIL_MODEL { "qrc:/meshes/verifyFailed.fst" };
|
||||
|
||||
void MixerAvatar::fetchAvatarFST() {
|
||||
_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();
|
||||
_certificateIdFromFST.clear();
|
||||
_marketplaceIdFromURL.clear();
|
||||
_marketplaceIdFromFST.clear();
|
||||
auto resourceManager = DependencyManager::get<ResourceManager>();
|
||||
QUrl avatarURL = getSkeletonModelURL();
|
||||
if (avatarURL.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//auto avatarURLString = avatarURL.toDisplayString();
|
||||
// Match UUID + (optionally) URL cert
|
||||
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());
|
||||
if (marketIdMatch.hasMatch()) {
|
||||
|
@ -58,18 +61,17 @@ void MixerAvatar::fetchAvatarFST() {
|
|||
ResourceRequest* fstRequest = resourceManager->createResourceRequest(this, avatarURL);
|
||||
if (fstRequest) {
|
||||
QMutexLocker certifyLocker(&_avatarCertifyLock);
|
||||
qCDebug(avatars) << "Requesting FST at" << avatarURL;
|
||||
|
||||
if (_avatarRequest) {
|
||||
_avatarRequest->deleteLater();
|
||||
}
|
||||
_avatarRequest = fstRequest;
|
||||
connect(fstRequest, &ResourceRequest::finished, this, &MixerAvatar::fstRequestComplete);
|
||||
_verifyState = requestingFST;
|
||||
connect(fstRequest, &ResourceRequest::finished, this, &MixerAvatar::fstRequestComplete);
|
||||
fstRequest->send();
|
||||
} else {
|
||||
qCDebug(avatars) << "Couldn't create FST request for" << avatarURL;
|
||||
_verifyState = error;
|
||||
}
|
||||
_needsIdentityUpdate = true;
|
||||
}
|
||||
|
||||
void MixerAvatar::fstRequestComplete() {
|
||||
|
@ -176,6 +178,7 @@ void MixerAvatar::ownerRequestComplete() {
|
|||
qCDebug(avatars) << "Owner lookup failed for" << getDisplayName() << ":"
|
||||
<< jsonData.toObject()["message"].toString();
|
||||
_verifyState = error;
|
||||
_pendingEvent = false;
|
||||
}
|
||||
}
|
||||
networkReply->deleteLater();
|
||||
|
@ -263,6 +266,7 @@ void MixerAvatar::processCertifyEvents() {
|
|||
{
|
||||
if (_challengeResponse.length() < 8) {
|
||||
_verifyState = error;
|
||||
_pendingEvent = false;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -282,7 +286,6 @@ void MixerAvatar::processCertifyEvents() {
|
|||
_needsIdentityUpdate = true;
|
||||
if (_verifyState == verificationFailed) {
|
||||
qCDebug(avatars) << "Dynamic verification FAILED for " << getDisplayName() << getSessionUUID();
|
||||
setSkeletonModelURL(QUrl(VERIFY_FAIL_MODEL));
|
||||
} else {
|
||||
qCDebug(avatars) << "Dynamic verification SUCCEEDED for " << getDisplayName() << getSessionUUID();
|
||||
}
|
||||
|
@ -324,7 +327,6 @@ void MixerAvatar::sendOwnerChallenge() {
|
|||
_challengeTimeout.setInterval(CHALLENGE_TIMEOUT_MS);
|
||||
_challengeTimeout.connect(&_challengeTimeout, &QTimer::timeout, [this]() {
|
||||
_verifyState = verificationFailed;
|
||||
setSkeletonModelURL(QUrl(VERIFY_FAIL_MODEL));
|
||||
_needsIdentityUpdate = true;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -326,7 +326,8 @@ void AvatarHashMap::processAvatarIdentityPacket(QSharedPointer<ReceivedMessage>
|
|||
bool displayNameChanged = false;
|
||||
// In this case, the "sendingNode" is the Avatar Mixer.
|
||||
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));
|
||||
}
|
||||
_replicas.processAvatarIdentity(identityUUID, message->getMessage(), identityChanged, displayNameChanged);
|
||||
|
|
Loading…
Reference in a new issue