diff --git a/WSRequestHandler.cpp b/WSRequestHandler.cpp index 36b0da22..241231ff 100644 --- a/WSRequestHandler.cpp +++ b/WSRequestHandler.cpp @@ -52,8 +52,16 @@ WSRequestHandler::WSRequestHandler(QWebSocket *client) : messageMap["SetVolume"] = WSRequestHandler::HandleSetVolume; messageMap["GetVolume"] = WSRequestHandler::HandleGetVolume; - messageMap["ToggleMute"] = WSRequestHandler::ToggleMute; - messageMap["SetMute"] = WSRequestHandler::SetMute; + messageMap["ToggleMute"] = WSRequestHandler::HandleToggleMute; + messageMap["SetMute"] = WSRequestHandler::HandleSetMute; + + messageMap["SetCurrentSceneCollection"] = WSRequestHandler::HandleSetCurrentSceneCollection; + messageMap["GetCurrentSceneCollection"] = WSRequestHandler::HandleGetCurrentSceneCollection; + messageMap["ListSceneCollections"] = WSRequestHandler::HandleListSceneCollections; + + messageMap["SetCurrentProfile"] = WSRequestHandler::HandleSetCurrentProfile; + messageMap["GetCurrentProfile"] = WSRequestHandler::HandleGetCurrentProfile; + messageMap["ListProfiles"] = WSRequestHandler::HandleListProfiles; authNotRequired.insert("GetVersion"); authNotRequired.insert("GetAuthRequired"); @@ -398,26 +406,28 @@ void WSRequestHandler::HandleSetVolume(WSRequestHandler *owner) void WSRequestHandler::HandleGetVolume(WSRequestHandler *owner) { const char *item_name = obs_data_get_string(owner->_requestData, "source"); - if (item_name == NULL) + + if (item_name) + { + obs_source_t* item = obs_get_source_by_name(item_name); + + obs_data_t* response = obs_data_create(); + obs_data_set_string(response, "name", item_name); + obs_data_set_double(response, "volume", obs_source_get_volume(item)); + obs_data_set_bool(response, "muted", obs_source_muted(item)); + + owner->SendOKResponse(response); + + obs_data_release(response); + obs_source_release(item); + } + else { owner->SendErrorResponse("invalid request parameters"); - return; } - - obs_source_t* item = obs_get_source_by_name(item_name); - - obs_data_t* response = obs_data_create(); - obs_data_set_string(response, "name", item_name); - obs_data_set_double(response, "volume", obs_source_get_volume(item)); - obs_data_set_bool(response, "muted", obs_source_muted(item)); - - owner->SendOKResponse(response); - - obs_data_release(response); - obs_source_release(item); } -void WSRequestHandler::ToggleMute(WSRequestHandler *owner) { +void WSRequestHandler::HandleToggleMute(WSRequestHandler *owner) { const char *item_name = obs_data_get_string(owner->_requestData, "source"); if (item_name == NULL) { @@ -438,7 +448,7 @@ void WSRequestHandler::ToggleMute(WSRequestHandler *owner) { obs_source_release(item); } -void WSRequestHandler::SetMute(WSRequestHandler *owner) +void WSRequestHandler::HandleSetMute(WSRequestHandler *owner) { const char *item_name = obs_data_get_string(owner->_requestData, "source"); bool mute = obs_data_get_bool(owner->_requestData, "mute"); @@ -467,6 +477,7 @@ void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler *owner) if (!item_name) { owner->SendErrorResponse("invalid request parameters"); + return; } vec2 item_position = {0}; @@ -497,6 +508,7 @@ void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler *owner) if (!item_name) { owner->SendErrorResponse("invalid request parameters"); + return; } vec2 scale; @@ -524,6 +536,68 @@ void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler *owner) obs_source_release(current_scene); } +void WSRequestHandler::HandleSetCurrentSceneCollection(WSRequestHandler *owner) +{ + const char* scene_collection = obs_data_get_string(owner->_requestData, "sc-name"); + + if (scene_collection) + { + // TODO : Check if profile exists + obs_frontend_set_current_scene_collection(scene_collection); + owner->SendOKResponse(); + } + else + { + owner->SendErrorResponse("invalid request parameters"); + } +} + +void WSRequestHandler::HandleGetCurrentSceneCollection(WSRequestHandler *owner) +{ + obs_data_t *response = obs_data_create(); + obs_data_set_string(response, "sc-name", obs_frontend_get_current_scene_collection()); + + owner->SendOKResponse(response); + + obs_data_release(response); +} + +void WSRequestHandler::HandleListSceneCollections(WSRequestHandler *owner) +{ + // TODO +} + +void WSRequestHandler::HandleSetCurrentProfile(WSRequestHandler *owner) +{ + const char* profile_name = obs_data_get_string(owner->_requestData, "profile-name"); + + if (profile_name) + { + // TODO : check if profile exists + obs_frontend_set_current_profile(profile_name); + owner->SendOKResponse(); + } + else + { + owner->SendErrorResponse("invalid request parameters"); + } +} + +void WSRequestHandler::HandleGetCurrentProfile(WSRequestHandler *owner) +{ + obs_data_t *response = obs_data_create(); + obs_data_set_string(response, "profile-name", obs_frontend_get_current_profile()); + + owner->SendOKResponse(response); + + obs_data_release(response); +} + +void WSRequestHandler::HandleListProfiles(WSRequestHandler *owner) +{ + // TODO +} + void WSRequestHandler::ErrNotImplemented(WSRequestHandler *owner) { owner->SendErrorResponse("not implemented"); diff --git a/WSRequestHandler.h b/WSRequestHandler.h index 91251da4..fa91002c 100644 --- a/WSRequestHandler.h +++ b/WSRequestHandler.h @@ -68,8 +68,16 @@ class WSRequestHandler : public QObject static void HandleSetVolume(WSRequestHandler *owner); static void HandleGetVolume(WSRequestHandler *owner); - static void ToggleMute(WSRequestHandler *owner); - static void SetMute(WSRequestHandler *owner); + static void HandleToggleMute(WSRequestHandler *owner); + static void HandleSetMute(WSRequestHandler *owner); + + static void HandleSetCurrentSceneCollection(WSRequestHandler *owner); + static void HandleGetCurrentSceneCollection(WSRequestHandler *owner); + static void HandleListSceneCollections(WSRequestHandler *owner); + + static void HandleSetCurrentProfile(WSRequestHandler *owner); + static void HandleGetCurrentProfile(WSRequestHandler *owner); + static void HandleListProfiles(WSRequestHandler *owner); }; #endif // WSPROTOCOL_H