mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
RequestHandler: Move GetInputList logic to Utils
This commit is contained in:
parent
4d77927ceb
commit
8ad009ba51
@ -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)
|
||||
|
@ -53,6 +53,7 @@ class RequestHandler {
|
||||
|
||||
// Inputs
|
||||
RequestResult GetInputList(const Request&);
|
||||
RequestResult GetInputKindList(const Request&);
|
||||
|
||||
static const std::map<std::string, RequestMethodHandler> _handlerMap;
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user