From 8ad009ba513fcdf2862f326948385d5b327a878f Mon Sep 17 00:00:00 2001 From: tt2468 Date: Wed, 16 Jun 2021 01:39:04 -0700 Subject: [PATCH] RequestHandler: Move GetInputList logic to Utils --- src/requesthandler/RequestHandler.cpp | 1 + src/requesthandler/RequestHandler.h | 1 + src/requesthandler/RequestHandler_Inputs.cpp | 53 ++++++++------------ src/utils/Obs.cpp | 36 +++++++++++++ src/utils/Utils.h | 1 + 5 files changed, 61 insertions(+), 31 deletions(-) diff --git a/src/requesthandler/RequestHandler.cpp b/src/requesthandler/RequestHandler.cpp index 6db28601..f436f385 100644 --- a/src/requesthandler/RequestHandler.cpp +++ b/src/requesthandler/RequestHandler.cpp @@ -39,6 +39,7 @@ const std::map RequestHandler::_handlerMap // Inputs {"GetInputList", &RequestHandler::GetInputList}, + {"GetInputKindList", &RequestHandler::GetInputKindList}, }; RequestResult RequestHandler::ProcessRequest(const Request& request) diff --git a/src/requesthandler/RequestHandler.h b/src/requesthandler/RequestHandler.h index d4a1a3ef..27c7b284 100644 --- a/src/requesthandler/RequestHandler.h +++ b/src/requesthandler/RequestHandler.h @@ -53,6 +53,7 @@ class RequestHandler { // Inputs RequestResult GetInputList(const Request&); + RequestResult GetInputKindList(const Request&); static const std::map _handlerMap; }; diff --git a/src/requesthandler/RequestHandler_Inputs.cpp b/src/requesthandler/RequestHandler_Inputs.cpp index 2ae5b7c0..8fbc1d75 100644 --- a/src/requesthandler/RequestHandler_Inputs.cpp +++ b/src/requesthandler/RequestHandler_Inputs.cpp @@ -2,14 +2,9 @@ #include "../plugin-macros.generated.h" -struct EnumInputInfo { - std::string inputKind; - std::vector 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(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); } diff --git a/src/utils/Obs.cpp b/src/utils/Obs.cpp index 3744a774..2d1c675e 100644 --- a/src/utils/Obs.cpp +++ b/src/utils/Obs.cpp @@ -231,6 +231,42 @@ std::vector Utils::Obs::ListHelper::GetTransitionList() return ret; } +struct EnumInputInfo { + std::string inputKind; + std::vector inputs; +}; + +std::vector 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(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 Utils::Obs::ListHelper::GetInputKindList(bool unversioned) { std::vector ret; diff --git a/src/utils/Utils.h b/src/utils/Utils.h index 74b6d46e..737fa1d9 100644 --- a/src/utils/Utils.h +++ b/src/utils/Utils.h @@ -48,6 +48,7 @@ namespace Utils { std::vector GetSceneList(); std::vector GetSceneItemList(obs_scene_t *scene, bool basic = false); std::vector GetTransitionList(); + std::vector GetInputList(std::string inputKind = ""); std::vector GetInputKindList(bool unversioned = false); }