RequestHandler: Move GetInputList logic to Utils

This commit is contained in:
tt2468 2021-06-16 01:39:04 -07:00
parent 4d77927ceb
commit 8ad009ba51
5 changed files with 61 additions and 31 deletions

View File

@ -39,6 +39,7 @@ const std::map<std::string, RequestMethodHandler> RequestHandler::_handlerMap
// Inputs
{"GetInputList", &RequestHandler::GetInputList},
{"GetInputKindList", &RequestHandler::GetInputKindList},
};
RequestResult RequestHandler::ProcessRequest(const Request& request)

View File

@ -53,6 +53,7 @@ class RequestHandler {
// Inputs
RequestResult GetInputList(const Request&);
RequestResult GetInputKindList(const Request&);
static const std::map<std::string, RequestMethodHandler> _handlerMap;
};

View File

@ -2,14 +2,9 @@
#include "../plugin-macros.generated.h"
struct EnumInputInfo {
std::string inputKind;
std::vector<json> inputs;
};
RequestResult RequestHandler::GetInputList(const Request& request)
{
EnumInputInfo inputInfo;
std::string inputKind;
if (request.RequestData.contains("inputKind") && !request.RequestData["inputKind"].is_null()) {
RequestStatus::RequestStatus statusCode;
@ -18,33 +13,29 @@ RequestResult RequestHandler::GetInputList(const Request& request)
return RequestResult::Error(statusCode, comment);
}
inputInfo.inputKind = request.RequestData["inputKind"];
inputKind = request.RequestData["inputKind"];
}
auto inputEnumProc = [](void *param, obs_source_t *input) {
// Sanity check in case the API changes
if (obs_source_get_type(input) != OBS_SOURCE_TYPE_INPUT)
return true;
auto inputInfo = reinterpret_cast<EnumInputInfo*>(param);
std::string inputKind = obs_source_get_id(input);
if (!inputInfo->inputKind.empty() && inputInfo->inputKind != inputKind)
return true;
json inputJson;
inputJson["inputName"] = obs_source_get_name(input);
inputJson["inputKind"] = inputKind;
inputJson["unversionedInputKind"] = obs_source_get_unversioned_id(input);
inputInfo->inputs.push_back(inputJson);
return true;
};
// Actually enumerates only public inputs, despite the name
obs_enum_sources(inputEnumProc, &inputInfo);
json responseData;
responseData["inputs"] = inputInfo.inputs;
responseData["inputs"] = Utils::Obs::ListHelper::GetInputList(inputKind);
return RequestResult::Success(responseData);
}
RequestResult RequestHandler::GetInputKindList(const Request& request)
{
bool unversioned = false;
if (request.RequestData.contains("unversioned") && !request.RequestData["unversioned"].is_null()) {
RequestStatus::RequestStatus statusCode;
std::string comment;
if (!request.ValidateBoolean("unversioned", statusCode, comment)) {
return RequestResult::Error(statusCode, comment);
}
unversioned = request.RequestData["unversioned"];
}
json responseData;
responseData["inputKinds"] = Utils::Obs::ListHelper::GetInputKindList(unversioned);
return RequestResult::Success(responseData);
}

View File

@ -231,6 +231,42 @@ std::vector<json> Utils::Obs::ListHelper::GetTransitionList()
return ret;
}
struct EnumInputInfo {
std::string inputKind;
std::vector<json> inputs;
};
std::vector<json> Utils::Obs::ListHelper::GetInputList(std::string inputKind)
{
EnumInputInfo inputInfo;
inputInfo.inputKind = inputKind;
auto inputEnumProc = [](void *param, obs_source_t *input) {
// Sanity check in case the API changes
if (obs_source_get_type(input) != OBS_SOURCE_TYPE_INPUT)
return true;
auto inputInfo = reinterpret_cast<EnumInputInfo*>(param);
std::string inputKind = obs_source_get_id(input);
if (!inputInfo->inputKind.empty() && inputInfo->inputKind != inputKind)
return true;
json inputJson;
inputJson["inputName"] = obs_source_get_name(input);
inputJson["inputKind"] = inputKind;
inputJson["unversionedInputKind"] = obs_source_get_unversioned_id(input);
inputInfo->inputs.push_back(inputJson);
return true;
};
// Actually enumerates only public inputs, despite the name
obs_enum_sources(inputEnumProc, &inputInfo);
return inputInfo.inputs;
}
std::vector<std::string> Utils::Obs::ListHelper::GetInputKindList(bool unversioned)
{
std::vector<std::string> ret;

View File

@ -48,6 +48,7 @@ namespace Utils {
std::vector<json> GetSceneList();
std::vector<json> GetSceneItemList(obs_scene_t *scene, bool basic = false);
std::vector<json> GetTransitionList();
std::vector<json> GetInputList(std::string inputKind = "");
std::vector<std::string> GetInputKindList(bool unversioned = false);
}