Merge pull request #13841 from luiscuenca/noAttachmentsToJSON

Don't include old attachment data on new avatar recordings
This commit is contained in:
John Conklin II 2018-08-23 10:51:33 -07:00 committed by GitHub
commit 1320a34a18
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 16 deletions

View file

@ -203,6 +203,7 @@ MyAvatar::MyAvatar(QThread* thread) :
connect(recorder.data(), &Recorder::recordingStateChanged, [=] { connect(recorder.data(), &Recorder::recordingStateChanged, [=] {
if (recorder->isRecording()) { if (recorder->isRecording()) {
createRecordingIDs();
setRecordingBasis(); setRecordingBasis();
} else { } else {
clearRecordingBasis(); clearRecordingBasis();

View file

@ -376,6 +376,9 @@ void Avatar::updateAvatarEntities() {
} }
} }
} }
if (avatarEntities.size() != _avatarEntityForRecording.size()) {
createRecordingIDs();
}
}); });
setAvatarEntityDataChanged(false); setAvatarEntityDataChanged(false);

View file

@ -2308,6 +2308,15 @@ void AvatarData::setRecordingBasis(std::shared_ptr<Transform> recordingBasis) {
_recordingBasis = recordingBasis; _recordingBasis = recordingBasis;
} }
void AvatarData::createRecordingIDs() {
_avatarEntitiesLock.withReadLock([&] {
_avatarEntityForRecording.clear();
for (int i = 0; i < _avatarEntityData.size(); i++) {
_avatarEntityForRecording.insert(QUuid::createUuid());
}
});
}
void AvatarData::clearRecordingBasis() { void AvatarData::clearRecordingBasis() {
_recordingBasis.reset(); _recordingBasis.reset();
} }
@ -2368,21 +2377,15 @@ QJsonObject AvatarData::toJson() const {
if (!getDisplayName().isEmpty()) { if (!getDisplayName().isEmpty()) {
root[JSON_AVATAR_DISPLAY_NAME] = getDisplayName(); root[JSON_AVATAR_DISPLAY_NAME] = getDisplayName();
} }
if (!getAttachmentData().isEmpty()) {
QJsonArray attachmentsJson;
for (auto attachment : getAttachmentData()) {
attachmentsJson.push_back(attachment.toJson());
}
root[JSON_AVATAR_ATTACHMENTS] = attachmentsJson;
}
_avatarEntitiesLock.withReadLock([&] { _avatarEntitiesLock.withReadLock([&] {
if (!_avatarEntityData.empty()) { if (!_avatarEntityData.empty()) {
QJsonArray avatarEntityJson; QJsonArray avatarEntityJson;
int entityCount = 0;
for (auto entityID : _avatarEntityData.keys()) { for (auto entityID : _avatarEntityData.keys()) {
QVariantMap entityData; QVariantMap entityData;
entityData.insert("id", entityID); QUuid newId = _avatarEntityForRecording.size() == _avatarEntityData.size() ? _avatarEntityForRecording.values()[entityCount++] : entityID;
entityData.insert("properties", _avatarEntityData.value(entityID)); entityData.insert("id", newId);
entityData.insert("properties", _avatarEntityData.value(entityID).toBase64());
avatarEntityJson.push_back(QVariant(entityData).toJsonObject()); avatarEntityJson.push_back(QVariant(entityData).toJsonObject());
} }
root[JSON_AVATAR_ENTITIES] = avatarEntityJson; root[JSON_AVATAR_ENTITIES] = avatarEntityJson;
@ -2504,12 +2507,17 @@ void AvatarData::fromJson(const QJsonObject& json, bool useFrameSkeleton) {
setAttachmentData(attachments); setAttachmentData(attachments);
} }
// if (json.contains(JSON_AVATAR_ENTITIES) && json[JSON_AVATAR_ENTITIES].isArray()) { if (json.contains(JSON_AVATAR_ENTITIES) && json[JSON_AVATAR_ENTITIES].isArray()) {
// QJsonArray attachmentsJson = json[JSON_AVATAR_ATTACHMENTS].toArray(); QJsonArray attachmentsJson = json[JSON_AVATAR_ENTITIES].toArray();
// for (auto attachmentJson : attachmentsJson) { for (auto attachmentJson : attachmentsJson) {
// // TODO -- something if (attachmentJson.isObject()) {
// } QVariantMap entityData = attachmentJson.toObject().toVariantMap();
// } QUuid entityID = entityData.value("id").toUuid();
QByteArray properties = QByteArray::fromBase64(entityData.value("properties").toByteArray());
updateAvatarEntity(entityID, properties);
}
}
}
if (json.contains(JSON_AVATAR_JOINT_ARRAY)) { if (json.contains(JSON_AVATAR_JOINT_ARRAY)) {
if (version == (int)JsonAvatarFrameVersion::JointRotationsInRelativeFrame) { if (version == (int)JsonAvatarFrameVersion::JointRotationsInRelativeFrame) {

View file

@ -1089,6 +1089,7 @@ public:
void clearRecordingBasis(); void clearRecordingBasis();
TransformPointer getRecordingBasis() const; TransformPointer getRecordingBasis() const;
void setRecordingBasis(TransformPointer recordingBasis = TransformPointer()); void setRecordingBasis(TransformPointer recordingBasis = TransformPointer());
void createRecordingIDs();
QJsonObject toJson() const; QJsonObject toJson() const;
void fromJson(const QJsonObject& json, bool useFrameSkeleton = true); void fromJson(const QJsonObject& json, bool useFrameSkeleton = true);
@ -1421,6 +1422,7 @@ protected:
mutable ReadWriteLockable _avatarEntitiesLock; mutable ReadWriteLockable _avatarEntitiesLock;
AvatarEntityIDs _avatarEntityDetached; // recently detached from this avatar AvatarEntityIDs _avatarEntityDetached; // recently detached from this avatar
AvatarEntityIDs _avatarEntityForRecording; // create new entities id for avatar recording
AvatarEntityMap _avatarEntityData; AvatarEntityMap _avatarEntityData;
bool _avatarEntityDataChanged { false }; bool _avatarEntityDataChanged { false };