diff --git a/WSEvents.cpp b/WSEvents.cpp index 3bf6d5b0..76a076a5 100644 --- a/WSEvents.cpp +++ b/WSEvents.cpp @@ -260,7 +260,6 @@ const char* WSEvents::GetRecordingTimecode() { } void WSEvents::OnSceneChange() { - // Implements an existing update type from bilhamil's OBS Remote obs_data_t* data = obs_data_create(); obs_source_t* current_scene = obs_frontend_get_current_scene(); @@ -332,7 +331,6 @@ void WSEvents::OnProfileListChange() { } void WSEvents::OnStreamStarting() { - // Implements an existing update type from bilhamil's OBS Remote obs_data_t* data = obs_data_create(); obs_data_set_bool(data, "preview-only", false); @@ -342,14 +340,12 @@ void WSEvents::OnStreamStarting() { } void WSEvents::OnStreamStarted() { - // New update type specific to OBS Studio _stream_starttime = os_gettime_ns(); _lastBytesSent = 0; broadcastUpdate("StreamStarted"); } void WSEvents::OnStreamStopping() { - // Implements an existing update type from bilhamil's OBS Remote obs_data_t* data = obs_data_create(); obs_data_set_bool(data, "preview-only", false); @@ -359,35 +355,29 @@ void WSEvents::OnStreamStopping() { } void WSEvents::OnStreamStopped() { - // New update type specific to OBS Studio _stream_starttime = 0; broadcastUpdate("StreamStopped"); } void WSEvents::OnRecordingStarting() { - // New update type specific to OBS Studio broadcastUpdate("RecordingStarting"); } void WSEvents::OnRecordingStarted() { - // New update type specific to OBS Studio _rec_starttime = os_gettime_ns(); broadcastUpdate("RecordingStarted"); } void WSEvents::OnRecordingStopping() { - // New update type specific to OBS Studio broadcastUpdate("RecordingStopping"); } void WSEvents::OnRecordingStopped() { - // New update type specific to OBS Studio _rec_starttime = 0; broadcastUpdate("RecordingStopped"); } void WSEvents::OnExit() { - // New update type specific to OBS Studio broadcastUpdate("Exiting"); } diff --git a/WSRequestHandler.cpp b/WSRequestHandler.cpp index 0ad42083..3663d568 100644 --- a/WSRequestHandler.cpp +++ b/WSRequestHandler.cpp @@ -25,21 +25,17 @@ with this program. If not, see #include "Utils.h" #include -bool str_valid(const char* str) -{ +bool str_valid(const char* str) { return (str != nullptr && strlen(str) > 0); } - obs_service_t* WSRequestHandler::_service = nullptr; WSRequestHandler::WSRequestHandler(QWebSocket* client) : _messageId(0), _requestType(""), - data(nullptr) -{ - _client = client; - + data(nullptr), + _client(client) { messageMap["GetVersion"] = WSRequestHandler::HandleGetVersion; messageMap["GetAuthRequired"] = WSRequestHandler::HandleGetAuthRequired; messageMap["Authenticate"] = WSRequestHandler::HandleAuthenticate; @@ -109,14 +105,12 @@ WSRequestHandler::WSRequestHandler(QWebSocket* client) : authNotRequired.insert("Authenticate"); } -void WSRequestHandler::processIncomingMessage(QString textMessage) -{ +void WSRequestHandler::processIncomingMessage(QString textMessage) { QByteArray msgData = textMessage.toUtf8(); const char* msg = msgData; data = obs_data_create_from_json(msg); - if (!data) - { + if (!data) { if (!msg) msg = ""; @@ -125,12 +119,12 @@ void WSRequestHandler::processIncomingMessage(QString textMessage) return; } - if (Config::Current()->DebugEnabled) + if (Config::Current()->DebugEnabled) { blog(LOG_DEBUG, "Request >> '%s'", msg); + } if (!hasField("request-type") || - !hasField("message-id")) - { + !hasField("message-id")) { SendErrorResponse("missing request parameters"); return; } @@ -140,8 +134,7 @@ void WSRequestHandler::processIncomingMessage(QString textMessage) if (Config::Current()->AuthRequired && (_client->property(PROP_AUTHENTICATED).toBool() == false) - && (authNotRequired.find(_requestType) == authNotRequired.end())) - { + && (authNotRequired.find(_requestType) == authNotRequired.end())) { SendErrorResponse("Not Authenticated"); return; } @@ -156,12 +149,10 @@ void WSRequestHandler::processIncomingMessage(QString textMessage) obs_data_release(data); } -WSRequestHandler::~WSRequestHandler() -{ +WSRequestHandler::~WSRequestHandler() { } -void WSRequestHandler::SendOKResponse(obs_data_t* additionalFields) -{ +void WSRequestHandler::SendOKResponse(obs_data_t* additionalFields) { obs_data_t* response = obs_data_create(); obs_data_set_string(response, "status", "ok"); obs_data_set_string(response, "message-id", _messageId); @@ -172,8 +163,7 @@ void WSRequestHandler::SendOKResponse(obs_data_t* additionalFields) SendResponse(response); } -void WSRequestHandler::SendErrorResponse(const char* errorMessage) -{ +void WSRequestHandler::SendErrorResponse(const char* errorMessage) { obs_data_t* response = obs_data_create(); obs_data_set_string(response, "status", "error"); obs_data_set_string(response, "error", errorMessage); @@ -182,8 +172,7 @@ void WSRequestHandler::SendErrorResponse(const char* errorMessage) SendResponse(response); } -void WSRequestHandler::SendResponse(obs_data_t* response) -{ +void WSRequestHandler::SendResponse(obs_data_t* response) { const char *json = obs_data_get_json(response); _client->sendTextMessage(json); if (Config::Current()->DebugEnabled) @@ -192,16 +181,14 @@ void WSRequestHandler::SendResponse(obs_data_t* response) obs_data_release(response); } -bool WSRequestHandler::hasField(const char* name) -{ +bool WSRequestHandler::hasField(const char* name) { if (!name || !data) return false; return obs_data_has_user_value(data, name); } -void WSRequestHandler::HandleGetVersion(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetVersion(WSRequestHandler* req) { const char* obs_version = Utils::OBSVersionString(); obs_data_t* data = obs_data_create(); @@ -215,15 +202,13 @@ void WSRequestHandler::HandleGetVersion(WSRequestHandler* req) bfree((void*)obs_version); } -void WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) { bool authRequired = Config::Current()->AuthRequired; obs_data_t* data = obs_data_create(); obs_data_set_bool(data, "authRequired", authRequired); - if (authRequired) - { + if (authRequired) { obs_data_set_string(data, "challenge", Config::Current()->SessionChallenge); obs_data_set_string(data, "salt", @@ -235,37 +220,29 @@ void WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) obs_data_release(data); } -void WSRequestHandler::HandleAuthenticate(WSRequestHandler* req) -{ - if (!req->hasField("auth")) - { +void WSRequestHandler::HandleAuthenticate(WSRequestHandler* req) { + if (!req->hasField("auth")) { req->SendErrorResponse("missing request parameters"); return; } const char* auth = obs_data_get_string(req->data, "auth"); - if (!str_valid(auth)) - { + if (!str_valid(auth)) { req->SendErrorResponse("auth not specified!"); return; } if ((req->_client->property(PROP_AUTHENTICATED).toBool() == false) - && Config::Current()->CheckAuth(auth)) - { + && Config::Current()->CheckAuth(auth)) { req->_client->setProperty(PROP_AUTHENTICATED, true); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("Authentication Failed."); } } -void WSRequestHandler::HandleSetCurrentScene(WSRequestHandler* req) -{ - if (!req->hasField("scene-name")) - { +void WSRequestHandler::HandleSetCurrentScene(WSRequestHandler* req) { + if (!req->hasField("scene-name")) { req->SendErrorResponse("missing request parameters"); return; } @@ -273,21 +250,17 @@ void WSRequestHandler::HandleSetCurrentScene(WSRequestHandler* req) const char* sceneName = obs_data_get_string(req->data, "scene-name"); obs_source_t* source = obs_get_source_by_name(sceneName); - if (source) - { + if (source) { obs_frontend_set_current_scene(source); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("requested scene does not exist"); } obs_source_release(source); } -void WSRequestHandler::HandleGetCurrentScene(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetCurrentScene(WSRequestHandler* req) { obs_source_t* current_scene = obs_frontend_get_current_scene(); const char* name = obs_source_get_name(current_scene); @@ -304,8 +277,7 @@ void WSRequestHandler::HandleGetCurrentScene(WSRequestHandler* req) obs_source_release(current_scene); } -void WSRequestHandler::HandleGetSceneList(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetSceneList(WSRequestHandler* req) { obs_source_t* current_scene = obs_frontend_get_current_scene(); obs_data_array_t* scenes = Utils::GetScenes(); @@ -321,11 +293,9 @@ void WSRequestHandler::HandleGetSceneList(WSRequestHandler* req) obs_source_release(current_scene); } -void WSRequestHandler::HandleSetSceneItemRender(WSRequestHandler* req) -{ +void WSRequestHandler::HandleSetSceneItemRender(WSRequestHandler* req) { if (!req->hasField("source") || - !req->hasField("render")) - { + !req->hasField("render")) { req->SendErrorResponse("missing request parameters"); return; } @@ -333,51 +303,44 @@ void WSRequestHandler::HandleSetSceneItemRender(WSRequestHandler* req) const char* itemName = obs_data_get_string(req->data, "source"); bool isVisible = obs_data_get_bool(req->data, "render"); - if (!itemName) - { + if (!itemName) { req->SendErrorResponse("invalid request parameters"); return; } const char* sceneName = obs_data_get_string(req->data, "scene-name"); obs_source_t* scene = Utils::GetSceneFromNameOrCurrent(sceneName); - if (scene == NULL) { + if (!scene) { req->SendErrorResponse("requested scene doesn't exist"); return; } obs_sceneitem_t* sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem != NULL) - { + if (sceneItem) { obs_sceneitem_set_visible(sceneItem, isVisible); obs_sceneitem_release(sceneItem); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene); } -void WSRequestHandler::HandleGetStreamingStatus(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetStreamingStatus(WSRequestHandler* req) { obs_data_t* data = obs_data_create(); obs_data_set_bool(data, "streaming", obs_frontend_streaming_active()); obs_data_set_bool(data, "recording", obs_frontend_recording_active()); obs_data_set_bool(data, "preview-only", false); const char* tc = nullptr; - if (obs_frontend_streaming_active()) - { + if (obs_frontend_streaming_active()) { tc = WSEvents::Instance->GetStreamingTimecode(); obs_data_set_string(data, "stream-timecode", tc); bfree((void*)tc); } - if (obs_frontend_recording_active()) - { + if (obs_frontend_recording_active()) { tc = WSEvents::Instance->GetRecordingTimecode(); obs_data_set_string(data, "rec-timecode", tc); bfree((void*)tc); @@ -387,16 +350,11 @@ void WSRequestHandler::HandleGetStreamingStatus(WSRequestHandler* req) obs_data_release(data); } -void WSRequestHandler::HandleStartStopStreaming(WSRequestHandler* req) -{ +void WSRequestHandler::HandleStartStopStreaming(WSRequestHandler* req) { if (obs_frontend_streaming_active()) - { HandleStopStreaming(req); - } else - { HandleStartStreaming(req); - } } void WSRequestHandler::HandleStartStopRecording(WSRequestHandler* req) @@ -411,42 +369,35 @@ void WSRequestHandler::HandleStartStopRecording(WSRequestHandler* req) void WSRequestHandler::HandleStartStreaming(WSRequestHandler* req) { - if (obs_frontend_streaming_active() == false) - { + if (obs_frontend_streaming_active() == false) { obs_data_t* streamData = obs_data_get_obj(req->data, "stream"); obs_service_t* currentService = nullptr; - if (streamData) - { - currentService = obs_frontend_get_streaming_service(); + if (streamData) { + currentService = obs_frontend_get_streaming_service(); obs_service_addref(currentService); obs_service_t* service = _service; const char* currentServiceType = obs_service_get_type(currentService); - const char* requestedType = obs_data_has_user_value(streamData, "type") ? obs_data_get_string(streamData, "type") : currentServiceType; - const char* serviceType = service != nullptr ? obs_service_get_type(service) : currentServiceType; + const char* requestedType = + obs_data_has_user_value(streamData, "type") ? obs_data_get_string(streamData, "type") : currentServiceType; + const char* serviceType = + service != nullptr ? obs_service_get_type(service) : currentServiceType; obs_data_t* settings = obs_data_get_obj(streamData, "settings"); - obs_data_t* metadata = obs_data_get_obj(streamData, "metadata"); QString* query = Utils::ParseDataToQueryString(metadata); - if (strcmp(requestedType, serviceType) != 0) - { - if (settings) - { + if (strcmp(requestedType, serviceType) != 0) { + if (settings) { obs_service_release(service); service = nullptr; //different type so we can't reuse the existing service instance - } - else - { + } else { req->SendErrorResponse("Service type requested does not match currently configured type and no 'settings' were provided"); return; } - } - else - { + } else { //if type isn't changing we should overlay the settings we got with the existing settings obs_data_t* existingSettings = obs_service_get_settings(currentService); obs_data_t* newSettings = obs_data_create(); //by doing this you can send a request to the websocket that only contains a setting you want to change instead of having to do a get and then change them @@ -460,8 +411,7 @@ void WSRequestHandler::HandleStartStreaming(WSRequestHandler* req) obs_data_release(existingSettings); } - if (service == nullptr) - { //create the new custom service setup by the websocket + if (!service){ service = obs_service_create(requestedType, "websocket_custom_service", settings, nullptr); } @@ -489,6 +439,7 @@ void WSRequestHandler::HandleStartStreaming(WSRequestHandler* req) obs_service_update(service, settings); obs_data_release(settings); obs_data_release(metadata); + _service = service; obs_frontend_set_streaming_service(_service); } else if (_service != nullptr) { @@ -504,61 +455,45 @@ void WSRequestHandler::HandleStartStreaming(WSRequestHandler* req) req->SendOKResponse(); obs_service_release(currentService); - } - else - { + } else { req->SendErrorResponse("streaming already active"); } } -void WSRequestHandler::HandleStopStreaming(WSRequestHandler* req) -{ - if (obs_frontend_streaming_active() == true) - { +void WSRequestHandler::HandleStopStreaming(WSRequestHandler* req) { + if (obs_frontend_streaming_active() == true) { obs_frontend_streaming_stop(); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("streaming not active"); } } -void WSRequestHandler::HandleStartRecording(WSRequestHandler* req) -{ - if (obs_frontend_recording_active() == false) - { +void WSRequestHandler::HandleStartRecording(WSRequestHandler* req) { + if (obs_frontend_recording_active() == false) { obs_frontend_recording_start(); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("recording already active"); } } -void WSRequestHandler::HandleStopRecording(WSRequestHandler* req) -{ - if (obs_frontend_recording_active() == true) - { +void WSRequestHandler::HandleStopRecording(WSRequestHandler* req) { + if (obs_frontend_recording_active() == true) { obs_frontend_recording_stop(); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("recording not active"); } } -void WSRequestHandler::HandleGetTransitionList(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetTransitionList(WSRequestHandler* req) { obs_source_t* current_transition = obs_frontend_get_current_transition(); obs_frontend_source_list transitionList = {}; obs_frontend_get_transitions(&transitionList); obs_data_array_t* transitions = obs_data_array_create(); - for (size_t i = 0; i < transitionList.sources.num; i++) - { + for (size_t i = 0; i < transitionList.sources.num; i++) { obs_source_t* transition = transitionList.sources.array[i]; obs_data_t* obj = obs_data_create(); @@ -581,8 +516,7 @@ void WSRequestHandler::HandleGetTransitionList(WSRequestHandler* req) obs_source_release(current_transition); } -void WSRequestHandler::HandleGetCurrentTransition(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetCurrentTransition(WSRequestHandler* req) { obs_source_t* current_transition = obs_frontend_get_current_transition(); obs_data_t* response = obs_data_create(); @@ -598,28 +532,22 @@ void WSRequestHandler::HandleGetCurrentTransition(WSRequestHandler* req) obs_source_release(current_transition); } -void WSRequestHandler::HandleSetCurrentTransition(WSRequestHandler* req) -{ - if (!req->hasField("transition-name")) - { +void WSRequestHandler::HandleSetCurrentTransition(WSRequestHandler* req) { + if (!req->hasField("transition-name")) { req->SendErrorResponse("missing request parameters"); return; } const char* name = obs_data_get_string(req->data, "transition-name"); - bool success = Utils::SetTransitionByName(name); - if (success) req->SendOKResponse(); else req->SendErrorResponse("requested transition does not exist"); } -void WSRequestHandler::HandleSetTransitionDuration(WSRequestHandler* req) -{ - if (!req->hasField("duration")) - { +void WSRequestHandler::HandleSetTransitionDuration(WSRequestHandler* req) { + if (!req->hasField("duration")) { req->SendErrorResponse("missing request parameters"); return; } @@ -629,8 +557,7 @@ void WSRequestHandler::HandleSetTransitionDuration(WSRequestHandler* req) req->SendOKResponse(); } -void WSRequestHandler::HandleGetTransitionDuration(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetTransitionDuration(WSRequestHandler* req) { obs_data_t* response = obs_data_create(); obs_data_set_int(response, "transition-duration", Utils::GetTransitionDuration()); @@ -639,11 +566,9 @@ void WSRequestHandler::HandleGetTransitionDuration(WSRequestHandler* req) obs_data_release(response); } -void WSRequestHandler::HandleSetVolume(WSRequestHandler* req) -{ +void WSRequestHandler::HandleSetVolume(WSRequestHandler* req) { if (!req->hasField("source") || - !req->hasField("volume")) - { + !req->hasField("volume")) { req->SendErrorResponse("missing request parameters"); return; } @@ -652,15 +577,13 @@ void WSRequestHandler::HandleSetVolume(WSRequestHandler* req) float source_volume = obs_data_get_double(req->data, "volume"); if (source_name == NULL || strlen(source_name) < 1 || - source_volume < 0.0 || source_volume > 1.0) - { + source_volume < 0.0 || source_volume > 1.0) { req->SendErrorResponse("invalid request parameters"); return; } obs_source_t* source = obs_get_source_by_name(source_name); - if (!source) - { + if (!source) { req->SendErrorResponse("specified source doesn't exist"); return; } @@ -671,18 +594,14 @@ void WSRequestHandler::HandleSetVolume(WSRequestHandler* req) obs_source_release(source); } -void WSRequestHandler::HandleGetVolume(WSRequestHandler* req) -{ - if (!req->hasField("source")) - { +void WSRequestHandler::HandleGetVolume(WSRequestHandler* req) { + if (!req->hasField("source")) { req->SendErrorResponse("missing request parameters"); return; } const char* source_name = obs_data_get_string(req->data, "source"); - - if (str_valid(source_name)) - { + if (str_valid(source_name)) { obs_source_t* source = obs_get_source_by_name(source_name); obs_data_t* response = obs_data_create(); @@ -694,31 +613,25 @@ void WSRequestHandler::HandleGetVolume(WSRequestHandler* req) obs_data_release(response); obs_source_release(source); - } - else - { + } else { req->SendErrorResponse("invalid request parameters"); } } -void WSRequestHandler::HandleToggleMute(WSRequestHandler* req) -{ - if (!req->hasField("source")) - { +void WSRequestHandler::HandleToggleMute(WSRequestHandler* req) { + if (!req->hasField("source")) { req->SendErrorResponse("missing request parameters"); return; } const char* source_name = obs_data_get_string(req->data, "source"); - if (!str_valid(source_name)) - { + if (!str_valid(source_name)) { req->SendErrorResponse("invalid request parameters"); return; } obs_source_t* source = obs_get_source_by_name(source_name); - if (!source) - { + if (!source) { req->SendErrorResponse("invalid request parameters"); return; } @@ -729,11 +642,9 @@ void WSRequestHandler::HandleToggleMute(WSRequestHandler* req) obs_source_release(source); } -void WSRequestHandler::HandleSetMute(WSRequestHandler* req) -{ +void WSRequestHandler::HandleSetMute(WSRequestHandler* req) { if (!req->hasField("source") || - !req->hasField("mute")) - { + !req->hasField("mute")) { req->SendErrorResponse("mssing request parameters"); return; } @@ -741,15 +652,13 @@ void WSRequestHandler::HandleSetMute(WSRequestHandler* req) const char* source_name = obs_data_get_string(req->data, "source"); bool mute = obs_data_get_bool(req->data, "mute"); - if (!str_valid(source_name)) - { + if (!str_valid(source_name)) { req->SendErrorResponse("invalid request parameters"); return; } obs_source_t* source = obs_get_source_by_name(source_name); - if (!source) - { + if (!source) { req->SendErrorResponse("specified source doesn't exist"); return; } @@ -760,25 +669,20 @@ void WSRequestHandler::HandleSetMute(WSRequestHandler* req) obs_source_release(source); } -void WSRequestHandler::HandleGetMute(WSRequestHandler* req) -{ - if (!req->hasField("source")) - { +void WSRequestHandler::HandleGetMute(WSRequestHandler* req) { + if (!req->hasField("source")) { req->SendErrorResponse("mssing request parameters"); return; } const char* source_name = obs_data_get_string(req->data, "source"); - - if (!str_valid(source_name)) - { + if (!str_valid(source_name)) { req->SendErrorResponse("invalid request parameters"); return; } obs_source_t* source = obs_get_source_by_name(source_name); - if (!source) - { + if (!source) { req->SendErrorResponse("specified source doesn't exist"); return; } @@ -793,18 +697,15 @@ void WSRequestHandler::HandleGetMute(WSRequestHandler* req) obs_data_release(response); } -void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler* req) -{ +void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler* req) { if (!req->hasField("item") || - !req->hasField("x") || !req->hasField("y")) - { + !req->hasField("x") || !req->hasField("y")) { req->SendErrorResponse("missing request parameters"); return; } const char* item_name = obs_data_get_string(req->data, "item"); - if (!str_valid(item_name)) - { + if (!str_valid(item_name)) { req->SendErrorResponse("invalid request parameters"); return; } @@ -817,9 +718,7 @@ void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler* req) } obs_sceneitem_t* scene_item = Utils::GetSceneItemFromName(scene, item_name); - - if (scene_item) - { + if (scene_item) { vec2 item_position = { 0 }; item_position.x = obs_data_get_double(req->data, "x"); item_position.y = obs_data_get_double(req->data, "y"); @@ -828,29 +727,24 @@ void WSRequestHandler::HandleSetSceneItemPosition(WSRequestHandler* req) obs_sceneitem_release(scene_item); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene); } -void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler* req) -{ +void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler* req) { if (!req->hasField("item") || !req->hasField("x-scale") || !req->hasField("y-scale") || - !req->hasField("rotation")) - { + !req->hasField("rotation")) { req->SendErrorResponse("missing request parameters"); return; } const char* item_name = obs_data_get_string(req->data, "item"); - if (!str_valid(item_name)) - { + if (!str_valid(item_name)) { req->SendErrorResponse("invalid request parameters"); return; } @@ -865,38 +759,30 @@ void WSRequestHandler::HandleSetSceneItemTransform(WSRequestHandler* req) vec2 scale; scale.x = obs_data_get_double(req->data, "x-scale"); scale.y = obs_data_get_double(req->data, "y-scale"); - float rotation = obs_data_get_double(req->data, "rotation"); obs_sceneitem_t* scene_item = Utils::GetSceneItemFromName(scene, item_name); - - if (scene_item) - { + if (scene_item) { obs_sceneitem_set_scale(scene_item, &scale); obs_sceneitem_set_rot(scene_item, rotation); obs_sceneitem_release(scene_item); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene); } -void WSRequestHandler::HandleSetSceneItemCrop(WSRequestHandler* req) -{ - if (!req->hasField("item")) - { +void WSRequestHandler::HandleSetSceneItemCrop(WSRequestHandler* req) { + if (!req->hasField("item")) { req->SendErrorResponse("missing request parameters"); return; } const char* item_name = obs_data_get_string(req->data, "item"); - if (!str_valid(item_name)) - { + if (!str_valid(item_name)) { req->SendErrorResponse("invalid request parameters"); return; } @@ -909,9 +795,7 @@ void WSRequestHandler::HandleSetSceneItemCrop(WSRequestHandler* req) } obs_sceneitem_t* scene_item = Utils::GetSceneItemFromName(scene, item_name); - - if (scene_item) - { + if (scene_item) { struct obs_sceneitem_crop crop = { 0 }; crop.top = obs_data_get_int(req->data, "top"); crop.bottom = obs_data_get_int(req->data, "bottom");; @@ -922,129 +806,108 @@ void WSRequestHandler::HandleSetSceneItemCrop(WSRequestHandler* req) obs_sceneitem_release(scene_item); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene); } -void WSRequestHandler::HandleSetCurrentSceneCollection(WSRequestHandler* req) -{ - if (!req->hasField("sc-name")) - { +void WSRequestHandler::HandleSetCurrentSceneCollection(WSRequestHandler* req) { + if (!req->hasField("sc-name")) { req->SendErrorResponse("missing request parameters"); return; } const char* scene_collection = obs_data_get_string(req->data, "sc-name"); - - if (str_valid(scene_collection)) - { + if (str_valid(scene_collection)) { // TODO : Check if specified profile exists and if changing is allowed obs_frontend_set_current_scene_collection(scene_collection); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("invalid request parameters"); } } -void WSRequestHandler::HandleGetCurrentSceneCollection(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetCurrentSceneCollection(WSRequestHandler* req) { obs_data_t* response = obs_data_create(); obs_data_set_string(response, "sc-name", obs_frontend_get_current_scene_collection()); req->SendOKResponse(response); - obs_data_release(response); } -void WSRequestHandler::HandleListSceneCollections(WSRequestHandler* req) -{ +void WSRequestHandler::HandleListSceneCollections(WSRequestHandler* req) { obs_data_array_t* scene_collections = Utils::GetSceneCollections(); obs_data_t* response = obs_data_create(); obs_data_set_array(response, "scene-collections", scene_collections); req->SendOKResponse(response); - obs_data_release(response); obs_data_array_release(scene_collections); } -void WSRequestHandler::HandleSetCurrentProfile(WSRequestHandler* req) -{ - if (!req->hasField("profile-name")) - { +void WSRequestHandler::HandleSetCurrentProfile(WSRequestHandler* req) { + if (!req->hasField("profile-name")) { req->SendErrorResponse("missing request parameters"); return; } const char* profile_name = obs_data_get_string(req->data, "profile-name"); - - if (str_valid(profile_name)) - { + if (str_valid(profile_name)) { // TODO : check if profile exists obs_frontend_set_current_profile(profile_name); req->SendOKResponse(); - } - else - { + } else { req->SendErrorResponse("invalid request parameters"); } } -void WSRequestHandler::HandleGetCurrentProfile(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetCurrentProfile(WSRequestHandler* req) { obs_data_t* response = obs_data_create(); obs_data_set_string(response, "profile-name", obs_frontend_get_current_profile()); req->SendOKResponse(response); - obs_data_release(response); } -void WSRequestHandler::HandleSetStreamSettings(WSRequestHandler* req) -{ +void WSRequestHandler::HandleSetStreamSettings(WSRequestHandler* req) { obs_service_t* service = obs_frontend_get_streaming_service(); obs_data_t* settings = obs_data_get_obj(req->data, "settings"); - if (!settings) - { + if (!settings) { req->SendErrorResponse("'settings' are required'"); return; } const char* serviceType = obs_service_get_type(service); const char* requestedType = obs_data_get_string(req->data, "type"); - - if (requestedType != nullptr && strcmp(requestedType, serviceType) != 0) - { + if (requestedType != nullptr && strcmp(requestedType, serviceType) != 0) { obs_data_t* hotkeys = obs_hotkeys_save_service(service); obs_service_release(service); service = obs_service_create(requestedType, "websocket_custom_service", settings, hotkeys); obs_data_release(hotkeys); - } - else - { - obs_data_t* existingSettings = obs_service_get_settings(service); //if type isn't changing we should overlay the settings we got with the existing settings - obs_data_t* newSettings = obs_data_create(); //by doing this you can send a request to the websocket that only contains a setting you want to change instead of having to do a get and then change them + } else { + //if type isn't changing we should overlay the settings we got with the existing settings + obs_data_t* existingSettings = obs_service_get_settings(service); + //by doing this you can send a request to the websocket that only contains a setting you want to change instead of having to do a get and then change them + obs_data_t* newSettings = obs_data_create(); + obs_data_apply(newSettings, existingSettings); //first apply the existing settings obs_data_apply(newSettings, settings); //then apply the settings from the request + obs_data_release(settings); obs_data_release(existingSettings); + obs_service_update(service, settings); settings = newSettings; } - if (obs_data_get_bool(req->data, "save")) //if save is specified we should immediately save the streaming service - { + //if save is specified we should immediately save the streaming service + if (obs_data_get_bool(req->data, "save")) { obs_frontend_save_streaming_service(); } @@ -1053,15 +916,12 @@ void WSRequestHandler::HandleSetStreamSettings(WSRequestHandler* req) obs_data_set_obj(response, "settings", settings); req->SendOKResponse(response); - obs_data_release(settings); obs_data_release(response); } -void WSRequestHandler::HandleGetStreamSettings(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetStreamSettings(WSRequestHandler* req) { obs_service_t* service = obs_frontend_get_streaming_service(); - const char* serviceType = obs_service_get_type(service); obs_data_t* settings = obs_service_get_settings(service); @@ -1070,46 +930,38 @@ void WSRequestHandler::HandleGetStreamSettings(WSRequestHandler* req) obs_data_set_obj(response, "settings", settings); req->SendOKResponse(response); - obs_data_release(settings); obs_data_release(response); } -void WSRequestHandler::HandleSaveStreamSettings(WSRequestHandler* req) -{ +void WSRequestHandler::HandleSaveStreamSettings(WSRequestHandler* req) { obs_frontend_save_streaming_service(); req->SendOKResponse(); } -void WSRequestHandler::HandleListProfiles(WSRequestHandler* req) -{ +void WSRequestHandler::HandleListProfiles(WSRequestHandler* req) { obs_data_array_t* profiles = Utils::GetProfiles(); obs_data_t* response = obs_data_create(); obs_data_set_array(response, "profiles", profiles); req->SendOKResponse(response); - obs_data_release(response); obs_data_array_release(profiles); } -void WSRequestHandler::HandleGetStudioModeStatus(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetStudioModeStatus(WSRequestHandler* req) { bool previewActive = Utils::IsPreviewModeActive(); obs_data_t* response = obs_data_create(); obs_data_set_bool(response, "studio-mode", previewActive); req->SendOKResponse(response); - obs_data_release(response); } -void WSRequestHandler::HandleGetPreviewScene(WSRequestHandler* req) -{ - if (!Utils::IsPreviewModeActive()) - { +void WSRequestHandler::HandleGetPreviewScene(WSRequestHandler* req) { + if (!Utils::IsPreviewModeActive()) { req->SendErrorResponse("studio mode not enabled"); return; } @@ -1125,74 +977,59 @@ void WSRequestHandler::HandleGetPreviewScene(WSRequestHandler* req) obs_data_set_array(data, "sources", scene_items); req->SendOKResponse(data); - obs_data_release(data); obs_data_array_release(scene_items); - obs_scene_release(preview_scene); } -void WSRequestHandler::HandleSetPreviewScene(WSRequestHandler* req) -{ - if (!Utils::IsPreviewModeActive()) - { +void WSRequestHandler::HandleSetPreviewScene(WSRequestHandler* req) { + if (!Utils::IsPreviewModeActive()) { req->SendErrorResponse("studio mode not enabled"); return; } - if (!req->hasField("scene-name")) - { + if (!req->hasField("scene-name")) { req->SendErrorResponse("missing request parameters"); return; } const char* scene_name = obs_data_get_string(req->data, "scene-name"); bool success = Utils::SetPreviewScene(scene_name); - if (success) req->SendOKResponse(); else req->SendErrorResponse("specified scene doesn't exist"); } -void WSRequestHandler::HandleTransitionToProgram(WSRequestHandler* req) -{ - if (!Utils::IsPreviewModeActive()) - { +void WSRequestHandler::HandleTransitionToProgram(WSRequestHandler* req) { + if (!Utils::IsPreviewModeActive()) { req->SendErrorResponse("studio mode not enabled"); return; } - if (req->hasField("with-transition")) - { + if (req->hasField("with-transition")) { obs_data_t* transitionInfo = obs_data_get_obj(req->data, "with-transition"); - if (obs_data_has_user_value(transitionInfo, "name")) - { + if (obs_data_has_user_value(transitionInfo, "name")) { const char* transitionName = obs_data_get_string(transitionInfo, "name"); - - if (!str_valid(transitionName)) - { + if (!str_valid(transitionName)) { req->SendErrorResponse("invalid request parameters"); return; } bool success = Utils::SetTransitionByName(transitionName); - if (!success) - { + if (!success) { req->SendErrorResponse("specified transition doesn't exist"); obs_data_release(transitionInfo); return; } } - if (obs_data_has_user_value(transitionInfo, "duration")) - { + if (obs_data_has_user_value(transitionInfo, "duration")) { int transitionDuration = obs_data_get_int(transitionInfo, "duration"); - Utils::SetTransitionDuration(transitionDuration); } @@ -1203,26 +1040,22 @@ void WSRequestHandler::HandleTransitionToProgram(WSRequestHandler* req) req->SendOKResponse(); } -void WSRequestHandler::HandleEnableStudioMode(WSRequestHandler* req) -{ +void WSRequestHandler::HandleEnableStudioMode(WSRequestHandler* req) { Utils::EnablePreviewMode(); req->SendOKResponse(); } -void WSRequestHandler::HandleDisableStudioMode(WSRequestHandler* req) -{ +void WSRequestHandler::HandleDisableStudioMode(WSRequestHandler* req) { Utils::DisablePreviewMode(); req->SendOKResponse(); } -void WSRequestHandler::HandleToggleStudioMode(WSRequestHandler* req) -{ +void WSRequestHandler::HandleToggleStudioMode(WSRequestHandler* req) { Utils::TogglePreviewMode(); req->SendOKResponse(); } -void WSRequestHandler::HandleGetSpecialSources(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetSpecialSources(WSRequestHandler* req) { obs_data_t* response = obs_data_create(); QMap sources; @@ -1233,45 +1066,38 @@ void WSRequestHandler::HandleGetSpecialSources(WSRequestHandler* req) sources["mic-3"] = 5; QMapIterator i(sources); - while (i.hasNext()) - { + while (i.hasNext()) { i.next(); const char* id = i.key(); obs_source_t* source = obs_get_output_source(i.value()); blog(LOG_INFO, "%s : %p", id, source); - if (source) - { + if (source) { obs_data_set_string(response, id, obs_source_get_name(source)); obs_source_release(source); } } req->SendOKResponse(response); - obs_data_release(response); } -void WSRequestHandler::HandleSetRecordingFolder(WSRequestHandler* req) -{ - if (!req->hasField("rec-folder")) - { +void WSRequestHandler::HandleSetRecordingFolder(WSRequestHandler* req) { + if (!req->hasField("rec-folder")) { req->SendErrorResponse("missing request parameters"); return; } const char* newRecFolder = obs_data_get_string(req->data, "rec-folder"); bool success = Utils::SetRecordingFolder(newRecFolder); - if (success) req->SendOKResponse(); else req->SendErrorResponse("invalid request parameters"); } -void WSRequestHandler::HandleGetRecordingFolder(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetRecordingFolder(WSRequestHandler* req) { const char* recFolder = Utils::GetRecordingFolder(); obs_data_t* response = obs_data_create(); @@ -1281,11 +1107,9 @@ void WSRequestHandler::HandleGetRecordingFolder(WSRequestHandler* req) obs_data_release(response); } -void WSRequestHandler::HandleGetTextGDIPlusProperties(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetTextGDIPlusProperties(WSRequestHandler* req) { const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) - { + if (!itemName) { req->SendErrorResponse("invalid request parameters"); return; } @@ -1298,13 +1122,11 @@ void WSRequestHandler::HandleGetTextGDIPlusProperties(WSRequestHandler* req) } obs_sceneitem_t* sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) - { + if (sceneItem) { obs_source_t* sceneItemSource = obs_sceneitem_get_source(sceneItem); const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) - { + if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) { obs_data_t* response = obs_source_get_settings(sceneItemSource); obs_data_set_string(response, "source", itemName); obs_data_set_string(response, "scene-name", sceneName); @@ -1315,32 +1137,24 @@ void WSRequestHandler::HandleGetTextGDIPlusProperties(WSRequestHandler* req) obs_data_release(response); obs_sceneitem_release(sceneItem); - } - else - { + } else { req->SendErrorResponse("not text gdi plus source"); } - - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene); } -void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) -{ - if (!req->hasField("source")) - { +void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) { + if (!req->hasField("source")) { req->SendErrorResponse("missing request parameters"); return; } const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) - { + if (!itemName) { req->SendErrorResponse("invalid request parameters"); return; } @@ -1353,86 +1167,71 @@ void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) } obs_sceneitem_t* sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) - { + if (sceneItem) { obs_source_t* sceneItemSource = obs_sceneitem_get_source(sceneItem); const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) - { + if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) { obs_data_t* settings = obs_source_get_settings(sceneItemSource); - if (req->hasField("align")) - { + if (req->hasField("align")) { obs_data_set_string(settings, "align", obs_data_get_string(req->data, "align")); } - if (req->hasField("bk_color")) - { + if (req->hasField("bk_color")) { obs_data_set_int(settings, "bk_color", obs_data_get_int(req->data, "bk_color")); } - if (req->hasField("bk-opacity")) - { + if (req->hasField("bk-opacity")) { obs_data_set_int(settings, "bk_opacity", obs_data_get_int(req->data, "bk_opacity")); } - if (req->hasField("chatlog")) - { + if (req->hasField("chatlog")) { obs_data_set_bool(settings, "chatlog", obs_data_get_bool(req->data, "chatlog")); } - if (req->hasField("chatlog_lines")) - { + if (req->hasField("chatlog_lines")) { obs_data_set_int(settings, "chatlog_lines", obs_data_get_int(req->data, "chatlog_lines")); } - if (req->hasField("color")) - { + if (req->hasField("color")) { obs_data_set_int(settings, "color", obs_data_get_int(req->data, "color")); } - if (req->hasField("extents")) - { + if (req->hasField("extents")) { obs_data_set_bool(settings, "extents", obs_data_get_bool(req->data, "extents")); } - if (req->hasField("extents_wrap")) - { + if (req->hasField("extents_wrap")) { obs_data_set_bool(settings, "extents_wrap", obs_data_get_bool(req->data, "extents_wrap")); } - if (req->hasField("extents_cx")) - { + if (req->hasField("extents_cx")) { obs_data_set_int(settings, "extents_cx", obs_data_get_int(req->data, "extents_cx")); } - if (req->hasField("extents_cy")) - { + if (req->hasField("extents_cy")) { obs_data_set_int(settings, "extents_cy", obs_data_get_int(req->data, "extents_cy")); } - if (req->hasField("file")) - { + if (req->hasField("file")) { obs_data_set_string(settings, "file", obs_data_get_string(req->data, "file")); } - if (req->hasField("font")) - { + if (req->hasField("font")) { obs_data_t* font_obj = obs_data_get_obj(settings, "font"); - if (font_obj) - { + if (font_obj) { obs_data_t* req_font_obj = obs_data_get_obj(req->data, "font"); if (obs_data_has_user_value(req_font_obj, "face")) { @@ -1460,109 +1259,89 @@ void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) } } - if (req->hasField("gradient")) - { + if (req->hasField("gradient")) { obs_data_set_bool(settings, "gradient", obs_data_get_bool(req->data, "gradient")); } - if (req->hasField("gradient_color")) - { + if (req->hasField("gradient_color")) { obs_data_set_int(settings, "gradient_color", obs_data_get_int(req->data, "gradient_color")); } - if (req->hasField("gradient_dir")) - { + if (req->hasField("gradient_dir")) { obs_data_set_double(settings, "gradient_dir", obs_data_get_double(req->data, "gradient_dir")); } - if (req->hasField("gradient_opacity")) - { + if (req->hasField("gradient_opacity")) { obs_data_set_int(settings, "gradient_opacity", obs_data_get_int(req->data, "gradient_opacity")); } - if (req->hasField("outline")) - { + if (req->hasField("outline")) { obs_data_set_bool(settings, "outline", obs_data_get_bool(req->data, "outline")); } - if (req->hasField("outline_size")) - { + if (req->hasField("outline_size")) { obs_data_set_int(settings, "outline_size", obs_data_get_int(req->data, "outline_size")); } - if (req->hasField("outline_color")) - { + if (req->hasField("outline_color")) { obs_data_set_int(settings, "outline_color", obs_data_get_int(req->data, "outline_color")); } - if (req->hasField("outline_opacity")) - { + if (req->hasField("outline_opacity")) { obs_data_set_int(settings, "outline_opacity", obs_data_get_int(req->data, "outline_opacity")); } - if (req->hasField("read_from_file")) - { + if (req->hasField("read_from_file")) { obs_data_set_bool(settings, "read_from_file", obs_data_get_bool(req->data, "read_from_file")); } - if (req->hasField("text")) - { + if (req->hasField("text")) { obs_data_set_string(settings, "text", obs_data_get_string(req->data, "text")); } - if (req->hasField("valign")) - { + if (req->hasField("valign")) { obs_data_set_string(settings, "valign", obs_data_get_string(req->data, "valign")); } - if (req->hasField("vertical")) - { + if (req->hasField("vertical")) { obs_data_set_bool(settings, "vertical", obs_data_get_bool(req->data, "vertical")); } obs_source_update(sceneItemSource, settings); - if (req->hasField("render")) - { + if (req->hasField("render")) { obs_sceneitem_set_visible(sceneItem, obs_data_get_bool(req->data, "render")); } req->SendOKResponse(); - obs_data_release(settings); obs_sceneitem_release(sceneItem); - } - else - { + } else { req->SendErrorResponse("not text gdi plus source"); } - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene); } -void WSRequestHandler::HandleGetBrowserSourceProperties(WSRequestHandler* req) -{ +void WSRequestHandler::HandleGetBrowserSourceProperties(WSRequestHandler* req) { const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) - { + if (!itemName) { req->SendErrorResponse("invalid request parameters"); return; } @@ -1575,13 +1354,11 @@ void WSRequestHandler::HandleGetBrowserSourceProperties(WSRequestHandler* req) } obs_sceneitem_t* sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) - { + if (sceneItem) { obs_source_t* sceneItemSource = obs_sceneitem_get_source(sceneItem); const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "browser_source") == 0) - { + if (strcmp(sceneItemSourceId, "browser_source") == 0) { obs_data_t* response = obs_source_get_settings(sceneItemSource); obs_data_set_string(response, "source", itemName); obs_data_set_string(response, "scene-name", sceneName); @@ -1592,30 +1369,23 @@ void WSRequestHandler::HandleGetBrowserSourceProperties(WSRequestHandler* req) obs_data_release(response); obs_sceneitem_release(sceneItem); - } - else - { + } else { req->SendErrorResponse("not browser source"); } - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene); } -void WSRequestHandler::HandleSetBrowserSourceProperties(WSRequestHandler* req) -{ - if (!req->hasField("source")) - { +void WSRequestHandler::HandleSetBrowserSourceProperties(WSRequestHandler* req) { + if (!req->hasField("source")) { req->SendErrorResponse("missing request parameters"); return; } const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) - { + if (!itemName) { req->SendErrorResponse("invalid request parameters"); return; } @@ -1628,67 +1398,56 @@ void WSRequestHandler::HandleSetBrowserSourceProperties(WSRequestHandler* req) } obs_sceneitem_t* sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) - { + if (sceneItem) { obs_source_t* sceneItemSource = obs_sceneitem_get_source(sceneItem); const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "browser_source") == 0) - { + if (strcmp(sceneItemSourceId, "browser_source") == 0) { obs_data_t* settings = obs_source_get_settings(sceneItemSource); - if (req->hasField("restart_when_active")) - { + if (req->hasField("restart_when_active")) { obs_data_set_bool(settings, "restart_when_active", obs_data_get_bool(req->data, "restart_when_active")); } - if (req->hasField("shutdown")) - { + if (req->hasField("shutdown")) { obs_data_set_bool(settings, "shutdown", obs_data_get_bool(req->data, "shutdown")); } - if (req->hasField("is_local_file")) - { + if (req->hasField("is_local_file")) { obs_data_set_bool(settings, "is_local_file", obs_data_get_bool(req->data, "is_local_file")); } - if (req->hasField("url")) - { + if (req->hasField("url")) { obs_data_set_string(settings, "url", obs_data_get_string(req->data, "url")); } - if (req->hasField("css")) - { + if (req->hasField("css")) { obs_data_set_string(settings, "css", obs_data_get_string(req->data, "css")); } - if (req->hasField("width")) - { + if (req->hasField("width")) { obs_data_set_int(settings, "width", obs_data_get_int(req->data, "width")); } - if (req->hasField("height")) - { + if (req->hasField("height")) { obs_data_set_int(settings, "height", obs_data_get_int(req->data, "height")); } - if (req->hasField("fps")) - { + if (req->hasField("fps")) { obs_data_set_int(settings, "fps", obs_data_get_int(req->data, "fps")); } obs_source_update(sceneItemSource, settings); - if (req->hasField("render")) - { + if (req->hasField("render")) { obs_sceneitem_set_visible(sceneItem, obs_data_get_bool(req->data, "render")); } @@ -1697,14 +1456,10 @@ void WSRequestHandler::HandleSetBrowserSourceProperties(WSRequestHandler* req) obs_data_release(settings); obs_sceneitem_release(sceneItem); - } - else - { + } else { req->SendErrorResponse("not browser source"); } - } - else - { + } else { req->SendErrorResponse("specified scene item doesn't exist"); } obs_source_release(scene);