diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 0ad58204..0eec2529 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -43,6 +43,7 @@ const QHash WSRequestHandler::messageMap{ { "TriggerHotkeyByName", &WSRequestHandler::TriggerHotkeyByName }, { "TriggerHotkeyBySequence", &WSRequestHandler::TriggerHotkeyBySequence }, { "ExecuteBatch", &WSRequestHandler::ExecuteBatch }, + { "Sleep", &WSRequestHandler::Sleep }, // Category: Media Control { "PlayPauseMedia", &WSRequestHandler::PlayPauseMedia }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 15f189e4..82aa5ee3 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -61,6 +61,7 @@ class WSRequestHandler { RpcResponse TriggerHotkeyByName(const RpcRequest&); RpcResponse TriggerHotkeyBySequence(const RpcRequest&); RpcResponse ExecuteBatch(const RpcRequest&); + RpcResponse Sleep(const RpcRequest&); // Category: Media Control RpcResponse PlayPauseMedia(const RpcRequest&); diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp index 39824735..b08023d0 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -474,3 +474,24 @@ RpcResponse WSRequestHandler::ExecuteBatch(const RpcRequest& request) { obs_data_set_array(response, "results", results); return request.success(response); } + +/** + * Waits for the specified duration. Designed to be used in `ExecuteBatch` operations. + * + * @param {int} `sleepMillis` Delay in milliseconds to wait before continuing. + * + * @api requests + * @name Sleep + * @category general + * @since unreleased + */ +RpcResponse WSRequestHandler::Sleep(const RpcRequest& request) { + if (!request.hasField("sleepMillis")) { + return request.failed("missing request parameters"); + } + + long long sleepMillis = obs_data_get_int(request.parameters(), "sleepMillis"); + std::this_thread::sleep_for(std::chrono::milliseconds(sleepMillis)); + + return request.success(); +}