diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 77411461..83cd4041 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -70,11 +70,13 @@ const QHash WSRequestHandler::messageMap { { "StartStreaming", &WSRequestHandler::StartStreaming }, { "StopStreaming", &WSRequestHandler::StopStreaming }, + { "GetRecordingStatus", &WSRequestHandler::GetRecordingStatus }, { "StartRecording", &WSRequestHandler::StartRecording }, { "StopRecording", &WSRequestHandler::StopRecording }, { "PauseRecording", &WSRequestHandler::PauseRecording }, { "ResumeRecording", &WSRequestHandler::ResumeRecording }, + { "GetReplayBufferStatus", &WSRequestHandler::GetReplayBufferStatus }, { "StartStopReplayBuffer", &WSRequestHandler::StartStopReplayBuffer }, { "StartReplayBuffer", &WSRequestHandler::StartReplayBuffer }, { "StopReplayBuffer", &WSRequestHandler::StopReplayBuffer }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 2a33c8f4..d87bc803 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -87,11 +87,13 @@ class WSRequestHandler { RpcResponse StartStreaming(const RpcRequest&); RpcResponse StopStreaming(const RpcRequest&); + RpcResponse GetRecordingStatus(const RpcRequest&); RpcResponse StartRecording(const RpcRequest&); RpcResponse StopRecording(const RpcRequest&); RpcResponse PauseRecording(const RpcRequest&); RpcResponse ResumeRecording(const RpcRequest&); + RpcResponse GetReplayBufferStatus(const RpcRequest&); RpcResponse StartStopReplayBuffer(const RpcRequest&); RpcResponse StartReplayBuffer(const RpcRequest&); RpcResponse StopReplayBuffer(const RpcRequest&); diff --git a/src/WSRequestHandler_Recording.cpp b/src/WSRequestHandler_Recording.cpp index df2ed4a0..d58f60c7 100644 --- a/src/WSRequestHandler_Recording.cpp +++ b/src/WSRequestHandler_Recording.cpp @@ -1,8 +1,10 @@ +#include "obs-websocket.h" #include "WSRequestHandler.h" #include #include #include "Utils.h" +#include "WSEvents.h" RpcResponse ifCanPause(const RpcRequest& request, std::function callback) { @@ -13,6 +15,33 @@ RpcResponse ifCanPause(const RpcRequest& request, std::function c return callback(); } + /** + * Get current recording status. + * + * @return {boolean} `isRecording` Current recording status. + * @return {boolean} `isRecordingPaused` Whether the recording is paused or not. + * @return {String (optional)} `recordTimecode` Time elapsed since recording started (only present if currently recording). + * + * @api requests + * @name GetRecordingStatus + * @category recording + * @since unreleased + */ +RpcResponse WSRequestHandler::GetRecordingStatus(const RpcRequest& request) { + auto events = GetEventsSystem(); + + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "isRecording", obs_frontend_recording_active()); + obs_data_set_bool(data, "isRecordingPaused", obs_frontend_recording_paused()); + + if (obs_frontend_recording_active()) { + QString recordingTimecode = events->getRecordingTimecode(); + obs_data_set_string(data, "recordTimecode", recordingTimecode.toUtf8().constData()); + } + + return request.success(data); +} + /** * Toggle recording on or off. * diff --git a/src/WSRequestHandler_ReplayBuffer.cpp b/src/WSRequestHandler_ReplayBuffer.cpp index 510b8f05..be860584 100644 --- a/src/WSRequestHandler_ReplayBuffer.cpp +++ b/src/WSRequestHandler_ReplayBuffer.cpp @@ -1,7 +1,27 @@ +#include "obs-websocket.h" +#include "WSEvents.h" #include "Utils.h" #include "WSRequestHandler.h" + + /** + * Get the status of the OBS replay buffer. + * + * @return {boolean} `isReplayBufferActive` Current recording status. + * + * @api requests + * @name GetReplayBufferStatus + * @category replay buffer + * @since unreleased + */ +RpcResponse WSRequestHandler::GetReplayBufferStatus(const RpcRequest& request) { + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "isReplayBufferActive", obs_frontend_replay_buffer_active()); + + return request.success(data); +} + /** * Toggle the Replay Buffer on/off. *