perform requested interpolation when unpacking

This commit is contained in:
Stephen Birarda 2015-05-01 15:58:22 -07:00
parent 99bddcc102
commit 5e2a22a006
2 changed files with 14 additions and 2 deletions

View file

@ -153,6 +153,7 @@ QVariantMap JSONBreakableMarshal::fromStringList(const QStringList& stringList)
QVariant* currentValue = &result;
// pull the key (everything left of the equality sign)
QString parentKeypath;
QString keypath = marshalString.left(equalityIndex);
// setup for array index checking
@ -161,6 +162,8 @@ QVariantMap JSONBreakableMarshal::fromStringList(const QStringList& stringList)
// as long as we have a keypath we need to recurse downwards
while (!keypath.isEmpty()) {
parentKeypath = keypath;
int arrayBracketIndex = arrayRegex.indexIn(keypath);
// is this an array index
@ -255,10 +258,19 @@ QVariantMap JSONBreakableMarshal::fromStringList(const QStringList& stringList)
// change the currentValue to the QJsonValue for this key
currentValue = &currentMap[subKey];
}
}
}
*currentValue = fromString(marshalString.mid(equalityIndex + 1));
if (_interpolationMap.contains(parentKeypath)) {
// we expect the currentValue here to be a string, that's the key we use for interpolation
// bail if it isn't
if (currentValue->canConvert(QMetaType::QString)
&& _interpolationMap[parentKeypath].canConvert(QMetaType::QVariantMap)) {
*currentValue = _interpolationMap[parentKeypath].toMap()[currentValue->toString()];
}
}
}
}

View file

@ -55,7 +55,7 @@ const QString ASSIGNMENT_CLIENT_MONITOR_LOCAL_PORT_SMEM_KEY = "assignment-client
const char DEFAULT_ASSIGNMENT_CLIENT_MONITOR_HOSTNAME[] = "localhost";
const unsigned short DEFAULT_ASSIGNMENT_CLIENT_MONITOR_PORT = 40104;
const QString USERNAME_UUID_REPLACEMENT_STATS_KEY = "$username_for_uuid";
const QString USERNAME_UUID_REPLACEMENT_STATS_KEY = "$username";
class HifiSockAddr;