mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 04:44:11 +02:00
Merge branch 'master' of https://github.com/worklist/hifi
This commit is contained in:
commit
11395a0e10
7 changed files with 122 additions and 48 deletions
|
@ -367,19 +367,12 @@ void DomainServer::parseAssignmentConfigs(QSet<Assignment::Type>& excludedTypes)
|
|||
|
||||
if (assignmentType < Assignment::AllTypes && !excludedTypes.contains(assignmentType)) {
|
||||
QVariant mapValue = settingsMap[variantMapKeys[configIndex]];
|
||||
QJsonArray assignmentArray;
|
||||
|
||||
if (mapValue.type() == QVariant::String) {
|
||||
QJsonDocument deserializedDocument = QJsonDocument::fromJson(mapValue.toString().toUtf8());
|
||||
assignmentArray = deserializedDocument.array();
|
||||
} else {
|
||||
assignmentArray = mapValue.toJsonValue().toArray();
|
||||
}
|
||||
QVariantList assignmentList = mapValue.toList();
|
||||
|
||||
if (assignmentType != Assignment::AgentType) {
|
||||
createStaticAssignmentsForType(assignmentType, assignmentArray);
|
||||
createStaticAssignmentsForType(assignmentType, assignmentList);
|
||||
} else {
|
||||
createScriptedAssignmentsFromArray(assignmentArray);
|
||||
createScriptedAssignmentsFromList(assignmentList);
|
||||
}
|
||||
|
||||
excludedTypes.insert(assignmentType);
|
||||
|
@ -395,23 +388,23 @@ void DomainServer::addStaticAssignmentToAssignmentHash(Assignment* newAssignment
|
|||
_allAssignments.insert(newAssignment->getUUID(), SharedAssignmentPointer(newAssignment));
|
||||
}
|
||||
|
||||
void DomainServer::createScriptedAssignmentsFromArray(const QJsonArray &configArray) {
|
||||
foreach(const QJsonValue& jsonValue, configArray) {
|
||||
if (jsonValue.isObject()) {
|
||||
QJsonObject jsonObject = jsonValue.toObject();
|
||||
void DomainServer::createScriptedAssignmentsFromList(const QVariantList &configList) {
|
||||
foreach(const QVariant& configVariant, configList) {
|
||||
if (configVariant.canConvert(QMetaType::QVariantMap)) {
|
||||
QVariantMap configMap = configVariant.toMap();
|
||||
|
||||
// make sure we were passed a URL, otherwise this is an invalid scripted assignment
|
||||
const QString ASSIGNMENT_URL_KEY = "url";
|
||||
QString assignmentURL = jsonObject[ASSIGNMENT_URL_KEY].toString();
|
||||
QString assignmentURL = configMap[ASSIGNMENT_URL_KEY].toString();
|
||||
|
||||
if (!assignmentURL.isEmpty()) {
|
||||
// check the json for a pool
|
||||
const QString ASSIGNMENT_POOL_KEY = "pool";
|
||||
QString assignmentPool = jsonObject[ASSIGNMENT_POOL_KEY].toString();
|
||||
QString assignmentPool = configMap[ASSIGNMENT_POOL_KEY].toString();
|
||||
|
||||
// check for a number of instances, if not passed then default is 1
|
||||
const QString ASSIGNMENT_INSTANCES_KEY = "instances";
|
||||
int numInstances = jsonObject[ASSIGNMENT_INSTANCES_KEY].toInt();
|
||||
int numInstances = configMap[ASSIGNMENT_INSTANCES_KEY].toInt();
|
||||
numInstances = (numInstances == 0 ? 1 : numInstances);
|
||||
|
||||
qDebug() << "Adding a static scripted assignment from" << assignmentURL;
|
||||
|
@ -431,37 +424,34 @@ void DomainServer::createScriptedAssignmentsFromArray(const QJsonArray &configAr
|
|||
}
|
||||
}
|
||||
|
||||
void DomainServer::createStaticAssignmentsForType(Assignment::Type type, const QJsonArray& configArray) {
|
||||
void DomainServer::createStaticAssignmentsForType(Assignment::Type type, const QVariantList &configList) {
|
||||
// we have a string for config for this type
|
||||
qDebug() << "Parsing config for assignment type" << type;
|
||||
|
||||
int configCounter = 0;
|
||||
|
||||
foreach(const QJsonValue& jsonValue, configArray) {
|
||||
if (jsonValue.isObject()) {
|
||||
QJsonObject jsonObject = jsonValue.toObject();
|
||||
foreach(const QVariant& configVariant, configList) {
|
||||
if (configVariant.canConvert(QMetaType::QVariantMap)) {
|
||||
QVariantMap configMap = configVariant.toMap();
|
||||
|
||||
// check the config string for a pool
|
||||
const QString ASSIGNMENT_POOL_KEY = "pool";
|
||||
QString assignmentPool;
|
||||
|
||||
QJsonValue poolValue = jsonObject[ASSIGNMENT_POOL_KEY];
|
||||
if (!poolValue.isUndefined()) {
|
||||
assignmentPool = poolValue.toString();
|
||||
|
||||
jsonObject.remove(ASSIGNMENT_POOL_KEY);
|
||||
QString assignmentPool = configMap.value(ASSIGNMENT_POOL_KEY).toString();
|
||||
if (!assignmentPool.isEmpty()) {
|
||||
configMap.remove(ASSIGNMENT_POOL_KEY);
|
||||
}
|
||||
|
||||
++configCounter;
|
||||
qDebug() << "Type" << type << "config" << configCounter << "=" << jsonObject;
|
||||
qDebug() << "Type" << type << "config" << configCounter << "=" << configMap;
|
||||
|
||||
Assignment* configAssignment = new Assignment(Assignment::CreateCommand, type, assignmentPool);
|
||||
|
||||
// setup the payload as a semi-colon separated list of key = value
|
||||
QStringList payloadStringList;
|
||||
foreach(const QString& payloadKey, jsonObject.keys()) {
|
||||
foreach(const QString& payloadKey, configMap.keys()) {
|
||||
QString dashes = payloadKey.size() == 1 ? "-" : "--";
|
||||
payloadStringList << QString("%1%2 %3").arg(dashes).arg(payloadKey).arg(jsonObject[payloadKey].toString());
|
||||
payloadStringList << QString("%1%2 %3").arg(dashes).arg(payloadKey).arg(configMap[payloadKey].toString());
|
||||
}
|
||||
|
||||
configAssignment->setPayload(payloadStringList.join(' ').toUtf8());
|
||||
|
@ -1435,13 +1425,13 @@ bool DomainServer::isAuthenticatedRequest(HTTPConnection* connection, const QUrl
|
|||
DomainServerWebSessionData sessionData = _cookieSessionHash.value(cookieUUID);
|
||||
QString profileUsername = sessionData.getUsername();
|
||||
|
||||
if (settingsMap.value(ADMIN_USERS_CONFIG_KEY).toJsonValue().toArray().contains(profileUsername)) {
|
||||
if (settingsMap.value(ADMIN_USERS_CONFIG_KEY).toStringList().contains(profileUsername)) {
|
||||
// this is an authenticated user
|
||||
return true;
|
||||
}
|
||||
|
||||
// loop the roles of this user and see if they are in the admin-roles array
|
||||
QJsonArray adminRolesArray = settingsMap.value(ADMIN_ROLES_CONFIG_KEY).toJsonValue().toArray();
|
||||
QStringList adminRolesArray = settingsMap.value(ADMIN_ROLES_CONFIG_KEY).toStringList();
|
||||
|
||||
if (!adminRolesArray.isEmpty()) {
|
||||
foreach(const QString& userRole, sessionData.getRoles()) {
|
||||
|
@ -1573,14 +1563,13 @@ void DomainServer::handleProfileRequestFinished() {
|
|||
// pull the user roles from the response
|
||||
QJsonArray userRolesArray = profileJSON.object()["data"].toObject()["user"].toObject()["roles"].toArray();
|
||||
|
||||
QJsonArray allowedRolesArray = _settingsManager.getSettingsMap()
|
||||
.value(ALLOWED_ROLES_CONFIG_KEY).toJsonValue().toArray();
|
||||
QStringList allowedRolesArray = _settingsManager.getSettingsMap().value(ALLOWED_ROLES_CONFIG_KEY).toStringList();
|
||||
|
||||
QString connectableUsername;
|
||||
QString profileUsername = profileJSON.object()["data"].toObject()["user"].toObject()["username"].toString();
|
||||
|
||||
foreach(const QJsonValue& roleValue, userRolesArray) {
|
||||
if (allowedRolesArray.contains(roleValue)) {
|
||||
if (allowedRolesArray.contains(roleValue.toString())) {
|
||||
// the user has a role that lets them in
|
||||
// set the bool to true and break
|
||||
connectableUsername = profileUsername;
|
||||
|
|
|
@ -83,8 +83,8 @@ private:
|
|||
|
||||
void parseAssignmentConfigs(QSet<Assignment::Type>& excludedTypes);
|
||||
void addStaticAssignmentToAssignmentHash(Assignment* newAssignment);
|
||||
void createScriptedAssignmentsFromArray(const QJsonArray& configArray);
|
||||
void createStaticAssignmentsForType(Assignment::Type type, const QJsonArray& configArray);
|
||||
void createScriptedAssignmentsFromList(const QVariantList& configList);
|
||||
void createStaticAssignmentsForType(Assignment::Type type, const QVariantList& configList);
|
||||
void populateDefaultStaticAssignmentsExcludingTypes(const QSet<Assignment::Type>& excludedTypes);
|
||||
|
||||
SharedAssignmentPointer matchingQueuedAssignmentForCheckIn(const QUuid& checkInUUID, NodeType_t nodeType);
|
||||
|
|
|
@ -2794,6 +2794,7 @@ var editModelID = -1;
|
|||
var dimensionX;
|
||||
var dimensionY;
|
||||
var dimensionZ;
|
||||
var rescalePercentage;
|
||||
|
||||
function handeMenuEvent(menuItem) {
|
||||
print("menuItemEvent() in JS... menuItem=" + menuItem);
|
||||
|
@ -2896,6 +2897,11 @@ function handeMenuEvent(menuItem) {
|
|||
index++;
|
||||
array.push({ label: "", type: "inlineButton", buttonLabel: "Reset to Natural Dimensions", name: "resetDimensions" });
|
||||
index++;
|
||||
array.push({ label: "Rescale Percentage:", value: 100 });
|
||||
rescalePercentage = index;
|
||||
index++;
|
||||
array.push({ label: "", type: "inlineButton", buttonLabel: "Rescale", name: "rescaleDimensions" });
|
||||
index++;
|
||||
|
||||
array.push({ label: "Velocity:", type: "header" });
|
||||
index++;
|
||||
|
@ -3023,6 +3029,27 @@ Window.inlineButtonClicked.connect(function (name) {
|
|||
{ value: propertiesForEditedEntity.naturalDimensions.z.toFixed(decimals), oldIndex: dimensionZ }
|
||||
]);
|
||||
}
|
||||
|
||||
if (name == "rescaleDimensions") {
|
||||
var decimals = 3;
|
||||
var peekValues = editEntityFormArray;
|
||||
Window.peekNonBlockingFormResult(peekValues);
|
||||
var peekX = peekValues[dimensionX].value;
|
||||
var peekY = peekValues[dimensionY].value;
|
||||
var peekZ = peekValues[dimensionZ].value;
|
||||
var peekRescale = peekValues[rescalePercentage].value;
|
||||
var rescaledX = peekX * peekRescale / 100.0;
|
||||
var rescaledY = peekY * peekRescale / 100.0;
|
||||
var rescaledZ = peekZ * peekRescale / 100.0;
|
||||
|
||||
Window.reloadNonBlockingForm([
|
||||
{ value: rescaledX.toFixed(decimals), oldIndex: dimensionX },
|
||||
{ value: rescaledY.toFixed(decimals), oldIndex: dimensionY },
|
||||
{ value: rescaledZ.toFixed(decimals), oldIndex: dimensionZ },
|
||||
{ value: 100, oldIndex: rescalePercentage }
|
||||
]);
|
||||
}
|
||||
|
||||
});
|
||||
Window.nonBlockingFormClosed.connect(function() {
|
||||
array = editEntityFormArray;
|
||||
|
@ -3056,6 +3083,8 @@ Window.nonBlockingFormClosed.connect(function() {
|
|||
properties.dimensions.y = array[index++].value;
|
||||
properties.dimensions.z = array[index++].value;
|
||||
index++; // skip reset button
|
||||
index++; // skip rescale percentage
|
||||
index++; // skip rescale button
|
||||
|
||||
index++; // skip header
|
||||
properties.velocity.x = array[index++].value;
|
||||
|
|
|
@ -55,11 +55,11 @@ bool OculusManager::_programInitialized = false;
|
|||
Camera* OculusManager::_camera = NULL;
|
||||
int OculusManager::_activeEyeIndex = -1;
|
||||
|
||||
glm::vec3 OculusManager::_leftEyePosition;
|
||||
glm::vec3 OculusManager::_rightEyePosition;
|
||||
|
||||
#endif
|
||||
|
||||
glm::vec3 OculusManager::_leftEyePosition = glm::vec3();
|
||||
glm::vec3 OculusManager::_rightEyePosition = glm::vec3();
|
||||
|
||||
void OculusManager::connect() {
|
||||
#ifdef HAVE_LIBOVR
|
||||
ovr_Initialize();
|
||||
|
|
|
@ -46,14 +46,8 @@ public:
|
|||
static void overrideOffAxisFrustum(float& left, float& right, float& bottom, float& top, float& nearVal,
|
||||
float& farVal, glm::vec4& nearClipPlane, glm::vec4& farClipPlane);
|
||||
|
||||
#ifdef HAVE_LIBOVR
|
||||
static glm::vec3 getLeftEyePosition() { return _leftEyePosition; }
|
||||
static glm::vec3 getRightEyePosition() { return _rightEyePosition; }
|
||||
#else
|
||||
static glm::vec3 getLeftEyePosition() { return glm::vec3(); }
|
||||
static glm::vec3 getRightEyePosition() { return glm::vec3(); }
|
||||
#endif
|
||||
|
||||
|
||||
private:
|
||||
#ifdef HAVE_LIBOVR
|
||||
|
@ -105,10 +99,10 @@ private:
|
|||
static bool _programInitialized;
|
||||
static Camera* _camera;
|
||||
static int _activeEyeIndex;
|
||||
#endif
|
||||
|
||||
static glm::vec3 _leftEyePosition;
|
||||
static glm::vec3 _rightEyePosition;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
};
|
||||
|
|
|
@ -127,6 +127,14 @@ QScriptValue WindowScriptingInterface::getNonBlockingFormResult(QScriptValue for
|
|||
return retVal;
|
||||
}
|
||||
|
||||
QScriptValue WindowScriptingInterface::peekNonBlockingFormResult(QScriptValue form) {
|
||||
QScriptValue retVal;
|
||||
QMetaObject::invokeMethod(this, "doPeekNonBlockingFormResult", Qt::BlockingQueuedConnection,
|
||||
Q_RETURN_ARG(QScriptValue, retVal),
|
||||
Q_ARG(QScriptValue, form));
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
/// Display an alert box
|
||||
/// \param const QString& message message to display
|
||||
|
@ -234,6 +242,58 @@ bool WindowScriptingInterface::nonBlockingFormActive() {
|
|||
return _nonBlockingFormActive;
|
||||
}
|
||||
|
||||
QScriptValue WindowScriptingInterface::doPeekNonBlockingFormResult(QScriptValue array) {
|
||||
QScriptValue retVal;
|
||||
|
||||
int e = -1;
|
||||
int d = -1;
|
||||
int c = -1;
|
||||
for (int i = 0; i < _form.property("length").toInt32(); ++i) {
|
||||
QScriptValue item = _form.property(i);
|
||||
QScriptValue value = item.property("value");
|
||||
|
||||
if (item.property("button").toString() != "") {
|
||||
// Nothing to do
|
||||
} else if (item.property("type").toString() == "inlineButton") {
|
||||
// Nothing to do
|
||||
} else if (item.property("type").toString() == "header") {
|
||||
// Nothing to do
|
||||
} else if (item.property("directory").toString() != "") {
|
||||
d += 1;
|
||||
value = _directories.at(d)->property("path").toString();
|
||||
item.setProperty("directory", value);
|
||||
_form.setProperty(i, item);
|
||||
} else if (item.property("options").isArray()) {
|
||||
c += 1;
|
||||
item.setProperty("value", _combos.at(c)->currentText());
|
||||
_form.setProperty(i, item);
|
||||
} else {
|
||||
e += 1;
|
||||
bool ok = true;
|
||||
if (value.isNumber()) {
|
||||
value = _edits.at(e)->text().toDouble(&ok);
|
||||
} else if (value.isString()) {
|
||||
value = _edits.at(e)->text();
|
||||
} else if (value.isBool()) {
|
||||
if (_edits.at(e)->text() == "true") {
|
||||
value = true;
|
||||
} else if (_edits.at(e)->text() == "false") {
|
||||
value = false;
|
||||
} else {
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
if (ok) {
|
||||
item.setProperty("value", value);
|
||||
_form.setProperty(i, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
array = _form;
|
||||
return (_formResult == QDialog::Accepted);
|
||||
}
|
||||
|
||||
QScriptValue WindowScriptingInterface::doGetNonBlockingFormResult(QScriptValue array) {
|
||||
QScriptValue retVal;
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ public slots:
|
|||
void nonBlockingForm(const QString& title, QScriptValue array);
|
||||
void reloadNonBlockingForm(QScriptValue array);
|
||||
QScriptValue getNonBlockingFormResult(QScriptValue array);
|
||||
QScriptValue peekNonBlockingFormResult(QScriptValue array);
|
||||
|
||||
signals:
|
||||
void inlineButtonClicked(const QString& name);
|
||||
|
@ -64,6 +65,7 @@ private slots:
|
|||
void doReloadNonBlockingForm(QScriptValue array);
|
||||
bool nonBlockingFormActive();
|
||||
QScriptValue doGetNonBlockingFormResult(QScriptValue array);
|
||||
QScriptValue doPeekNonBlockingFormResult(QScriptValue array);
|
||||
|
||||
void chooseDirectory();
|
||||
void inlineButtonClicked();
|
||||
|
|
Loading…
Reference in a new issue