Merge pull request #358 from Palakis/request-helpers

Extend WSRequestHandler::hasField() to support field type checking
This commit is contained in:
Stéphane Lepin 2019-08-30 13:50:25 +02:00 committed by GitHub
commit 4bbaa75f41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 4 deletions

View File

@ -226,9 +226,57 @@ HandlerResponse WSRequestHandler::SendResponse(const char* status, obs_data_t* f
return response;
}
bool WSRequestHandler::hasField(QString name) {
if (!data || name.isEmpty() || name.isNull())
bool WSRequestHandler::hasField(QString name, obs_data_type expectedFieldType, obs_data_number_type expectedNumberType) {
if (!data || name.isEmpty() || name.isNull()) {
return false;
}
return obs_data_has_user_value(data, name.toUtf8());
obs_data_item_t* dataItem = obs_data_item_byname(data, name.toUtf8());
if (!dataItem) {
return false;
}
if (expectedFieldType != OBS_DATA_NULL) {
obs_data_type fieldType = obs_data_item_gettype(dataItem);
if (fieldType != expectedFieldType) {
return false;
}
if (fieldType == OBS_DATA_NUMBER && expectedNumberType != OBS_DATA_NUM_INVALID) {
obs_data_number_type numberType = obs_data_item_numtype(dataItem);
if (numberType != expectedNumberType) {
return false;
}
}
}
return true;
}
bool WSRequestHandler::hasBool(QString fieldName) {
return this->hasField(fieldName, OBS_DATA_BOOLEAN);
}
bool WSRequestHandler::hasString(QString fieldName) {
return this->hasField(fieldName, OBS_DATA_STRING);
}
bool WSRequestHandler::hasNumber(QString fieldName, obs_data_number_type expectedNumberType) {
return this->hasField(fieldName, OBS_DATA_NUMBER, expectedNumberType);
}
bool WSRequestHandler::hasInteger(QString fieldName) {
return this->hasNumber(fieldName, OBS_DATA_NUM_INT);
}
bool WSRequestHandler::hasDouble(QString fieldName) {
return this->hasNumber(fieldName, OBS_DATA_NUM_DOUBLE);
}
bool WSRequestHandler::hasArray(QString fieldName) {
return this->hasField(fieldName, OBS_DATA_ARRAY);
}
bool WSRequestHandler::hasObject(QString fieldName) {
return this->hasField(fieldName, OBS_DATA_OBJECT);
}

View File

@ -41,7 +41,16 @@ class WSRequestHandler : public QObject {
explicit WSRequestHandler(ConnectionProperties& connProperties);
~WSRequestHandler();
std::string processIncomingMessage(std::string& textMessage);
bool hasField(QString name);
bool hasField(QString fieldName, obs_data_type expectedFieldType = OBS_DATA_NULL,
obs_data_number_type expectedNumberType = OBS_DATA_NUM_INVALID);
bool hasBool(QString fieldName);
bool hasString(QString fieldName);
bool hasNumber(QString fieldName, obs_data_number_type expectedNumberType = OBS_DATA_NUM_INVALID);
bool hasInteger(QString fieldName);
bool hasDouble(QString fieldName);
bool hasArray(QString fieldName);
bool hasObject(QString fieldName);
HandlerResponse SendOKResponse(obs_data_t* additionalFields = nullptr);
HandlerResponse SendErrorResponse(QString errorMessage);