diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 4af1ad14..932b7e4b 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -226,9 +226,42 @@ 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) { + 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; + } + } + + 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) { + return this->hasField(fieldName, OBS_DATA_NUMBER); +} + +bool WSRequestHandler::hasArray(QString fieldName) { + return this->hasField(fieldName, OBS_DATA_ARRAY); +} + +bool WSRequestHandler::hasObject(QString fieldName) { + return this->hasField(fieldName, OBS_DATA_OBJECT); } diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 4dea020b..372f8c36 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -41,7 +41,13 @@ 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); + bool hasBool(QString fieldName); + bool hasString(QString fieldName); + bool hasNumber(QString fieldName); + bool hasArray(QString fieldName); + bool hasObject(QString fieldName); HandlerResponse SendOKResponse(obs_data_t* additionalFields = nullptr); HandlerResponse SendErrorResponse(QString errorMessage);