diff --git a/.clang-format b/.clang-format index c9dfc48e..4a702125 100644 --- a/.clang-format +++ b/.clang-format @@ -44,7 +44,7 @@ BreakBeforeBraces: Custom BreakBeforeTernaryOperators: true BreakConstructorInitializers: BeforeColon BreakStringLiterals: false # apparently unpredictable -ColumnLimit: 80 +ColumnLimit: 132 CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerIndentWidth: 8 diff --git a/lib/example/simplest-plugin.c b/lib/example/simplest-plugin.c index a937360a..23699723 100644 --- a/lib/example/simplest-plugin.c +++ b/lib/example/simplest-plugin.c @@ -34,42 +34,33 @@ bool obs_module_load(void) return true; } -void example_request_cb(obs_data_t *request_data, obs_data_t *response_data, - void *priv_data); +void example_request_cb(obs_data_t *request_data, obs_data_t *response_data, void *priv_data); void obs_module_post_load(void) { vendor = obs_websocket_register_vendor("api_example_plugin"); if (!vendor) { - blog(LOG_ERROR, - "Vendor registration failed! (obs-websocket should have logged something if installed properly.)"); + blog(LOG_ERROR, "Vendor registration failed! (obs-websocket should have logged something if installed properly.)"); return; } - if (!obs_websocket_vendor_register_request(vendor, "example_request", - example_request_cb, NULL)) - blog(LOG_ERROR, - "Failed to register `example_request` request with obs-websocket."); + if (!obs_websocket_vendor_register_request(vendor, "example_request", example_request_cb, NULL)) + blog(LOG_ERROR, "Failed to register `example_request` request with obs-websocket."); uint api_version = obs_websocket_get_api_version(); if (api_version == 0) { - blog(LOG_ERROR, - "Unable to fetch obs-websocket plugin API version."); + blog(LOG_ERROR, "Unable to fetch obs-websocket plugin API version."); return; } else if (api_version == 1) { - blog(LOG_WARNING, - "Unsupported obs-websocket plugin API version for calling requests."); + blog(LOG_WARNING, "Unsupported obs-websocket plugin API version for calling requests."); return; } - struct obs_websocket_request_response *response = - obs_websocket_call_request("GetVersion"); + struct obs_websocket_request_response *response = obs_websocket_call_request("GetVersion"); if (!response) { - blog(LOG_ERROR, - "Failed to call GetVersion due to obs-websocket not being installed."); + blog(LOG_ERROR, "Failed to call GetVersion due to obs-websocket not being installed."); return; } - blog(LOG_INFO, - "[obs_module_post_load] Called GetVersion. Status Code: %u | Comment: %s | Response Data: %s", + blog(LOG_INFO, "[obs_module_post_load] Called GetVersion. Status Code: %u | Comment: %s | Response Data: %s", response->status_code, response->comment, response->response_data); obs_websocket_request_response_free(response); } @@ -79,8 +70,7 @@ void obs_module_unload(void) blog(LOG_INFO, "Example obs-websocket-api plugin unloaded!"); } -void example_request_cb(obs_data_t *request_data, obs_data_t *response_data, - void *priv_data) +void example_request_cb(obs_data_t *request_data, obs_data_t *response_data, void *priv_data) { if (obs_data_has_user_value(request_data, "ping")) obs_data_set_bool(response_data, "pong", true); diff --git a/lib/obs-websocket-api.h b/lib/obs-websocket-api.h index d050f9ac..3ab1a623 100644 --- a/lib/obs-websocket-api.h +++ b/lib/obs-websocket-api.h @@ -1,234 +1,216 @@ -/* -obs-websocket -Copyright (C) 2016-2021 Stephane Lepin -Copyright (C) 2020-2022 Kyle Manning - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see -*/ - -#ifndef _OBS_WEBSOCKET_API_H -#define _OBS_WEBSOCKET_API_H - -#include - -#define OBS_WEBSOCKET_API_VERSION 2 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef void *obs_websocket_vendor; -typedef void (*obs_websocket_request_callback_function)(obs_data_t *, - obs_data_t *, void *); - -struct obs_websocket_request_response { - unsigned int status_code; - char *comment; - char *response_data; // JSON string, because obs_data_t* only supports array, so conversions would break API. -}; - -/* ==================== INTERNAL DEFINITIONS ==================== */ - -struct obs_websocket_request_callback { - obs_websocket_request_callback_function callback; - void *priv_data; -}; - -inline proc_handler_t *_ph; - -/* ==================== INTERNAL API FUNCTIONS ==================== */ - -static inline proc_handler_t *obs_websocket_get_ph(void) -{ - proc_handler_t *global_ph = obs_get_proc_handler(); - assert(global_ph != NULL); - - calldata_t cd = {0}; - if (!proc_handler_call(global_ph, "obs_websocket_api_get_ph", &cd)) - blog(LOG_DEBUG, - "Unable to fetch obs-websocket proc handler object. obs-websocket not installed?"); - proc_handler_t *ret = (proc_handler_t *)calldata_ptr(&cd, "ph"); - calldata_free(&cd); - - return ret; -} - -static inline bool obs_websocket_ensure_ph(void) -{ - if (!_ph) - _ph = obs_websocket_get_ph(); - return _ph != NULL; -} - -static inline bool -obs_websocket_vendor_run_simple_proc(obs_websocket_vendor vendor, - const char *proc_name, calldata_t *cd) -{ - if (!obs_websocket_ensure_ph()) - return false; - - if (!vendor || !proc_name || !strlen(proc_name) || !cd) - return false; - - calldata_set_ptr(cd, "vendor", vendor); - - proc_handler_call(_ph, proc_name, cd); - return calldata_bool(cd, "success"); -} - -/* ==================== GENERAL API FUNCTIONS ==================== */ - -// Gets the API version built with the obs-websocket plugin -static inline unsigned int obs_websocket_get_api_version(void) -{ - if (!obs_websocket_ensure_ph()) - return 0; - - calldata_t cd = {0}; - - if (!proc_handler_call(_ph, "get_api_version", &cd)) - return 1; // API v1 does not include get_api_version - - unsigned int ret = calldata_int(&cd, "version"); - - calldata_free(&cd); - - return ret; -} - -// Calls an obs-websocket request. Free response with `obs_websocket_request_response_free()` -static inline obs_websocket_request_response * -obs_websocket_call_request(const char *request_type, - obs_data_t *request_data = NULL) -{ - if (!obs_websocket_ensure_ph()) - return NULL; - - const char *request_data_string = NULL; - if (request_data) - request_data_string = obs_data_get_json(request_data); - - calldata_t cd = {0}; - - calldata_set_string(&cd, "request_type", request_type); - calldata_set_string(&cd, "request_data", request_data_string); - - proc_handler_call(_ph, "call_request", &cd); - - auto ret = (struct obs_websocket_request_response *)calldata_ptr( - &cd, "response"); - - calldata_free(&cd); - - return ret; -} - -// Free a request response object returned by `obs_websocket_call_request()` -static inline void obs_websocket_request_response_free( - struct obs_websocket_request_response *response) -{ - if (!response) - return; - - if (response->comment) - bfree(response->comment); - if (response->response_data) - bfree(response->response_data); - bfree(response); -} - -/* ==================== VENDOR API FUNCTIONS ==================== */ - -// ALWAYS CALL ONLY VIA `obs_module_post_load()` CALLBACK! -// Registers a new "vendor" (Example: obs-ndi) -static inline obs_websocket_vendor -obs_websocket_register_vendor(const char *vendor_name) -{ - if (!obs_websocket_ensure_ph()) - return NULL; - - calldata_t cd = {0}; - - calldata_set_string(&cd, "name", vendor_name); - - proc_handler_call(_ph, "vendor_register", &cd); - obs_websocket_vendor ret = calldata_ptr(&cd, "vendor"); - calldata_free(&cd); - - return ret; -} - -// Registers a new request for a vendor -static inline bool obs_websocket_vendor_register_request( - obs_websocket_vendor vendor, const char *request_type, - obs_websocket_request_callback_function request_callback, - void *priv_data) -{ - calldata_t cd = {0}; - - struct obs_websocket_request_callback cb = {}; - cb.callback = request_callback; - cb.priv_data = priv_data; - - calldata_set_string(&cd, "type", request_type); - calldata_set_ptr(&cd, "callback", &cb); - - bool success = obs_websocket_vendor_run_simple_proc( - vendor, "vendor_request_register", &cd); - calldata_free(&cd); - - return success; -} - -// Unregisters an existing vendor request -static inline bool -obs_websocket_vendor_unregister_request(obs_websocket_vendor vendor, - const char *request_type) -{ - calldata_t cd = {0}; - - calldata_set_string(&cd, "type", request_type); - - bool success = obs_websocket_vendor_run_simple_proc( - vendor, "vendor_request_unregister", &cd); - calldata_free(&cd); - - return success; -} - -// Does not affect event_data refcount. -// Emits an event under the vendor's name -static inline bool obs_websocket_vendor_emit_event(obs_websocket_vendor vendor, - const char *event_name, - obs_data_t *event_data) -{ - calldata_t cd = {0}; - - calldata_set_string(&cd, "type", event_name); - calldata_set_ptr(&cd, "data", (void *)event_data); - - bool success = obs_websocket_vendor_run_simple_proc( - vendor, "vendor_event_emit", &cd); - calldata_free(&cd); - - return success; -} - -/* ==================== END API FUNCTIONS ==================== */ - -#ifdef __cplusplus -} -#endif - -#endif +/* +obs-websocket +Copyright (C) 2016-2021 Stephane Lepin +Copyright (C) 2020-2022 Kyle Manning + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see +*/ + +#ifndef _OBS_WEBSOCKET_API_H +#define _OBS_WEBSOCKET_API_H + +#include + +#define OBS_WEBSOCKET_API_VERSION 2 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *obs_websocket_vendor; +typedef void (*obs_websocket_request_callback_function)(obs_data_t *, obs_data_t *, void *); + +struct obs_websocket_request_response { + unsigned int status_code; + char *comment; + char *response_data; // JSON string, because obs_data_t* only supports array, so conversions would break API. +}; + +/* ==================== INTERNAL DEFINITIONS ==================== */ + +struct obs_websocket_request_callback { + obs_websocket_request_callback_function callback; + void *priv_data; +}; + +inline proc_handler_t *_ph; + +/* ==================== INTERNAL API FUNCTIONS ==================== */ + +static inline proc_handler_t *obs_websocket_get_ph(void) +{ + proc_handler_t *global_ph = obs_get_proc_handler(); + assert(global_ph != NULL); + + calldata_t cd = {0}; + if (!proc_handler_call(global_ph, "obs_websocket_api_get_ph", &cd)) + blog(LOG_DEBUG, "Unable to fetch obs-websocket proc handler object. obs-websocket not installed?"); + proc_handler_t *ret = (proc_handler_t *)calldata_ptr(&cd, "ph"); + calldata_free(&cd); + + return ret; +} + +static inline bool obs_websocket_ensure_ph(void) +{ + if (!_ph) + _ph = obs_websocket_get_ph(); + return _ph != NULL; +} + +static inline bool obs_websocket_vendor_run_simple_proc(obs_websocket_vendor vendor, const char *proc_name, calldata_t *cd) +{ + if (!obs_websocket_ensure_ph()) + return false; + + if (!vendor || !proc_name || !strlen(proc_name) || !cd) + return false; + + calldata_set_ptr(cd, "vendor", vendor); + + proc_handler_call(_ph, proc_name, cd); + return calldata_bool(cd, "success"); +} + +/* ==================== GENERAL API FUNCTIONS ==================== */ + +// Gets the API version built with the obs-websocket plugin +static inline unsigned int obs_websocket_get_api_version(void) +{ + if (!obs_websocket_ensure_ph()) + return 0; + + calldata_t cd = {0}; + + if (!proc_handler_call(_ph, "get_api_version", &cd)) + return 1; // API v1 does not include get_api_version + + unsigned int ret = calldata_int(&cd, "version"); + + calldata_free(&cd); + + return ret; +} + +// Calls an obs-websocket request. Free response with `obs_websocket_request_response_free()` +static inline obs_websocket_request_response *obs_websocket_call_request(const char *request_type, obs_data_t *request_data = NULL) +{ + if (!obs_websocket_ensure_ph()) + return NULL; + + const char *request_data_string = NULL; + if (request_data) + request_data_string = obs_data_get_json(request_data); + + calldata_t cd = {0}; + + calldata_set_string(&cd, "request_type", request_type); + calldata_set_string(&cd, "request_data", request_data_string); + + proc_handler_call(_ph, "call_request", &cd); + + auto ret = (struct obs_websocket_request_response *)calldata_ptr(&cd, "response"); + + calldata_free(&cd); + + return ret; +} + +// Free a request response object returned by `obs_websocket_call_request()` +static inline void obs_websocket_request_response_free(struct obs_websocket_request_response *response) +{ + if (!response) + return; + + if (response->comment) + bfree(response->comment); + if (response->response_data) + bfree(response->response_data); + bfree(response); +} + +/* ==================== VENDOR API FUNCTIONS ==================== */ + +// ALWAYS CALL ONLY VIA `obs_module_post_load()` CALLBACK! +// Registers a new "vendor" (Example: obs-ndi) +static inline obs_websocket_vendor obs_websocket_register_vendor(const char *vendor_name) +{ + if (!obs_websocket_ensure_ph()) + return NULL; + + calldata_t cd = {0}; + + calldata_set_string(&cd, "name", vendor_name); + + proc_handler_call(_ph, "vendor_register", &cd); + obs_websocket_vendor ret = calldata_ptr(&cd, "vendor"); + calldata_free(&cd); + + return ret; +} + +// Registers a new request for a vendor +static inline bool obs_websocket_vendor_register_request(obs_websocket_vendor vendor, const char *request_type, + obs_websocket_request_callback_function request_callback, void *priv_data) +{ + calldata_t cd = {0}; + + struct obs_websocket_request_callback cb = {}; + cb.callback = request_callback; + cb.priv_data = priv_data; + + calldata_set_string(&cd, "type", request_type); + calldata_set_ptr(&cd, "callback", &cb); + + bool success = obs_websocket_vendor_run_simple_proc(vendor, "vendor_request_register", &cd); + calldata_free(&cd); + + return success; +} + +// Unregisters an existing vendor request +static inline bool obs_websocket_vendor_unregister_request(obs_websocket_vendor vendor, const char *request_type) +{ + calldata_t cd = {0}; + + calldata_set_string(&cd, "type", request_type); + + bool success = obs_websocket_vendor_run_simple_proc(vendor, "vendor_request_unregister", &cd); + calldata_free(&cd); + + return success; +} + +// Does not affect event_data refcount. +// Emits an event under the vendor's name +static inline bool obs_websocket_vendor_emit_event(obs_websocket_vendor vendor, const char *event_name, obs_data_t *event_data) +{ + calldata_t cd = {0}; + + calldata_set_string(&cd, "type", event_name); + calldata_set_ptr(&cd, "data", (void *)event_data); + + bool success = obs_websocket_vendor_run_simple_proc(vendor, "vendor_event_emit", &cd); + calldata_free(&cd); + + return success; +} + +/* ==================== END API FUNCTIONS ==================== */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/Config.cpp b/src/Config.cpp index bdb67470..7d7aba68 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -62,20 +62,13 @@ void Config::Load() return; } - FirstLoad = config_get_bool(obsConfig, CONFIG_SECTION_NAME, - PARAM_FIRSTLOAD); - ServerEnabled = - config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED); - AlertsEnabled = - config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS); - ServerPort = - config_get_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT); - BindLoopback = config_get_bool(obsConfig, CONFIG_SECTION_NAME, - PARAM_BINDLOOPBACK); - AuthRequired = config_get_bool(obsConfig, CONFIG_SECTION_NAME, - PARAM_AUTHREQUIRED); - ServerPassword = config_get_string(obsConfig, CONFIG_SECTION_NAME, - PARAM_PASSWORD); + FirstLoad = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_FIRSTLOAD); + ServerEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED); + AlertsEnabled = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS); + ServerPort = config_get_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT); + BindLoopback = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_BINDLOOPBACK); + AuthRequired = config_get_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED); + ServerPassword = config_get_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD); // Set server password and save it to the config before processing overrides, // so that there is always a true configured password regardless of if @@ -83,49 +76,38 @@ void Config::Load() if (FirstLoad) { FirstLoad = false; if (ServerPassword.isEmpty()) { - blog(LOG_INFO, - "[Config::Load] (FirstLoad) Generating new server password."); - ServerPassword = QString::fromStdString( - Utils::Crypto::GeneratePassword()); + blog(LOG_INFO, "[Config::Load] (FirstLoad) Generating new server password."); + ServerPassword = QString::fromStdString(Utils::Crypto::GeneratePassword()); } else { - blog(LOG_INFO, - "[Config::Load] (FirstLoad) Not generating new password since one is already configured."); + blog(LOG_INFO, "[Config::Load] (FirstLoad) Not generating new password since one is already configured."); } Save(); } // Process `--websocket_port` override - QString portArgument = - Utils::Platform::GetCommandLineArgument(CMDLINE_WEBSOCKET_PORT); + QString portArgument = Utils::Platform::GetCommandLineArgument(CMDLINE_WEBSOCKET_PORT); if (portArgument != "") { bool ok; uint16_t serverPort = portArgument.toUShort(&ok); if (ok) { - blog(LOG_INFO, - "[Config::Load] --websocket_port passed. Overriding WebSocket port with: %d", - serverPort); + blog(LOG_INFO, "[Config::Load] --websocket_port passed. Overriding WebSocket port with: %d", serverPort); PortOverridden = true; ServerPort = serverPort; } else { - blog(LOG_WARNING, - "[Config::Load] Not overriding WebSocket port since integer conversion failed."); + blog(LOG_WARNING, "[Config::Load] Not overriding WebSocket port since integer conversion failed."); } } // Process `--websocket_ipv4_only` override - if (Utils::Platform::GetCommandLineFlagSet( - CMDLINE_WEBSOCKET_IPV4_ONLY)) { - blog(LOG_INFO, - "[Config::Load] --websocket_ipv4_only passed. Binding only to IPv4 interfaces."); + if (Utils::Platform::GetCommandLineFlagSet(CMDLINE_WEBSOCKET_IPV4_ONLY)) { + blog(LOG_INFO, "[Config::Load] --websocket_ipv4_only passed. Binding only to IPv4 interfaces."); Ipv4Only = true; } // Process `--websocket_password` override - QString passwordArgument = Utils::Platform::GetCommandLineArgument( - CMDLINE_WEBSOCKET_PASSWORD); + QString passwordArgument = Utils::Platform::GetCommandLineArgument(CMDLINE_WEBSOCKET_PASSWORD); if (passwordArgument != "") { - blog(LOG_INFO, - "[Config::Load] --websocket_password passed. Overriding WebSocket password."); + blog(LOG_INFO, "[Config::Load] --websocket_password passed. Overriding WebSocket password."); PasswordOverridden = true; AuthRequired = true; ServerPassword = passwordArgument; @@ -134,8 +116,7 @@ void Config::Load() // Process `--websocket_debug` override if (Utils::Platform::GetCommandLineFlagSet(CMDLINE_WEBSOCKET_DEBUG)) { // Debug does not persist on reload, so we let people override it with a flag. - blog(LOG_INFO, - "[Config::Load] --websocket_debug passed. Enabling debug logging."); + blog(LOG_INFO, "[Config::Load] --websocket_debug passed. Enabling debug logging."); DebugEnabled = true; } } @@ -148,23 +129,16 @@ void Config::Save() return; } - config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_FIRSTLOAD, - FirstLoad); - config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, - ServerEnabled); + config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_FIRSTLOAD, FirstLoad); + config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, ServerEnabled); if (!PortOverridden) { - config_set_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, - ServerPort); + config_set_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, ServerPort); } - config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_BINDLOOPBACK, - BindLoopback); - config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, - AlertsEnabled); + config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_BINDLOOPBACK, BindLoopback); + config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, AlertsEnabled); if (!PasswordOverridden) { - config_set_bool(obsConfig, CONFIG_SECTION_NAME, - PARAM_AUTHREQUIRED, AuthRequired); - config_set_string(obsConfig, CONFIG_SECTION_NAME, - PARAM_PASSWORD, QT_TO_UTF8(ServerPassword)); + config_set_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired); + config_set_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD, QT_TO_UTF8(ServerPassword)); } config_save(obsConfig); @@ -174,25 +148,17 @@ void Config::SetDefaultsToGlobalStore() { config_t *obsConfig = GetConfigStore(); if (!obsConfig) { - blog(LOG_ERROR, - "[Config::SetDefaultsToGlobalStore] Unable to fetch OBS config!"); + blog(LOG_ERROR, "[Config::SetDefaultsToGlobalStore] Unable to fetch OBS config!"); return; } - config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_FIRSTLOAD, - FirstLoad); - config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, - ServerEnabled); - config_set_default_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, - ServerPort); - config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, - PARAM_BINDLOOPBACK, BindLoopback); - config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, - AlertsEnabled); - config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, - PARAM_AUTHREQUIRED, AuthRequired); - config_set_default_string(obsConfig, CONFIG_SECTION_NAME, - PARAM_PASSWORD, QT_TO_UTF8(ServerPassword)); + config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_FIRSTLOAD, FirstLoad); + config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ENABLED, ServerEnabled); + config_set_default_uint(obsConfig, CONFIG_SECTION_NAME, PARAM_PORT, ServerPort); + config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_BINDLOOPBACK, BindLoopback); + config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_ALERTS, AlertsEnabled); + config_set_default_bool(obsConfig, CONFIG_SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired); + config_set_default_string(obsConfig, CONFIG_SECTION_NAME, PARAM_PASSWORD, QT_TO_UTF8(ServerPassword)); } config_t *Config::GetConfigStore() diff --git a/src/WebSocketApi.cpp b/src/WebSocketApi.cpp index 7e6f00f8..554b5061 100644 --- a/src/WebSocketApi.cpp +++ b/src/WebSocketApi.cpp @@ -15,8 +15,7 @@ WebSocketApi::Vendor *get_vendor(calldata_t *cd) { void *voidVendor; if (!calldata_get_ptr(cd, "vendor", &voidVendor)) { - blog(LOG_WARNING, - "[WebSocketApi: get_vendor] Failed due to missing `vendor` pointer."); + blog(LOG_WARNING, "[WebSocketApi: get_vendor] Failed due to missing `vendor` pointer."); return nullptr; } @@ -29,33 +28,21 @@ WebSocketApi::WebSocketApi() _procHandler = proc_handler_create(); - proc_handler_add(_procHandler, "bool get_api_version(out int version)", - &get_api_version, nullptr); - proc_handler_add( - _procHandler, - "bool call_request(in string request_type, in string request_data, out ptr response)", - &call_request, nullptr); - proc_handler_add(_procHandler, - "bool vendor_register(in string name, out ptr vendor)", - &vendor_register_cb, this); - proc_handler_add( - _procHandler, - "bool vendor_request_register(in ptr vendor, in string type, in ptr callback)", - &vendor_request_register_cb, this); - proc_handler_add( - _procHandler, - "bool vendor_request_unregister(in ptr vendor, in string type)", - &vendor_request_unregister_cb, this); - proc_handler_add( - _procHandler, - "bool vendor_event_emit(in ptr vendor, in string type, in ptr data)", - &vendor_event_emit_cb, this); + proc_handler_add(_procHandler, "bool get_api_version(out int version)", &get_api_version, nullptr); + proc_handler_add(_procHandler, "bool call_request(in string request_type, in string request_data, out ptr response)", + &call_request, nullptr); + proc_handler_add(_procHandler, "bool vendor_register(in string name, out ptr vendor)", &vendor_register_cb, this); + proc_handler_add(_procHandler, "bool vendor_request_register(in ptr vendor, in string type, in ptr callback)", + &vendor_request_register_cb, this); + proc_handler_add(_procHandler, "bool vendor_request_unregister(in ptr vendor, in string type)", + &vendor_request_unregister_cb, this); + proc_handler_add(_procHandler, "bool vendor_event_emit(in ptr vendor, in string type, in ptr data)", &vendor_event_emit_cb, + this); proc_handler_t *ph = obs_get_proc_handler(); assert(ph != NULL); - proc_handler_add(ph, "bool obs_websocket_api_get_ph(out ptr ph)", - &get_ph_cb, this); + proc_handler_add(ph, "bool obs_websocket_api_get_ph(out ptr ph)", &get_ph_cb, this); blog_debug("[WebSocketApi::WebSocketApi] Finished."); } @@ -67,8 +54,7 @@ WebSocketApi::~WebSocketApi() proc_handler_destroy(_procHandler); for (auto vendor : _vendors) { - blog_debug("[WebSocketApi::~WebSocketApi] Deleting vendor: %s", - vendor.first.c_str()); + blog_debug("[WebSocketApi::~WebSocketApi] Deleting vendor: %s", vendor.first.c_str()); delete vendor.second; } @@ -80,9 +66,8 @@ void WebSocketApi::SetEventCallback(EventCallback cb) _eventCallback = cb; } -enum WebSocketApi::RequestReturnCode WebSocketApi::PerformVendorRequest( - std::string vendorName, std::string requestType, - obs_data_t *requestData, obs_data_t *responseData) +enum WebSocketApi::RequestReturnCode WebSocketApi::PerformVendorRequest(std::string vendorName, std::string requestType, + obs_data_t *requestData, obs_data_t *responseData) { std::shared_lock l(_mutex); @@ -131,8 +116,7 @@ void WebSocketApi::call_request(void *, calldata_t *cd) if (!request_type) RETURN_FAILURE(); - auto response = static_cast( - bzalloc(sizeof(struct obs_websocket_request_response))); + auto response = static_cast(bzalloc(sizeof(struct obs_websocket_request_response))); if (!response) RETURN_FAILURE(); @@ -154,9 +138,8 @@ void WebSocketApi::call_request(void *, calldata_t *cd) calldata_set_ptr(cd, "response", response); - blog_debug( - "[WebSocketApi::call_request] Request %s called, response status code is %u", - request_type, response->status_code); + blog_debug("[WebSocketApi::call_request] Request %s called, response status code is %u", request_type, + response->status_code); RETURN_SUCCESS(); } @@ -166,10 +149,8 @@ void WebSocketApi::vendor_register_cb(void *priv_data, calldata_t *cd) auto c = static_cast(priv_data); const char *vendorName; - if (!calldata_get_string(cd, "name", &vendorName) || - strlen(vendorName) == 0) { - blog(LOG_WARNING, - "[WebSocketApi::vendor_register_cb] Failed due to missing `name` string."); + if (!calldata_get_string(cd, "name", &vendorName) || strlen(vendorName) == 0) { + blog(LOG_WARNING, "[WebSocketApi::vendor_register_cb] Failed due to missing `name` string."); RETURN_FAILURE(); } @@ -177,8 +158,7 @@ void WebSocketApi::vendor_register_cb(void *priv_data, calldata_t *cd) std::unique_lock l(c->_mutex); if (c->_vendors.count(vendorName)) { - blog(LOG_WARNING, - "[WebSocketApi::vendor_register_cb] Failed because `%s` is already a registered vendor.", + blog(LOG_WARNING, "[WebSocketApi::vendor_register_cb] Failed because `%s` is already a registered vendor.", vendorName); RETURN_FAILURE(); } @@ -188,9 +168,7 @@ void WebSocketApi::vendor_register_cb(void *priv_data, calldata_t *cd) c->_vendors[vendorName] = v; - blog_debug( - "[WebSocketApi::vendor_register_cb] [vendorName: %s] Registered new vendor.", - v->_name.c_str()); + blog_debug("[WebSocketApi::vendor_register_cb] [vendorName: %s] Registered new vendor.", v->_name.c_str()); calldata_set_ptr(cd, "vendor", static_cast(v)); @@ -204,8 +182,7 @@ void WebSocketApi::vendor_request_register_cb(void *, calldata_t *cd) RETURN_FAILURE(); const char *requestType; - if (!calldata_get_string(cd, "type", &requestType) || - strlen(requestType) == 0) { + if (!calldata_get_string(cd, "type", &requestType) || strlen(requestType) == 0) { blog(LOG_WARNING, "[WebSocketApi::vendor_request_register_cb] [vendorName: %s] Failed due to missing or empty `type` string.", v->_name.c_str()); @@ -233,9 +210,8 @@ void WebSocketApi::vendor_request_register_cb(void *, calldata_t *cd) v->_requests[requestType] = *cb; - blog_debug( - "[WebSocketApi::vendor_request_register_cb] [vendorName: %s] Registered new vendor request: %s", - v->_name.c_str(), requestType); + blog_debug("[WebSocketApi::vendor_request_register_cb] [vendorName: %s] Registered new vendor request: %s", + v->_name.c_str(), requestType); RETURN_SUCCESS(); } @@ -247,8 +223,7 @@ void WebSocketApi::vendor_request_unregister_cb(void *, calldata_t *cd) RETURN_FAILURE(); const char *requestType; - if (!calldata_get_string(cd, "type", &requestType) || - strlen(requestType) == 0) { + if (!calldata_get_string(cd, "type", &requestType) || strlen(requestType) == 0) { blog(LOG_WARNING, "[WebSocketApi::vendor_request_unregister_cb] [vendorName: %s] Failed due to missing `type` string.", v->_name.c_str()); @@ -266,9 +241,8 @@ void WebSocketApi::vendor_request_unregister_cb(void *, calldata_t *cd) v->_requests.erase(requestType); - blog_debug( - "[WebSocketApi::vendor_request_unregister_cb] [vendorName: %s] Unregistered vendor request: %s", - v->_name.c_str(), requestType); + blog_debug("[WebSocketApi::vendor_request_unregister_cb] [vendorName: %s] Unregistered vendor request: %s", + v->_name.c_str(), requestType); RETURN_SUCCESS(); } @@ -282,18 +256,15 @@ void WebSocketApi::vendor_event_emit_cb(void *priv_data, calldata_t *cd) RETURN_FAILURE(); const char *eventType; - if (!calldata_get_string(cd, "type", &eventType) || - strlen(eventType) == 0) { - blog(LOG_WARNING, - "[WebSocketApi::vendor_event_emit_cb] [vendorName: %s] Failed due to missing `type` string.", + if (!calldata_get_string(cd, "type", &eventType) || strlen(eventType) == 0) { + blog(LOG_WARNING, "[WebSocketApi::vendor_event_emit_cb] [vendorName: %s] Failed due to missing `type` string.", v->_name.c_str()); RETURN_FAILURE(); } void *voidEventData; if (!calldata_get_ptr(cd, "data", &voidEventData)) { - blog(LOG_WARNING, - "[WebSocketApi::vendor_event_emit_cb] [vendorName: %s] Failed due to missing `data` pointer.", + blog(LOG_WARNING, "[WebSocketApi::vendor_event_emit_cb] [vendorName: %s] Failed due to missing `data` pointer.", v->_name.c_str()); RETURN_FAILURE(); } diff --git a/src/WebSocketApi.h b/src/WebSocketApi.h index ff09103c..e175bb58 100644 --- a/src/WebSocketApi.h +++ b/src/WebSocketApi.h @@ -17,8 +17,7 @@ public: NoVendorRequest, }; - typedef std::function - EventCallback; + typedef std::function EventCallback; struct Vendor { std::shared_mutex _mutex; @@ -31,9 +30,7 @@ public: void SetEventCallback(EventCallback cb); - enum RequestReturnCode PerformVendorRequest(std::string vendorName, - std::string requestName, - obs_data_t *requestData, + enum RequestReturnCode PerformVendorRequest(std::string vendorName, std::string requestName, obs_data_t *requestData, obs_data_t *responseData); static void get_ph_cb(void *priv_data, calldata_t *cd); @@ -41,8 +38,7 @@ public: static void call_request(void *, calldata_t *cd); static void vendor_register_cb(void *priv_data, calldata_t *cd); static void vendor_request_register_cb(void *priv_data, calldata_t *cd); - static void vendor_request_unregister_cb(void *priv_data, - calldata_t *cd); + static void vendor_request_unregister_cb(void *priv_data, calldata_t *cd); static void vendor_event_emit_cb(void *priv_data, calldata_t *cd); private: diff --git a/src/eventhandler/EventHandler.cpp b/src/eventhandler/EventHandler.cpp index d0dc2422..f3b0c98a 100644 --- a/src/eventhandler/EventHandler.cpp +++ b/src/eventhandler/EventHandler.cpp @@ -32,17 +32,12 @@ EventHandler::EventHandler() signal_handler_t *coreSignalHandler = obs_get_signal_handler(); if (coreSignalHandler) { - signal_handler_connect(coreSignalHandler, "source_create", - SourceCreatedMultiHandler, this); - signal_handler_connect(coreSignalHandler, "source_destroy", - SourceDestroyedMultiHandler, this); - signal_handler_connect(coreSignalHandler, "source_remove", - SourceRemovedMultiHandler, this); - signal_handler_connect(coreSignalHandler, "source_rename", - SourceRenamedMultiHandler, this); + signal_handler_connect(coreSignalHandler, "source_create", SourceCreatedMultiHandler, this); + signal_handler_connect(coreSignalHandler, "source_destroy", SourceDestroyedMultiHandler, this); + signal_handler_connect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this); + signal_handler_connect(coreSignalHandler, "source_rename", SourceRenamedMultiHandler, this); } else { - blog(LOG_ERROR, - "[EventHandler::EventHandler] Unable to get libobs signal handler!"); + blog(LOG_ERROR, "[EventHandler::EventHandler] Unable to get libobs signal handler!"); } blog_debug("[EventHandler::EventHandler] Finished."); @@ -56,17 +51,12 @@ EventHandler::~EventHandler() signal_handler_t *coreSignalHandler = obs_get_signal_handler(); if (coreSignalHandler) { - signal_handler_disconnect(coreSignalHandler, "source_create", - SourceCreatedMultiHandler, this); - signal_handler_disconnect(coreSignalHandler, "source_destroy", - SourceDestroyedMultiHandler, this); - signal_handler_disconnect(coreSignalHandler, "source_remove", - SourceRemovedMultiHandler, this); - signal_handler_disconnect(coreSignalHandler, "source_rename", - SourceRenamedMultiHandler, this); + signal_handler_disconnect(coreSignalHandler, "source_create", SourceCreatedMultiHandler, this); + signal_handler_disconnect(coreSignalHandler, "source_destroy", SourceDestroyedMultiHandler, this); + signal_handler_disconnect(coreSignalHandler, "source_remove", SourceRemovedMultiHandler, this); + signal_handler_disconnect(coreSignalHandler, "source_rename", SourceRenamedMultiHandler, this); } else { - blog(LOG_ERROR, - "[EventHandler::~EventHandler] Unable to get libobs signal handler!"); + blog(LOG_ERROR, "[EventHandler::~EventHandler] Unable to get libobs signal handler!"); } blog_debug("[EventHandler::~EventHandler] Finished."); @@ -88,25 +78,17 @@ void EventHandler::ProcessSubscription(uint64_t eventSubscriptions) if ((eventSubscriptions & EventSubscription::InputVolumeMeters) != 0) { if (_inputVolumeMetersRef.fetch_add(1) == 0) { if (_inputVolumeMetersHandler) - blog(LOG_WARNING, - "[EventHandler::ProcessSubscription] Input volume meter handler already exists!"); + blog(LOG_WARNING, "[EventHandler::ProcessSubscription] Input volume meter handler already exists!"); else - _inputVolumeMetersHandler = std::make_unique< - Utils::Obs::VolumeMeter::Handler>( - std::bind( - &EventHandler:: - HandleInputVolumeMeters, - this, std::placeholders::_1)); + _inputVolumeMetersHandler = std::make_unique( + std::bind(&EventHandler::HandleInputVolumeMeters, this, std::placeholders::_1)); } } - if ((eventSubscriptions & EventSubscription::InputActiveStateChanged) != - 0) + if ((eventSubscriptions & EventSubscription::InputActiveStateChanged) != 0) _inputActiveStateChangedRef++; - if ((eventSubscriptions & EventSubscription::InputShowStateChanged) != - 0) + if ((eventSubscriptions & EventSubscription::InputShowStateChanged) != 0) _inputShowStateChangedRef++; - if ((eventSubscriptions & - EventSubscription::SceneItemTransformChanged) != 0) + if ((eventSubscriptions & EventSubscription::SceneItemTransformChanged) != 0) _sceneItemTransformChangedRef++; } @@ -117,21 +99,16 @@ void EventHandler::ProcessUnsubscription(uint64_t eventSubscriptions) if (_inputVolumeMetersRef.fetch_sub(1) == 1) _inputVolumeMetersHandler.reset(); } - if ((eventSubscriptions & EventSubscription::InputActiveStateChanged) != - 0) + if ((eventSubscriptions & EventSubscription::InputActiveStateChanged) != 0) _inputActiveStateChangedRef--; - if ((eventSubscriptions & EventSubscription::InputShowStateChanged) != - 0) + if ((eventSubscriptions & EventSubscription::InputShowStateChanged) != 0) _inputShowStateChangedRef--; - if ((eventSubscriptions & - EventSubscription::SceneItemTransformChanged) != 0) + if ((eventSubscriptions & EventSubscription::SceneItemTransformChanged) != 0) _sceneItemTransformChangedRef--; } // Function required in order to use default arguments -void EventHandler::BroadcastEvent(uint64_t requiredIntent, - std::string eventType, json eventData, - uint8_t rpcVersion) +void EventHandler::BroadcastEvent(uint64_t requiredIntent, std::string eventType, json eventData, uint8_t rpcVersion) { if (!_broadcastCallback) return; @@ -140,8 +117,7 @@ void EventHandler::BroadcastEvent(uint64_t requiredIntent, } // Connect source signals for Inputs, Scenes, and Transitions. Filters are automatically connected. -void EventHandler::ConnectSourceSignals( - obs_source_t *source) // Applies to inputs and scenes +void EventHandler::ConnectSourceSignals(obs_source_t *source) // Applies to inputs and scenes { if (!source || obs_source_removed(source)) return; @@ -155,74 +131,43 @@ void EventHandler::ConnectSourceSignals( // Inputs if (sourceType == OBS_SOURCE_TYPE_INPUT) { - signal_handler_connect(sh, "activate", - HandleInputActiveStateChanged, this); - signal_handler_connect(sh, "deactivate", - HandleInputActiveStateChanged, this); - signal_handler_connect(sh, "show", HandleInputShowStateChanged, - this); - signal_handler_connect(sh, "hide", HandleInputShowStateChanged, - this); - signal_handler_connect(sh, "mute", HandleInputMuteStateChanged, - this); - signal_handler_connect(sh, "volume", HandleInputVolumeChanged, - this); - signal_handler_connect(sh, "audio_balance", - HandleInputAudioBalanceChanged, this); - signal_handler_connect(sh, "audio_sync", - HandleInputAudioSyncOffsetChanged, this); - signal_handler_connect(sh, "audio_mixers", - HandleInputAudioTracksChanged, this); - signal_handler_connect(sh, "audio_monitoring", - HandleInputAudioMonitorTypeChanged, - this); - signal_handler_connect(sh, "media_started", - HandleMediaInputPlaybackStarted, this); - signal_handler_connect(sh, "media_ended", - HandleMediaInputPlaybackEnded, this); - signal_handler_connect(sh, "media_pause", - SourceMediaPauseMultiHandler, this); - signal_handler_connect(sh, "media_play", - SourceMediaPlayMultiHandler, this); - signal_handler_connect(sh, "media_restart", - SourceMediaRestartMultiHandler, this); - signal_handler_connect(sh, "media_stopped", - SourceMediaStopMultiHandler, this); - signal_handler_connect(sh, "media_next", - SourceMediaNextMultiHandler, this); - signal_handler_connect(sh, "media_previous", - SourceMediaPreviousMultiHandler, this); + signal_handler_connect(sh, "activate", HandleInputActiveStateChanged, this); + signal_handler_connect(sh, "deactivate", HandleInputActiveStateChanged, this); + signal_handler_connect(sh, "show", HandleInputShowStateChanged, this); + signal_handler_connect(sh, "hide", HandleInputShowStateChanged, this); + signal_handler_connect(sh, "mute", HandleInputMuteStateChanged, this); + signal_handler_connect(sh, "volume", HandleInputVolumeChanged, this); + signal_handler_connect(sh, "audio_balance", HandleInputAudioBalanceChanged, this); + signal_handler_connect(sh, "audio_sync", HandleInputAudioSyncOffsetChanged, this); + signal_handler_connect(sh, "audio_mixers", HandleInputAudioTracksChanged, this); + signal_handler_connect(sh, "audio_monitoring", HandleInputAudioMonitorTypeChanged, this); + signal_handler_connect(sh, "media_started", HandleMediaInputPlaybackStarted, this); + signal_handler_connect(sh, "media_ended", HandleMediaInputPlaybackEnded, this); + signal_handler_connect(sh, "media_pause", SourceMediaPauseMultiHandler, this); + signal_handler_connect(sh, "media_play", SourceMediaPlayMultiHandler, this); + signal_handler_connect(sh, "media_restart", SourceMediaRestartMultiHandler, this); + signal_handler_connect(sh, "media_stopped", SourceMediaStopMultiHandler, this); + signal_handler_connect(sh, "media_next", SourceMediaNextMultiHandler, this); + signal_handler_connect(sh, "media_previous", SourceMediaPreviousMultiHandler, this); } // Scenes if (sourceType == OBS_SOURCE_TYPE_SCENE) { - signal_handler_connect(sh, "item_add", HandleSceneItemCreated, - this); - signal_handler_connect(sh, "item_remove", - HandleSceneItemRemoved, this); - signal_handler_connect(sh, "reorder", - HandleSceneItemListReindexed, this); - signal_handler_connect(sh, "item_visible", - HandleSceneItemEnableStateChanged, this); - signal_handler_connect(sh, "item_locked", - HandleSceneItemLockStateChanged, this); - signal_handler_connect(sh, "item_select", - HandleSceneItemSelected, this); - signal_handler_connect(sh, "item_transform", - HandleSceneItemTransformChanged, this); + signal_handler_connect(sh, "item_add", HandleSceneItemCreated, this); + signal_handler_connect(sh, "item_remove", HandleSceneItemRemoved, this); + signal_handler_connect(sh, "reorder", HandleSceneItemListReindexed, this); + signal_handler_connect(sh, "item_visible", HandleSceneItemEnableStateChanged, this); + signal_handler_connect(sh, "item_locked", HandleSceneItemLockStateChanged, this); + signal_handler_connect(sh, "item_select", HandleSceneItemSelected, this); + signal_handler_connect(sh, "item_transform", HandleSceneItemTransformChanged, this); } // Scenes and Inputs - if (sourceType == OBS_SOURCE_TYPE_INPUT || - sourceType == OBS_SOURCE_TYPE_SCENE) { - signal_handler_connect(sh, "reorder_filters", - HandleSourceFilterListReindexed, this); - signal_handler_connect(sh, "filter_add", FilterAddMultiHandler, - this); - signal_handler_connect(sh, "filter_remove", - FilterRemoveMultiHandler, this); - auto enumFilters = [](obs_source_t *, obs_source_t *filter, - void *param) { + if (sourceType == OBS_SOURCE_TYPE_INPUT || sourceType == OBS_SOURCE_TYPE_SCENE) { + signal_handler_connect(sh, "reorder_filters", HandleSourceFilterListReindexed, this); + signal_handler_connect(sh, "filter_add", FilterAddMultiHandler, this); + signal_handler_connect(sh, "filter_remove", FilterRemoveMultiHandler, this); + auto enumFilters = [](obs_source_t *, obs_source_t *filter, void *param) { auto eventHandler = static_cast(param); eventHandler->ConnectSourceSignals(filter); }; @@ -231,21 +176,15 @@ void EventHandler::ConnectSourceSignals( // Transitions if (sourceType == OBS_SOURCE_TYPE_TRANSITION) { - signal_handler_connect(sh, "transition_start", - HandleSceneTransitionStarted, this); - signal_handler_connect(sh, "transition_stop", - HandleSceneTransitionEnded, this); - signal_handler_connect(sh, "transition_video_stop", - HandleSceneTransitionVideoEnded, this); + signal_handler_connect(sh, "transition_start", HandleSceneTransitionStarted, this); + signal_handler_connect(sh, "transition_stop", HandleSceneTransitionEnded, this); + signal_handler_connect(sh, "transition_video_stop", HandleSceneTransitionVideoEnded, this); } // Filters if (sourceType == OBS_SOURCE_TYPE_FILTER) { - signal_handler_connect(sh, "enable", - HandleSourceFilterEnableStateChanged, - this); - signal_handler_connect(sh, "rename", - HandleSourceFilterNameChanged, this); + signal_handler_connect(sh, "enable", HandleSourceFilterEnableStateChanged, this); + signal_handler_connect(sh, "rename", HandleSourceFilterNameChanged, this); } } @@ -261,81 +200,43 @@ void EventHandler::DisconnectSourceSignals(obs_source_t *source) // Inputs if (sourceType == OBS_SOURCE_TYPE_INPUT) { - signal_handler_disconnect(sh, "activate", - HandleInputActiveStateChanged, this); - signal_handler_disconnect(sh, "deactivate", - HandleInputActiveStateChanged, this); - signal_handler_disconnect(sh, "show", - HandleInputShowStateChanged, this); - signal_handler_disconnect(sh, "hide", - HandleInputShowStateChanged, this); - signal_handler_disconnect(sh, "mute", - HandleInputMuteStateChanged, this); - signal_handler_disconnect(sh, "volume", - HandleInputVolumeChanged, this); - signal_handler_disconnect(sh, "audio_balance", - HandleInputAudioBalanceChanged, this); - signal_handler_disconnect(sh, "audio_sync", - HandleInputAudioSyncOffsetChanged, - this); - signal_handler_disconnect(sh, "audio_mixers", - HandleInputAudioTracksChanged, this); - signal_handler_disconnect(sh, "audio_monitoring", - HandleInputAudioMonitorTypeChanged, - this); - signal_handler_disconnect(sh, "media_started", - HandleMediaInputPlaybackStarted, - this); - signal_handler_disconnect(sh, "media_ended", - HandleMediaInputPlaybackEnded, this); - signal_handler_disconnect(sh, "media_pause", - SourceMediaPauseMultiHandler, this); - signal_handler_disconnect(sh, "media_play", - SourceMediaPlayMultiHandler, this); - signal_handler_disconnect(sh, "media_restart", - SourceMediaRestartMultiHandler, this); - signal_handler_disconnect(sh, "media_stopped", - SourceMediaStopMultiHandler, this); - signal_handler_disconnect(sh, "media_next", - SourceMediaNextMultiHandler, this); - signal_handler_disconnect(sh, "media_previous", - SourceMediaPreviousMultiHandler, - this); + signal_handler_disconnect(sh, "activate", HandleInputActiveStateChanged, this); + signal_handler_disconnect(sh, "deactivate", HandleInputActiveStateChanged, this); + signal_handler_disconnect(sh, "show", HandleInputShowStateChanged, this); + signal_handler_disconnect(sh, "hide", HandleInputShowStateChanged, this); + signal_handler_disconnect(sh, "mute", HandleInputMuteStateChanged, this); + signal_handler_disconnect(sh, "volume", HandleInputVolumeChanged, this); + signal_handler_disconnect(sh, "audio_balance", HandleInputAudioBalanceChanged, this); + signal_handler_disconnect(sh, "audio_sync", HandleInputAudioSyncOffsetChanged, this); + signal_handler_disconnect(sh, "audio_mixers", HandleInputAudioTracksChanged, this); + signal_handler_disconnect(sh, "audio_monitoring", HandleInputAudioMonitorTypeChanged, this); + signal_handler_disconnect(sh, "media_started", HandleMediaInputPlaybackStarted, this); + signal_handler_disconnect(sh, "media_ended", HandleMediaInputPlaybackEnded, this); + signal_handler_disconnect(sh, "media_pause", SourceMediaPauseMultiHandler, this); + signal_handler_disconnect(sh, "media_play", SourceMediaPlayMultiHandler, this); + signal_handler_disconnect(sh, "media_restart", SourceMediaRestartMultiHandler, this); + signal_handler_disconnect(sh, "media_stopped", SourceMediaStopMultiHandler, this); + signal_handler_disconnect(sh, "media_next", SourceMediaNextMultiHandler, this); + signal_handler_disconnect(sh, "media_previous", SourceMediaPreviousMultiHandler, this); } // Scenes if (sourceType == OBS_SOURCE_TYPE_SCENE) { - signal_handler_disconnect(sh, "item_add", - HandleSceneItemCreated, this); - signal_handler_disconnect(sh, "item_remove", - HandleSceneItemRemoved, this); - signal_handler_disconnect(sh, "reorder", - HandleSceneItemListReindexed, this); - signal_handler_disconnect(sh, "item_visible", - HandleSceneItemEnableStateChanged, - this); - signal_handler_disconnect(sh, "item_locked", - HandleSceneItemLockStateChanged, - this); - signal_handler_disconnect(sh, "item_select", - HandleSceneItemSelected, this); - signal_handler_disconnect(sh, "item_transform", - HandleSceneItemTransformChanged, - this); + signal_handler_disconnect(sh, "item_add", HandleSceneItemCreated, this); + signal_handler_disconnect(sh, "item_remove", HandleSceneItemRemoved, this); + signal_handler_disconnect(sh, "reorder", HandleSceneItemListReindexed, this); + signal_handler_disconnect(sh, "item_visible", HandleSceneItemEnableStateChanged, this); + signal_handler_disconnect(sh, "item_locked", HandleSceneItemLockStateChanged, this); + signal_handler_disconnect(sh, "item_select", HandleSceneItemSelected, this); + signal_handler_disconnect(sh, "item_transform", HandleSceneItemTransformChanged, this); } // Inputs and Scenes - if (sourceType == OBS_SOURCE_TYPE_INPUT || - sourceType == OBS_SOURCE_TYPE_SCENE) { - signal_handler_disconnect(sh, "reorder_filters", - HandleSourceFilterListReindexed, - this); - signal_handler_disconnect(sh, "filter_add", - FilterAddMultiHandler, this); - signal_handler_disconnect(sh, "filter_remove", - FilterRemoveMultiHandler, this); - auto enumFilters = [](obs_source_t *, obs_source_t *filter, - void *param) { + if (sourceType == OBS_SOURCE_TYPE_INPUT || sourceType == OBS_SOURCE_TYPE_SCENE) { + signal_handler_disconnect(sh, "reorder_filters", HandleSourceFilterListReindexed, this); + signal_handler_disconnect(sh, "filter_add", FilterAddMultiHandler, this); + signal_handler_disconnect(sh, "filter_remove", FilterRemoveMultiHandler, this); + auto enumFilters = [](obs_source_t *, obs_source_t *filter, void *param) { auto eventHandler = static_cast(param); eventHandler->DisconnectSourceSignals(filter); }; @@ -344,32 +245,23 @@ void EventHandler::DisconnectSourceSignals(obs_source_t *source) // Transitions if (sourceType == OBS_SOURCE_TYPE_TRANSITION) { - signal_handler_disconnect(sh, "transition_start", - HandleSceneTransitionStarted, this); - signal_handler_disconnect(sh, "transition_stop", - HandleSceneTransitionEnded, this); - signal_handler_disconnect(sh, "transition_video_stop", - HandleSceneTransitionVideoEnded, - this); + signal_handler_disconnect(sh, "transition_start", HandleSceneTransitionStarted, this); + signal_handler_disconnect(sh, "transition_stop", HandleSceneTransitionEnded, this); + signal_handler_disconnect(sh, "transition_video_stop", HandleSceneTransitionVideoEnded, this); } // Filters if (sourceType == OBS_SOURCE_TYPE_FILTER) { - signal_handler_disconnect(sh, "enable", - HandleSourceFilterEnableStateChanged, - this); - signal_handler_disconnect(sh, "rename", - HandleSourceFilterNameChanged, this); + signal_handler_disconnect(sh, "enable", HandleSourceFilterEnableStateChanged, this); + signal_handler_disconnect(sh, "rename", HandleSourceFilterNameChanged, this); } } -void EventHandler::OnFrontendEvent(enum obs_frontend_event event, - void *private_data) +void EventHandler::OnFrontendEvent(enum obs_frontend_event event, void *private_data) { auto eventHandler = static_cast(private_data); - if (!eventHandler->_obsLoaded.load() && - event != OBS_FRONTEND_EVENT_FINISHED_LOADING) + if (!eventHandler->_obsLoaded.load() && event != OBS_FRONTEND_EVENT_FINISHED_LOADING) return; switch (event) { @@ -384,10 +276,8 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, // In the case that plugins become hotloadable, this will have to go back into `EventHandler::EventHandler()` // Enumerate inputs and connect each one { - auto enumInputs = [](void *param, - obs_source_t *source) { - auto eventHandler = - static_cast(param); + auto enumInputs = [](void *param, obs_source_t *source) { + auto eventHandler = static_cast(param); eventHandler->ConnectSourceSignals(source); return true; }; @@ -396,10 +286,8 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, // Enumerate scenes and connect each one { - auto enumScenes = [](void *param, - obs_source_t *source) { - auto eventHandler = - static_cast(param); + auto enumScenes = [](void *param, obs_source_t *source) { + auto eventHandler = static_cast(param); eventHandler->ConnectSourceSignals(source); return true; }; @@ -411,8 +299,7 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, obs_frontend_source_list transitions = {}; obs_frontend_get_transitions(&transitions); for (size_t i = 0; i < transitions.sources.num; i++) { - obs_source_t *transition = - transitions.sources.array[i]; + obs_source_t *transition = transitions.sources.array[i]; eventHandler->ConnectSourceSignals(transition); } obs_frontend_source_list_free(&transitions); @@ -427,18 +314,15 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, case OBS_FRONTEND_EVENT_EXIT: eventHandler->HandleExitStarted(); - blog_debug( - "[EventHandler::OnFrontendEvent] OBS is unloading. Disabling events..."); + blog_debug("[EventHandler::OnFrontendEvent] OBS is unloading. Disabling events..."); // Disconnect source signals and disable events when OBS starts unloading (to reduce extra logging). eventHandler->_obsLoaded.store(false); // In the case that plugins become hotloadable, this will have to go back into `EventHandler::~EventHandler()` // Enumerate inputs and disconnect each one { - auto enumInputs = [](void *param, - obs_source_t *source) { - auto eventHandler = - static_cast(param); + auto enumInputs = [](void *param, obs_source_t *source) { + auto eventHandler = static_cast(param); eventHandler->DisconnectSourceSignals(source); return true; }; @@ -447,10 +331,8 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, // Enumerate scenes and disconnect each one { - auto enumScenes = [](void *param, - obs_source_t *source) { - auto eventHandler = - static_cast(param); + auto enumScenes = [](void *param, obs_source_t *source) { + auto eventHandler = static_cast(param); eventHandler->DisconnectSourceSignals(source); return true; }; @@ -462,10 +344,8 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, obs_frontend_source_list transitions = {}; obs_frontend_get_transitions(&transitions); for (size_t i = 0; i < transitions.sources.num; i++) { - obs_source_t *transition = - transitions.sources.array[i]; - eventHandler->DisconnectSourceSignals( - transition); + obs_source_t *transition = transitions.sources.array[i]; + eventHandler->DisconnectSourceSignals(transition); } obs_frontend_source_list_free(&transitions); } @@ -546,68 +426,52 @@ void EventHandler::OnFrontendEvent(enum obs_frontend_event event, // Outputs case OBS_FRONTEND_EVENT_STREAMING_STARTING: - eventHandler->HandleStreamStateChanged( - OBS_WEBSOCKET_OUTPUT_STARTING); + eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STARTING); break; case OBS_FRONTEND_EVENT_STREAMING_STARTED: - eventHandler->HandleStreamStateChanged( - OBS_WEBSOCKET_OUTPUT_STARTED); + eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STARTED); break; case OBS_FRONTEND_EVENT_STREAMING_STOPPING: - eventHandler->HandleStreamStateChanged( - OBS_WEBSOCKET_OUTPUT_STOPPING); + eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPING); break; case OBS_FRONTEND_EVENT_STREAMING_STOPPED: - eventHandler->HandleStreamStateChanged( - OBS_WEBSOCKET_OUTPUT_STOPPED); + eventHandler->HandleStreamStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPED); break; case OBS_FRONTEND_EVENT_RECORDING_STARTING: - eventHandler->HandleRecordStateChanged( - OBS_WEBSOCKET_OUTPUT_STARTING); + eventHandler->HandleRecordStateChanged(OBS_WEBSOCKET_OUTPUT_STARTING); break; case OBS_FRONTEND_EVENT_RECORDING_STARTED: - eventHandler->HandleRecordStateChanged( - OBS_WEBSOCKET_OUTPUT_STARTED); + eventHandler->HandleRecordStateChanged(OBS_WEBSOCKET_OUTPUT_STARTED); break; case OBS_FRONTEND_EVENT_RECORDING_STOPPING: - eventHandler->HandleRecordStateChanged( - OBS_WEBSOCKET_OUTPUT_STOPPING); + eventHandler->HandleRecordStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPING); break; case OBS_FRONTEND_EVENT_RECORDING_STOPPED: - eventHandler->HandleRecordStateChanged( - OBS_WEBSOCKET_OUTPUT_STOPPED); + eventHandler->HandleRecordStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPED); break; case OBS_FRONTEND_EVENT_RECORDING_PAUSED: - eventHandler->HandleRecordStateChanged( - OBS_WEBSOCKET_OUTPUT_PAUSED); + eventHandler->HandleRecordStateChanged(OBS_WEBSOCKET_OUTPUT_PAUSED); break; case OBS_FRONTEND_EVENT_RECORDING_UNPAUSED: - eventHandler->HandleRecordStateChanged( - OBS_WEBSOCKET_OUTPUT_RESUMED); + eventHandler->HandleRecordStateChanged(OBS_WEBSOCKET_OUTPUT_RESUMED); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING: - eventHandler->HandleReplayBufferStateChanged( - OBS_WEBSOCKET_OUTPUT_STARTING); + eventHandler->HandleReplayBufferStateChanged(OBS_WEBSOCKET_OUTPUT_STARTING); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED: - eventHandler->HandleReplayBufferStateChanged( - OBS_WEBSOCKET_OUTPUT_STARTED); + eventHandler->HandleReplayBufferStateChanged(OBS_WEBSOCKET_OUTPUT_STARTED); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING: - eventHandler->HandleReplayBufferStateChanged( - OBS_WEBSOCKET_OUTPUT_STOPPING); + eventHandler->HandleReplayBufferStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPING); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED: - eventHandler->HandleReplayBufferStateChanged( - OBS_WEBSOCKET_OUTPUT_STOPPED); + eventHandler->HandleReplayBufferStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPED); break; case OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED: - eventHandler->HandleVirtualcamStateChanged( - OBS_WEBSOCKET_OUTPUT_STARTED); + eventHandler->HandleVirtualcamStateChanged(OBS_WEBSOCKET_OUTPUT_STARTED); break; case OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED: - eventHandler->HandleVirtualcamStateChanged( - OBS_WEBSOCKET_OUTPUT_STOPPED); + eventHandler->HandleVirtualcamStateChanged(OBS_WEBSOCKET_OUTPUT_STOPPED); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED: eventHandler->HandleReplayBufferSaved(); @@ -722,14 +586,12 @@ void EventHandler::SourceRenamedMultiHandler(void *param, calldata_t *data) switch (obs_source_get_type(source)) { case OBS_SOURCE_TYPE_INPUT: - eventHandler->HandleInputNameChanged(source, oldSourceName, - sourceName); + eventHandler->HandleInputNameChanged(source, oldSourceName, sourceName); break; case OBS_SOURCE_TYPE_TRANSITION: break; case OBS_SOURCE_TYPE_SCENE: - eventHandler->HandleSceneNameChanged(source, oldSourceName, - sourceName); + eventHandler->HandleSceneNameChanged(source, oldSourceName, sourceName); break; default: break; diff --git a/src/eventhandler/EventHandler.h b/src/eventhandler/EventHandler.h index 448c12ef..fa50f1bd 100644 --- a/src/eventhandler/EventHandler.h +++ b/src/eventhandler/EventHandler.h @@ -34,8 +34,7 @@ public: EventHandler(); ~EventHandler(); - typedef std::function - BroadcastCallback; + typedef std::function BroadcastCallback; void SetBroadcastCallback(BroadcastCallback cb); typedef std::function ObsLoadedCallback; void SetObsLoadedCallback(ObsLoadedCallback cb); @@ -49,8 +48,7 @@ private: std::atomic _obsLoaded; - std::unique_ptr - _inputVolumeMetersHandler; + std::unique_ptr _inputVolumeMetersHandler; std::atomic _inputVolumeMetersRef; std::atomic _inputActiveStateChangedRef; std::atomic _inputShowStateChangedRef; @@ -59,12 +57,10 @@ private: void ConnectSourceSignals(obs_source_t *source); void DisconnectSourceSignals(obs_source_t *source); - void BroadcastEvent(uint64_t requiredIntent, std::string eventType, - json eventData = nullptr, uint8_t rpcVersion = 0); + void BroadcastEvent(uint64_t requiredIntent, std::string eventType, json eventData = nullptr, uint8_t rpcVersion = 0); // Signal handler: frontend - static void OnFrontendEvent(enum obs_frontend_event event, - void *private_data); + static void OnFrontendEvent(enum obs_frontend_event event, void *private_data); // Signal handler: libobs static void SourceCreatedMultiHandler(void *param, calldata_t *data); @@ -75,12 +71,10 @@ private: static void SourceRenamedMultiHandler(void *param, calldata_t *data); static void SourceMediaPauseMultiHandler(void *param, calldata_t *data); static void SourceMediaPlayMultiHandler(void *param, calldata_t *data); - static void SourceMediaRestartMultiHandler(void *param, - calldata_t *data); + static void SourceMediaRestartMultiHandler(void *param, calldata_t *data); static void SourceMediaStopMultiHandler(void *param, calldata_t *data); static void SourceMediaNextMultiHandler(void *param, calldata_t *data); - static void SourceMediaPreviousMultiHandler(void *param, - calldata_t *data); + static void SourceMediaPreviousMultiHandler(void *param, calldata_t *data); // General void HandleExitStarted(); @@ -97,9 +91,7 @@ private: // Scenes void HandleSceneCreated(obs_source_t *source); void HandleSceneRemoved(obs_source_t *source); - void HandleSceneNameChanged(obs_source_t *source, - std::string oldSceneName, - std::string sceneName); + void HandleSceneNameChanged(obs_source_t *source, std::string oldSceneName, std::string sceneName); void HandleCurrentProgramSceneChanged(); void HandleCurrentPreviewSceneChanged(); void HandleSceneListChanged(); @@ -107,67 +99,47 @@ private: // Inputs void HandleInputCreated(obs_source_t *source); void HandleInputRemoved(obs_source_t *source); - void HandleInputNameChanged(obs_source_t *source, - std::string oldInputName, - std::string inputName); - void HandleInputVolumeMeters( - std::vector inputs); // AudioMeter::Handler callback - static void - HandleInputActiveStateChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleInputShowStateChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleInputMuteStateChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleInputVolumeChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleInputAudioBalanceChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleInputAudioSyncOffsetChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleInputAudioTracksChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleInputAudioMonitorTypeChanged(void *param, - calldata_t *data); // Direct callback + void HandleInputNameChanged(obs_source_t *source, std::string oldInputName, std::string inputName); + void HandleInputVolumeMeters(std::vector inputs); // AudioMeter::Handler callback + static void HandleInputActiveStateChanged(void *param, + calldata_t *data); // Direct callback + static void HandleInputShowStateChanged(void *param, + calldata_t *data); // Direct callback + static void HandleInputMuteStateChanged(void *param, + calldata_t *data); // Direct callback + static void HandleInputVolumeChanged(void *param, + calldata_t *data); // Direct callback + static void HandleInputAudioBalanceChanged(void *param, + calldata_t *data); // Direct callback + static void HandleInputAudioSyncOffsetChanged(void *param, + calldata_t *data); // Direct callback + static void HandleInputAudioTracksChanged(void *param, + calldata_t *data); // Direct callback + static void HandleInputAudioMonitorTypeChanged(void *param, + calldata_t *data); // Direct callback // Transitions void HandleCurrentSceneTransitionChanged(); void HandleCurrentSceneTransitionDurationChanged(); - static void - HandleSceneTransitionStarted(void *param, - calldata_t *data); // Direct callback - static void - HandleSceneTransitionEnded(void *param, - calldata_t *data); // Direct callback - static void - HandleSceneTransitionVideoEnded(void *param, - calldata_t *data); // Direct callback + static void HandleSceneTransitionStarted(void *param, + calldata_t *data); // Direct callback + static void HandleSceneTransitionEnded(void *param, + calldata_t *data); // Direct callback + static void HandleSceneTransitionVideoEnded(void *param, + calldata_t *data); // Direct callback // Filters static void FilterAddMultiHandler(void *param, calldata_t *data); // Direct callback - static void - FilterRemoveMultiHandler(void *param, - calldata_t *data); // Direct callback - static void - HandleSourceFilterListReindexed(void *param, - calldata_t *data); // Direct callback - void HandleSourceFilterCreated(obs_source_t *source, - obs_source_t *filter); - void HandleSourceFilterRemoved(obs_source_t *source, - obs_source_t *filter); - static void - HandleSourceFilterNameChanged(void *param, - calldata_t *data); // Direct callback - static void HandleSourceFilterEnableStateChanged( - void *param, calldata_t *data); // Direct callback + static void FilterRemoveMultiHandler(void *param, + calldata_t *data); // Direct callback + static void HandleSourceFilterListReindexed(void *param, + calldata_t *data); // Direct callback + void HandleSourceFilterCreated(obs_source_t *source, obs_source_t *filter); + void HandleSourceFilterRemoved(obs_source_t *source, obs_source_t *filter); + static void HandleSourceFilterNameChanged(void *param, + calldata_t *data); // Direct callback + static void HandleSourceFilterEnableStateChanged(void *param, calldata_t *data); // Direct callback // Outputs void HandleStreamStateChanged(ObsOutputState state); @@ -181,29 +153,21 @@ private: calldata_t *data); // Direct callback static void HandleSceneItemRemoved(void *param, calldata_t *data); // Direct callback - static void - HandleSceneItemListReindexed(void *param, - calldata_t *data); // Direct callback - static void - HandleSceneItemEnableStateChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleSceneItemLockStateChanged(void *param, - calldata_t *data); // Direct callback - static void - HandleSceneItemSelected(void *param, - calldata_t *data); // Direct callback - static void - HandleSceneItemTransformChanged(void *param, - calldata_t *data); // Direct callback + static void HandleSceneItemListReindexed(void *param, + calldata_t *data); // Direct callback + static void HandleSceneItemEnableStateChanged(void *param, + calldata_t *data); // Direct callback + static void HandleSceneItemLockStateChanged(void *param, + calldata_t *data); // Direct callback + static void HandleSceneItemSelected(void *param, + calldata_t *data); // Direct callback + static void HandleSceneItemTransformChanged(void *param, + calldata_t *data); // Direct callback // Media Inputs - static void - HandleMediaInputPlaybackStarted(void *param, - calldata_t *data); // Direct callback - static void - HandleMediaInputPlaybackEnded(void *param, - calldata_t *data); // Direct callback - void HandleMediaInputActionTriggered(obs_source_t *source, - ObsMediaInputAction action); + static void HandleMediaInputPlaybackStarted(void *param, + calldata_t *data); // Direct callback + static void HandleMediaInputPlaybackEnded(void *param, + calldata_t *data); // Direct callback + void HandleMediaInputActionTriggered(obs_source_t *source, ObsMediaInputAction action); }; diff --git a/src/eventhandler/EventHandler_Config.cpp b/src/eventhandler/EventHandler_Config.cpp index 3edfdfc6..d93bc621 100644 --- a/src/eventhandler/EventHandler_Config.cpp +++ b/src/eventhandler/EventHandler_Config.cpp @@ -38,10 +38,8 @@ with this program. If not, see void EventHandler::HandleCurrentSceneCollectionChanging() { json eventData; - eventData["sceneCollectionName"] = - Utils::Obs::StringHelper::GetCurrentSceneCollection(); - BroadcastEvent(EventSubscription::Config, - "CurrentSceneCollectionChanging", eventData); + eventData["sceneCollectionName"] = Utils::Obs::StringHelper::GetCurrentSceneCollection(); + BroadcastEvent(EventSubscription::Config, "CurrentSceneCollectionChanging", eventData); } /** @@ -62,10 +60,8 @@ void EventHandler::HandleCurrentSceneCollectionChanging() void EventHandler::HandleCurrentSceneCollectionChanged() { json eventData; - eventData["sceneCollectionName"] = - Utils::Obs::StringHelper::GetCurrentSceneCollection(); - BroadcastEvent(EventSubscription::Config, - "CurrentSceneCollectionChanged", eventData); + eventData["sceneCollectionName"] = Utils::Obs::StringHelper::GetCurrentSceneCollection(); + BroadcastEvent(EventSubscription::Config, "CurrentSceneCollectionChanged", eventData); } /** @@ -84,10 +80,8 @@ void EventHandler::HandleCurrentSceneCollectionChanged() void EventHandler::HandleSceneCollectionListChanged() { json eventData; - eventData["sceneCollections"] = - Utils::Obs::ArrayHelper::GetSceneCollectionList(); - BroadcastEvent(EventSubscription::Config, "SceneCollectionListChanged", - eventData); + eventData["sceneCollections"] = Utils::Obs::ArrayHelper::GetSceneCollectionList(); + BroadcastEvent(EventSubscription::Config, "SceneCollectionListChanged", eventData); } /** @@ -106,10 +100,8 @@ void EventHandler::HandleSceneCollectionListChanged() void EventHandler::HandleCurrentProfileChanging() { json eventData; - eventData["profileName"] = - Utils::Obs::StringHelper::GetCurrentProfile(); - BroadcastEvent(EventSubscription::Config, "CurrentProfileChanging", - eventData); + eventData["profileName"] = Utils::Obs::StringHelper::GetCurrentProfile(); + BroadcastEvent(EventSubscription::Config, "CurrentProfileChanging", eventData); } /** @@ -128,10 +120,8 @@ void EventHandler::HandleCurrentProfileChanging() void EventHandler::HandleCurrentProfileChanged() { json eventData; - eventData["profileName"] = - Utils::Obs::StringHelper::GetCurrentProfile(); - BroadcastEvent(EventSubscription::Config, "CurrentProfileChanged", - eventData); + eventData["profileName"] = Utils::Obs::StringHelper::GetCurrentProfile(); + BroadcastEvent(EventSubscription::Config, "CurrentProfileChanged", eventData); } /** @@ -151,6 +141,5 @@ void EventHandler::HandleProfileListChanged() { json eventData; eventData["profiles"] = Utils::Obs::ArrayHelper::GetProfileList(); - BroadcastEvent(EventSubscription::Config, "ProfileListChanged", - eventData); + BroadcastEvent(EventSubscription::Config, "ProfileListChanged", eventData); } diff --git a/src/eventhandler/EventHandler_Filters.cpp b/src/eventhandler/EventHandler_Filters.cpp index 49250ff6..59c1783c 100644 --- a/src/eventhandler/EventHandler_Filters.cpp +++ b/src/eventhandler/EventHandler_Filters.cpp @@ -63,8 +63,7 @@ void EventHandler::FilterRemoveMultiHandler(void *param, calldata_t *data) * @api events * @category filters */ -void EventHandler::HandleSourceFilterListReindexed(void *param, - calldata_t *data) +void EventHandler::HandleSourceFilterListReindexed(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -74,10 +73,8 @@ void EventHandler::HandleSourceFilterListReindexed(void *param, json eventData; eventData["sourceName"] = obs_source_get_name(source); - eventData["filters"] = - Utils::Obs::ArrayHelper::GetSourceFilterList(source); - eventHandler->BroadcastEvent(EventSubscription::Filters, - "SourceFilterListReindexed", eventData); + eventData["filters"] = Utils::Obs::ArrayHelper::GetSourceFilterList(source); + eventHandler->BroadcastEvent(EventSubscription::Filters, "SourceFilterListReindexed", eventData); } /** @@ -98,26 +95,20 @@ void EventHandler::HandleSourceFilterListReindexed(void *param, * @api events * @category filters */ -void EventHandler::HandleSourceFilterCreated(obs_source_t *source, - obs_source_t *filter) +void EventHandler::HandleSourceFilterCreated(obs_source_t *source, obs_source_t *filter) { std::string filterKind = obs_source_get_id(filter); OBSDataAutoRelease filterSettings = obs_source_get_settings(filter); - OBSDataAutoRelease defaultFilterSettings = - obs_get_source_defaults(filterKind.c_str()); + OBSDataAutoRelease defaultFilterSettings = obs_get_source_defaults(filterKind.c_str()); json eventData; eventData["sourceName"] = obs_source_get_name(source); eventData["filterName"] = obs_source_get_name(filter); eventData["filterKind"] = filterKind; - eventData["filterIndex"] = - Utils::Obs::NumberHelper::GetSourceFilterIndex(source, filter); - eventData["filterSettings"] = - Utils::Json::ObsDataToJson(filterSettings); - eventData["defaultFilterSettings"] = - Utils::Json::ObsDataToJson(defaultFilterSettings, true); - BroadcastEvent(EventSubscription::Filters, "SourceFilterCreated", - eventData); + eventData["filterIndex"] = Utils::Obs::NumberHelper::GetSourceFilterIndex(source, filter); + eventData["filterSettings"] = Utils::Json::ObsDataToJson(filterSettings); + eventData["defaultFilterSettings"] = Utils::Json::ObsDataToJson(defaultFilterSettings, true); + BroadcastEvent(EventSubscription::Filters, "SourceFilterCreated", eventData); } /** @@ -134,14 +125,12 @@ void EventHandler::HandleSourceFilterCreated(obs_source_t *source, * @api events * @category filters */ -void EventHandler::HandleSourceFilterRemoved(obs_source_t *source, - obs_source_t *filter) +void EventHandler::HandleSourceFilterRemoved(obs_source_t *source, obs_source_t *filter) { json eventData; eventData["sourceName"] = obs_source_get_name(source); eventData["filterName"] = obs_source_get_name(filter); - BroadcastEvent(EventSubscription::Filters, "SourceFilterRemoved", - eventData); + BroadcastEvent(EventSubscription::Filters, "SourceFilterRemoved", eventData); } /** @@ -168,12 +157,10 @@ void EventHandler::HandleSourceFilterNameChanged(void *param, calldata_t *data) return; json eventData; - eventData["sourceName"] = - obs_source_get_name(obs_filter_get_parent(filter)); + eventData["sourceName"] = obs_source_get_name(obs_filter_get_parent(filter)); eventData["oldFilterName"] = calldata_string(data, "prev_name"); eventData["filterName"] = calldata_string(data, "new_name"); - eventHandler->BroadcastEvent(EventSubscription::Filters, - "SourceFilterNameChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::Filters, "SourceFilterNameChanged", eventData); } /** @@ -191,8 +178,7 @@ void EventHandler::HandleSourceFilterNameChanged(void *param, calldata_t *data) * @api events * @category filters */ -void EventHandler::HandleSourceFilterEnableStateChanged(void *param, - calldata_t *data) +void EventHandler::HandleSourceFilterEnableStateChanged(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -211,7 +197,5 @@ void EventHandler::HandleSourceFilterEnableStateChanged(void *param, eventData["sourceName"] = obs_source_get_name(source); eventData["filterName"] = obs_source_get_name(filter); eventData["filterEnabled"] = filterEnabled; - eventHandler->BroadcastEvent(EventSubscription::Filters, - "SourceFilterEnableStateChanged", - eventData); + eventHandler->BroadcastEvent(EventSubscription::Filters, "SourceFilterEnableStateChanged", eventData); } diff --git a/src/eventhandler/EventHandler_Inputs.cpp b/src/eventhandler/EventHandler_Inputs.cpp index 105d728f..8c5a2e96 100644 --- a/src/eventhandler/EventHandler_Inputs.cpp +++ b/src/eventhandler/EventHandler_Inputs.cpp @@ -40,17 +40,14 @@ void EventHandler::HandleInputCreated(obs_source_t *source) { std::string inputKind = obs_source_get_id(source); OBSDataAutoRelease inputSettings = obs_source_get_settings(source); - OBSDataAutoRelease defaultInputSettings = - obs_get_source_defaults(inputKind.c_str()); + OBSDataAutoRelease defaultInputSettings = obs_get_source_defaults(inputKind.c_str()); json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["inputKind"] = inputKind; - eventData["unversionedInputKind"] = - obs_source_get_unversioned_id(source); + eventData["unversionedInputKind"] = obs_source_get_unversioned_id(source); eventData["inputSettings"] = Utils::Json::ObsDataToJson(inputSettings); - eventData["defaultInputSettings"] = - Utils::Json::ObsDataToJson(defaultInputSettings, true); + eventData["defaultInputSettings"] = Utils::Json::ObsDataToJson(defaultInputSettings, true); BroadcastEvent(EventSubscription::Inputs, "InputCreated", eventData); } @@ -88,15 +85,12 @@ void EventHandler::HandleInputRemoved(obs_source_t *source) * @api events * @category inputs */ -void EventHandler::HandleInputNameChanged(obs_source_t *, - std::string oldInputName, - std::string inputName) +void EventHandler::HandleInputNameChanged(obs_source_t *, std::string oldInputName, std::string inputName) { json eventData; eventData["oldInputName"] = oldInputName; eventData["inputName"] = inputName; - BroadcastEvent(EventSubscription::Inputs, "InputNameChanged", - eventData); + BroadcastEvent(EventSubscription::Inputs, "InputNameChanged", eventData); } /** @@ -132,8 +126,7 @@ void EventHandler::HandleInputActiveStateChanged(void *param, calldata_t *data) json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["videoActive"] = obs_source_active(source); - eventHandler->BroadcastEvent(EventSubscription::InputActiveStateChanged, - "InputActiveStateChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::InputActiveStateChanged, "InputActiveStateChanged", eventData); } /** @@ -169,8 +162,7 @@ void EventHandler::HandleInputShowStateChanged(void *param, calldata_t *data) json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["videoShowing"] = obs_source_showing(source); - eventHandler->BroadcastEvent(EventSubscription::InputShowStateChanged, - "InputShowStateChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::InputShowStateChanged, "InputShowStateChanged", eventData); } /** @@ -201,8 +193,7 @@ void EventHandler::HandleInputMuteStateChanged(void *param, calldata_t *data) json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["inputMuted"] = obs_source_muted(source); - eventHandler->BroadcastEvent(EventSubscription::Inputs, - "InputMuteStateChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::Inputs, "InputMuteStateChanged", eventData); } /** @@ -242,8 +233,7 @@ void EventHandler::HandleInputVolumeChanged(void *param, calldata_t *data) eventData["inputName"] = obs_source_get_name(source); eventData["inputVolumeMul"] = inputVolumeMul; eventData["inputVolumeDb"] = inputVolumeDb; - eventHandler->BroadcastEvent(EventSubscription::Inputs, - "InputVolumeChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::Inputs, "InputVolumeChanged", eventData); } /** @@ -276,8 +266,7 @@ void EventHandler::HandleInputAudioBalanceChanged(void *param, calldata_t *data) json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["inputAudioBalance"] = inputAudioBalance; - eventHandler->BroadcastEvent(EventSubscription::Inputs, - "InputAudioBalanceChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::Inputs, "InputAudioBalanceChanged", eventData); } /** @@ -294,8 +283,7 @@ void EventHandler::HandleInputAudioBalanceChanged(void *param, calldata_t *data) * @api events * @category inputs */ -void EventHandler::HandleInputAudioSyncOffsetChanged(void *param, - calldata_t *data) +void EventHandler::HandleInputAudioSyncOffsetChanged(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -311,8 +299,7 @@ void EventHandler::HandleInputAudioSyncOffsetChanged(void *param, json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["inputAudioSyncOffset"] = inputAudioSyncOffset / 1000000; - eventHandler->BroadcastEvent(EventSubscription::Inputs, - "InputAudioSyncOffsetChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::Inputs, "InputAudioSyncOffsetChanged", eventData); } /** @@ -344,15 +331,13 @@ void EventHandler::HandleInputAudioTracksChanged(void *param, calldata_t *data) json inputAudioTracks; for (long long i = 0; i < MAX_AUDIO_MIXES; i++) { - inputAudioTracks[std::to_string(i + 1)] = - (bool)((tracks >> i) & 1); + inputAudioTracks[std::to_string(i + 1)] = (bool)((tracks >> i) & 1); } json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["inputAudioTracks"] = inputAudioTracks; - eventHandler->BroadcastEvent(EventSubscription::Inputs, - "InputAudioTracksChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::Inputs, "InputAudioTracksChanged", eventData); } /** @@ -375,8 +360,7 @@ void EventHandler::HandleInputAudioTracksChanged(void *param, calldata_t *data) * @api events * @category inputs */ -void EventHandler::HandleInputAudioMonitorTypeChanged(void *param, - calldata_t *data) +void EventHandler::HandleInputAudioMonitorTypeChanged(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -387,17 +371,14 @@ void EventHandler::HandleInputAudioMonitorTypeChanged(void *param, if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT) return; - enum obs_monitoring_type monitorType = - (obs_monitoring_type)calldata_int(data, "type"); + enum obs_monitoring_type monitorType = (obs_monitoring_type)calldata_int(data, "type"); - std::string monitorTypeString = - Utils::Obs::StringHelper::GetInputMonitorType(monitorType); + std::string monitorTypeString = Utils::Obs::StringHelper::GetInputMonitorType(monitorType); json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["monitorType"] = monitorTypeString; - eventHandler->BroadcastEvent(EventSubscription::Inputs, - "InputAudioMonitorTypeChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::Inputs, "InputAudioMonitorTypeChanged", eventData); } /** @@ -417,6 +398,5 @@ void EventHandler::HandleInputVolumeMeters(std::vector inputs) { json eventData; eventData["inputs"] = inputs; - BroadcastEvent(EventSubscription::InputVolumeMeters, - "InputVolumeMeters", eventData); + BroadcastEvent(EventSubscription::InputVolumeMeters, "InputVolumeMeters", eventData); } diff --git a/src/eventhandler/EventHandler_MediaInputs.cpp b/src/eventhandler/EventHandler_MediaInputs.cpp index 9286f280..170644b0 100644 --- a/src/eventhandler/EventHandler_MediaInputs.cpp +++ b/src/eventhandler/EventHandler_MediaInputs.cpp @@ -47,8 +47,7 @@ void EventHandler::SourceMediaPauseMultiHandler(void *param, calldata_t *data) if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT) return; - eventHandler->HandleMediaInputActionTriggered( - source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PAUSE); + eventHandler->HandleMediaInputActionTriggered(source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PAUSE); } void EventHandler::SourceMediaPlayMultiHandler(void *param, calldata_t *data) @@ -62,8 +61,7 @@ void EventHandler::SourceMediaPlayMultiHandler(void *param, calldata_t *data) if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT) return; - eventHandler->HandleMediaInputActionTriggered( - source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY); + eventHandler->HandleMediaInputActionTriggered(source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY); } void EventHandler::SourceMediaRestartMultiHandler(void *param, calldata_t *data) @@ -77,8 +75,7 @@ void EventHandler::SourceMediaRestartMultiHandler(void *param, calldata_t *data) if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT) return; - eventHandler->HandleMediaInputActionTriggered( - source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_RESTART); + eventHandler->HandleMediaInputActionTriggered(source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_RESTART); } void EventHandler::SourceMediaStopMultiHandler(void *param, calldata_t *data) @@ -92,8 +89,7 @@ void EventHandler::SourceMediaStopMultiHandler(void *param, calldata_t *data) if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT) return; - eventHandler->HandleMediaInputActionTriggered( - source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_STOP); + eventHandler->HandleMediaInputActionTriggered(source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_STOP); } void EventHandler::SourceMediaNextMultiHandler(void *param, calldata_t *data) @@ -107,12 +103,10 @@ void EventHandler::SourceMediaNextMultiHandler(void *param, calldata_t *data) if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT) return; - eventHandler->HandleMediaInputActionTriggered( - source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_NEXT); + eventHandler->HandleMediaInputActionTriggered(source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_NEXT); } -void EventHandler::SourceMediaPreviousMultiHandler(void *param, - calldata_t *data) +void EventHandler::SourceMediaPreviousMultiHandler(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -123,8 +117,7 @@ void EventHandler::SourceMediaPreviousMultiHandler(void *param, if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT) return; - eventHandler->HandleMediaInputActionTriggered( - source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PREVIOUS); + eventHandler->HandleMediaInputActionTriggered(source, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PREVIOUS); } /** @@ -140,8 +133,7 @@ void EventHandler::SourceMediaPreviousMultiHandler(void *param, * @api events * @category media inputs */ -void EventHandler::HandleMediaInputPlaybackStarted(void *param, - calldata_t *data) +void EventHandler::HandleMediaInputPlaybackStarted(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -154,8 +146,7 @@ void EventHandler::HandleMediaInputPlaybackStarted(void *param, json eventData; eventData["inputName"] = obs_source_get_name(source); - eventHandler->BroadcastEvent(EventSubscription::MediaInputs, - "MediaInputPlaybackStarted", eventData); + eventHandler->BroadcastEvent(EventSubscription::MediaInputs, "MediaInputPlaybackStarted", eventData); } /** @@ -184,8 +175,7 @@ void EventHandler::HandleMediaInputPlaybackEnded(void *param, calldata_t *data) json eventData; eventData["inputName"] = obs_source_get_name(source); - eventHandler->BroadcastEvent(EventSubscription::MediaInputs, - "MediaInputPlaybackEnded", eventData); + eventHandler->BroadcastEvent(EventSubscription::MediaInputs, "MediaInputPlaybackEnded", eventData); } /** @@ -202,12 +192,10 @@ void EventHandler::HandleMediaInputPlaybackEnded(void *param, calldata_t *data) * @api events * @category media inputs */ -void EventHandler::HandleMediaInputActionTriggered(obs_source_t *source, - ObsMediaInputAction action) +void EventHandler::HandleMediaInputActionTriggered(obs_source_t *source, ObsMediaInputAction action) { json eventData; eventData["inputName"] = obs_source_get_name(source); eventData["mediaAction"] = GetMediaInputActionString(action); - BroadcastEvent(EventSubscription::MediaInputs, - "MediaInputActionTriggered", eventData); + BroadcastEvent(EventSubscription::MediaInputs, "MediaInputActionTriggered", eventData); } \ No newline at end of file diff --git a/src/eventhandler/EventHandler_Outputs.cpp b/src/eventhandler/EventHandler_Outputs.cpp index 9b630acc..a4772128 100644 --- a/src/eventhandler/EventHandler_Outputs.cpp +++ b/src/eventhandler/EventHandler_Outputs.cpp @@ -53,10 +53,8 @@ void EventHandler::HandleStreamStateChanged(ObsOutputState state) { json eventData; eventData["outputActive"] = GetOutputStateActive(state); - eventData["outputState"] = - Utils::Obs::StringHelper::GetOutputState(state); - BroadcastEvent(EventSubscription::Outputs, "StreamStateChanged", - eventData); + eventData["outputState"] = Utils::Obs::StringHelper::GetOutputState(state); + BroadcastEvent(EventSubscription::Outputs, "StreamStateChanged", eventData); } /** @@ -77,10 +75,8 @@ void EventHandler::HandleRecordStateChanged(ObsOutputState state) { json eventData; eventData["outputActive"] = GetOutputStateActive(state); - eventData["outputState"] = - Utils::Obs::StringHelper::GetOutputState(state); - BroadcastEvent(EventSubscription::Outputs, "RecordStateChanged", - eventData); + eventData["outputState"] = Utils::Obs::StringHelper::GetOutputState(state); + BroadcastEvent(EventSubscription::Outputs, "RecordStateChanged", eventData); } /** @@ -101,10 +97,8 @@ void EventHandler::HandleReplayBufferStateChanged(ObsOutputState state) { json eventData; eventData["outputActive"] = GetOutputStateActive(state); - eventData["outputState"] = - Utils::Obs::StringHelper::GetOutputState(state); - BroadcastEvent(EventSubscription::Outputs, "ReplayBufferStateChanged", - eventData); + eventData["outputState"] = Utils::Obs::StringHelper::GetOutputState(state); + BroadcastEvent(EventSubscription::Outputs, "ReplayBufferStateChanged", eventData); } /** @@ -125,10 +119,8 @@ void EventHandler::HandleVirtualcamStateChanged(ObsOutputState state) { json eventData; eventData["outputActive"] = GetOutputStateActive(state); - eventData["outputState"] = - Utils::Obs::StringHelper::GetOutputState(state); - BroadcastEvent(EventSubscription::Outputs, "VirtualcamStateChanged", - eventData); + eventData["outputState"] = Utils::Obs::StringHelper::GetOutputState(state); + BroadcastEvent(EventSubscription::Outputs, "VirtualcamStateChanged", eventData); } /** @@ -147,8 +139,6 @@ void EventHandler::HandleVirtualcamStateChanged(ObsOutputState state) void EventHandler::HandleReplayBufferSaved() { json eventData; - eventData["savedReplayPath"] = - Utils::Obs::StringHelper::GetLastReplayBufferFilePath(); - BroadcastEvent(EventSubscription::Outputs, "ReplayBufferSaved", - eventData); + eventData["savedReplayPath"] = Utils::Obs::StringHelper::GetLastReplayBufferFilePath(); + BroadcastEvent(EventSubscription::Outputs, "ReplayBufferSaved", eventData); } diff --git a/src/eventhandler/EventHandler_SceneItems.cpp b/src/eventhandler/EventHandler_SceneItems.cpp index 90a55eea..63c2b99c 100644 --- a/src/eventhandler/EventHandler_SceneItems.cpp +++ b/src/eventhandler/EventHandler_SceneItems.cpp @@ -43,21 +43,16 @@ void EventHandler::HandleSceneItemCreated(void *param, calldata_t *data) if (!scene) return; - obs_sceneitem_t *sceneItem = - GetCalldataPointer(data, "item"); + obs_sceneitem_t *sceneItem = GetCalldataPointer(data, "item"); if (!sceneItem) return; json eventData; - eventData["sceneName"] = - obs_source_get_name(obs_scene_get_source(scene)); - eventData["sourceName"] = - obs_source_get_name(obs_sceneitem_get_source(sceneItem)); + eventData["sceneName"] = obs_source_get_name(obs_scene_get_source(scene)); + eventData["sourceName"] = obs_source_get_name(obs_sceneitem_get_source(sceneItem)); eventData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); - eventData["sceneItemIndex"] = - obs_sceneitem_get_order_position(sceneItem); - eventHandler->BroadcastEvent(EventSubscription::SceneItems, - "SceneItemCreated", eventData); + eventData["sceneItemIndex"] = obs_sceneitem_get_order_position(sceneItem); + eventHandler->BroadcastEvent(EventSubscription::SceneItems, "SceneItemCreated", eventData); } /** @@ -85,19 +80,15 @@ void EventHandler::HandleSceneItemRemoved(void *param, calldata_t *data) if (!scene) return; - obs_sceneitem_t *sceneItem = - GetCalldataPointer(data, "item"); + obs_sceneitem_t *sceneItem = GetCalldataPointer(data, "item"); if (!sceneItem) return; json eventData; - eventData["sceneName"] = - obs_source_get_name(obs_scene_get_source(scene)); - eventData["sourceName"] = - obs_source_get_name(obs_sceneitem_get_source(sceneItem)); + eventData["sceneName"] = obs_source_get_name(obs_scene_get_source(scene)); + eventData["sourceName"] = obs_source_get_name(obs_sceneitem_get_source(sceneItem)); eventData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); - eventHandler->BroadcastEvent(EventSubscription::SceneItems, - "SceneItemRemoved", eventData); + eventHandler->BroadcastEvent(EventSubscription::SceneItems, "SceneItemRemoved", eventData); } /** @@ -123,12 +114,9 @@ void EventHandler::HandleSceneItemListReindexed(void *param, calldata_t *data) return; json eventData; - eventData["sceneName"] = - obs_source_get_name(obs_scene_get_source(scene)); - eventData["sceneItems"] = - Utils::Obs::ArrayHelper::GetSceneItemList(scene, true); - eventHandler->BroadcastEvent(EventSubscription::SceneItems, - "SceneItemListReindexed", eventData); + eventData["sceneName"] = obs_source_get_name(obs_scene_get_source(scene)); + eventData["sceneItems"] = Utils::Obs::ArrayHelper::GetSceneItemList(scene, true); + eventHandler->BroadcastEvent(EventSubscription::SceneItems, "SceneItemListReindexed", eventData); } /** @@ -146,8 +134,7 @@ void EventHandler::HandleSceneItemListReindexed(void *param, calldata_t *data) * @api events * @category scene items */ -void EventHandler::HandleSceneItemEnableStateChanged(void *param, - calldata_t *data) +void EventHandler::HandleSceneItemEnableStateChanged(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -155,20 +142,17 @@ void EventHandler::HandleSceneItemEnableStateChanged(void *param, if (!scene) return; - obs_sceneitem_t *sceneItem = - GetCalldataPointer(data, "item"); + obs_sceneitem_t *sceneItem = GetCalldataPointer(data, "item"); if (!sceneItem) return; bool sceneItemEnabled = calldata_bool(data, "visible"); json eventData; - eventData["sceneName"] = - obs_source_get_name(obs_scene_get_source(scene)); + eventData["sceneName"] = obs_source_get_name(obs_scene_get_source(scene)); eventData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); eventData["sceneItemEnabled"] = sceneItemEnabled; - eventHandler->BroadcastEvent(EventSubscription::SceneItems, - "SceneItemEnableStateChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::SceneItems, "SceneItemEnableStateChanged", eventData); } /** @@ -186,8 +170,7 @@ void EventHandler::HandleSceneItemEnableStateChanged(void *param, * @api events * @category scene items */ -void EventHandler::HandleSceneItemLockStateChanged(void *param, - calldata_t *data) +void EventHandler::HandleSceneItemLockStateChanged(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -195,20 +178,17 @@ void EventHandler::HandleSceneItemLockStateChanged(void *param, if (!scene) return; - obs_sceneitem_t *sceneItem = - GetCalldataPointer(data, "item"); + obs_sceneitem_t *sceneItem = GetCalldataPointer(data, "item"); if (!sceneItem) return; bool sceneItemLocked = calldata_bool(data, "locked"); json eventData; - eventData["sceneName"] = - obs_source_get_name(obs_scene_get_source(scene)); + eventData["sceneName"] = obs_source_get_name(obs_scene_get_source(scene)); eventData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); eventData["sceneItemLocked"] = sceneItemLocked; - eventHandler->BroadcastEvent(EventSubscription::SceneItems, - "SceneItemLockStateChanged", eventData); + eventHandler->BroadcastEvent(EventSubscription::SceneItems, "SceneItemLockStateChanged", eventData); } /** @@ -233,17 +213,14 @@ void EventHandler::HandleSceneItemSelected(void *param, calldata_t *data) if (!scene) return; - obs_sceneitem_t *sceneItem = - GetCalldataPointer(data, "item"); + obs_sceneitem_t *sceneItem = GetCalldataPointer(data, "item"); if (!sceneItem) return; json eventData; - eventData["sceneName"] = - obs_source_get_name(obs_scene_get_source(scene)); + eventData["sceneName"] = obs_source_get_name(obs_scene_get_source(scene)); eventData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); - eventHandler->BroadcastEvent(EventSubscription::SceneItems, - "SceneItemSelected", eventData); + eventHandler->BroadcastEvent(EventSubscription::SceneItems, "SceneItemSelected", eventData); } /** @@ -261,8 +238,7 @@ void EventHandler::HandleSceneItemSelected(void *param, calldata_t *data) * @api events * @category scene items */ -void EventHandler::HandleSceneItemTransformChanged(void *param, - calldata_t *data) +void EventHandler::HandleSceneItemTransformChanged(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -273,18 +249,13 @@ void EventHandler::HandleSceneItemTransformChanged(void *param, if (!scene) return; - obs_sceneitem_t *sceneItem = - GetCalldataPointer(data, "item"); + obs_sceneitem_t *sceneItem = GetCalldataPointer(data, "item"); if (!sceneItem) return; json eventData; - eventData["sceneName"] = - obs_source_get_name(obs_scene_get_source(scene)); + eventData["sceneName"] = obs_source_get_name(obs_scene_get_source(scene)); eventData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); - eventData["sceneItemTransform"] = - Utils::Obs::ObjectHelper::GetSceneItemTransform(sceneItem); - eventHandler->BroadcastEvent( - EventSubscription::SceneItemTransformChanged, - "SceneItemTransformChanged", eventData); + eventData["sceneItemTransform"] = Utils::Obs::ObjectHelper::GetSceneItemTransform(sceneItem); + eventHandler->BroadcastEvent(EventSubscription::SceneItemTransformChanged, "SceneItemTransformChanged", eventData); } diff --git a/src/eventhandler/EventHandler_Scenes.cpp b/src/eventhandler/EventHandler_Scenes.cpp index 5af31e06..f7f818cf 100644 --- a/src/eventhandler/EventHandler_Scenes.cpp +++ b/src/eventhandler/EventHandler_Scenes.cpp @@ -77,15 +77,12 @@ void EventHandler::HandleSceneRemoved(obs_source_t *source) * @api events * @category scenes */ -void EventHandler::HandleSceneNameChanged(obs_source_t *, - std::string oldSceneName, - std::string sceneName) +void EventHandler::HandleSceneNameChanged(obs_source_t *, std::string oldSceneName, std::string sceneName) { json eventData; eventData["oldSceneName"] = oldSceneName; eventData["sceneName"] = sceneName; - BroadcastEvent(EventSubscription::Scenes, "SceneNameChanged", - eventData); + BroadcastEvent(EventSubscription::Scenes, "SceneNameChanged", eventData); } /** @@ -107,8 +104,7 @@ void EventHandler::HandleCurrentProgramSceneChanged() json eventData; eventData["sceneName"] = obs_source_get_name(currentScene); - BroadcastEvent(EventSubscription::Scenes, "CurrentProgramSceneChanged", - eventData); + BroadcastEvent(EventSubscription::Scenes, "CurrentProgramSceneChanged", eventData); } /** @@ -126,8 +122,7 @@ void EventHandler::HandleCurrentProgramSceneChanged() */ void EventHandler::HandleCurrentPreviewSceneChanged() { - OBSSourceAutoRelease currentPreviewScene = - obs_frontend_get_current_preview_scene(); + OBSSourceAutoRelease currentPreviewScene = obs_frontend_get_current_preview_scene(); // This event may be called when OBS is not in studio mode, however retreiving the source while not in studio mode will return null. if (!currentPreviewScene) @@ -135,8 +130,7 @@ void EventHandler::HandleCurrentPreviewSceneChanged() json eventData; eventData["sceneName"] = obs_source_get_name(currentPreviewScene); - BroadcastEvent(EventSubscription::Scenes, "CurrentPreviewSceneChanged", - eventData); + BroadcastEvent(EventSubscription::Scenes, "CurrentPreviewSceneChanged", eventData); } /** @@ -158,6 +152,5 @@ void EventHandler::HandleSceneListChanged() { json eventData; eventData["scenes"] = Utils::Obs::ArrayHelper::GetSceneList(); - BroadcastEvent(EventSubscription::Scenes, "SceneListChanged", - eventData); + BroadcastEvent(EventSubscription::Scenes, "SceneListChanged", eventData); } diff --git a/src/eventhandler/EventHandler_Transitions.cpp b/src/eventhandler/EventHandler_Transitions.cpp index 24cb7a76..61865482 100644 --- a/src/eventhandler/EventHandler_Transitions.cpp +++ b/src/eventhandler/EventHandler_Transitions.cpp @@ -38,8 +38,7 @@ void EventHandler::HandleCurrentSceneTransitionChanged() json eventData; eventData["transitionName"] = obs_source_get_name(transition); - BroadcastEvent(EventSubscription::Transitions, - "CurrentSceneTransitionChanged", eventData); + BroadcastEvent(EventSubscription::Transitions, "CurrentSceneTransitionChanged", eventData); } /** @@ -58,10 +57,8 @@ void EventHandler::HandleCurrentSceneTransitionChanged() void EventHandler::HandleCurrentSceneTransitionDurationChanged() { json eventData; - eventData["transitionDuration"] = - obs_frontend_get_transition_duration(); - BroadcastEvent(EventSubscription::Transitions, - "CurrentSceneTransitionDurationChanged", eventData); + eventData["transitionDuration"] = obs_frontend_get_transition_duration(); + BroadcastEvent(EventSubscription::Transitions, "CurrentSceneTransitionDurationChanged", eventData); } /** @@ -87,8 +84,7 @@ void EventHandler::HandleSceneTransitionStarted(void *param, calldata_t *data) json eventData; eventData["transitionName"] = obs_source_get_name(source); - eventHandler->BroadcastEvent(EventSubscription::Transitions, - "SceneTransitionStarted", eventData); + eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionStarted", eventData); } /** @@ -116,8 +112,7 @@ void EventHandler::HandleSceneTransitionEnded(void *param, calldata_t *data) json eventData; eventData["transitionName"] = obs_source_get_name(source); - eventHandler->BroadcastEvent(EventSubscription::Transitions, - "SceneTransitionEnded", eventData); + eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionEnded", eventData); } /** @@ -138,8 +133,7 @@ void EventHandler::HandleSceneTransitionEnded(void *param, calldata_t *data) * @api events * @category transitions */ -void EventHandler::HandleSceneTransitionVideoEnded(void *param, - calldata_t *data) +void EventHandler::HandleSceneTransitionVideoEnded(void *param, calldata_t *data) { auto eventHandler = static_cast(param); @@ -149,6 +143,5 @@ void EventHandler::HandleSceneTransitionVideoEnded(void *param, json eventData; eventData["transitionName"] = obs_source_get_name(source); - eventHandler->BroadcastEvent(EventSubscription::Transitions, - "SceneTransitionVideoEnded", eventData); + eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionVideoEnded", eventData); } diff --git a/src/eventhandler/EventHandler_Ui.cpp b/src/eventhandler/EventHandler_Ui.cpp index 0248ad5c..633baf8a 100644 --- a/src/eventhandler/EventHandler_Ui.cpp +++ b/src/eventhandler/EventHandler_Ui.cpp @@ -36,6 +36,5 @@ void EventHandler::HandleStudioModeStateChanged(bool enabled) { json eventData; eventData["studioModeEnabled"] = enabled; - BroadcastEvent(EventSubscription::Ui, "StudioModeStateChanged", - eventData); + BroadcastEvent(EventSubscription::Ui, "StudioModeStateChanged", eventData); } diff --git a/src/eventhandler/types/EventSubscription.h b/src/eventhandler/types/EventSubscription.h index f3f61565..292ba084 100644 --- a/src/eventhandler/types/EventSubscription.h +++ b/src/eventhandler/types/EventSubscription.h @@ -163,8 +163,7 @@ enum EventSubscription { * @initialVersion 5.0.0 * @api enums */ - All = (General | Config | Scenes | Inputs | Transitions | Filters | - Outputs | SceneItems | MediaInputs | Ui | Vendors), + All = (General | Config | Scenes | Inputs | Transitions | Filters | Outputs | SceneItems | MediaInputs | Ui | Vendors), /** * Subscription value to receive the `InputVolumeMeters` high-volume event. * diff --git a/src/forms/ConnectInfo.cpp b/src/forms/ConnectInfo.cpp index 9a65f0b2..b3b77ede 100644 --- a/src/forms/ConnectInfo.cpp +++ b/src/forms/ConnectInfo.cpp @@ -28,17 +28,13 @@ with this program. If not, see #include "../Config.h" #include "../utils/Platform.h" -ConnectInfo::ConnectInfo(QWidget *parent) - : QDialog(parent, Qt::Dialog), ui(new Ui::ConnectInfo) +ConnectInfo::ConnectInfo(QWidget *parent) : QDialog(parent, Qt::Dialog), ui(new Ui::ConnectInfo) { ui->setupUi(this); - connect(ui->copyServerIpButton, &QPushButton::clicked, this, - &ConnectInfo::CopyServerIpButtonClicked); - connect(ui->copyServerPortButton, &QPushButton::clicked, this, - &ConnectInfo::CopyServerPortButtonClicked); - connect(ui->copyServerPasswordButton, &QPushButton::clicked, this, - &ConnectInfo::CopyServerPasswordButtonClicked); + connect(ui->copyServerIpButton, &QPushButton::clicked, this, &ConnectInfo::CopyServerIpButtonClicked); + connect(ui->copyServerPortButton, &QPushButton::clicked, this, &ConnectInfo::CopyServerPortButtonClicked); + connect(ui->copyServerPasswordButton, &QPushButton::clicked, this, &ConnectInfo::CopyServerPasswordButtonClicked); } ConnectInfo::~ConnectInfo() @@ -55,13 +51,11 @@ void ConnectInfo::RefreshData() { auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[ConnectInfo::showEvent] Unable to retreive config!"); + blog(LOG_ERROR, "[ConnectInfo::showEvent] Unable to retreive config!"); return; } - QString serverIp = - QString::fromStdString(Utils::Platform::GetLocalAddress()); + QString serverIp = QString::fromStdString(Utils::Platform::GetLocalAddress()); ui->serverIpLineEdit->setText(serverIp); QString serverPort = QString::number(conf->ServerPort); @@ -73,20 +67,15 @@ void ConnectInfo::RefreshData() serverPassword = QUrl::toPercentEncoding(conf->ServerPassword); } else { ui->copyServerPasswordButton->setEnabled(false); - serverPassword = obs_module_text( - "OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText"); + serverPassword = obs_module_text("OBSWebSocket.ConnectInfo.ServerPasswordPlaceholderText"); } ui->serverPasswordLineEdit->setText(serverPassword); QString connectString; if (conf->AuthRequired) - connectString = QString("obsws://%1:%2/%3") - .arg(serverIp) - .arg(serverPort) - .arg(serverPassword); + connectString = QString("obsws://%1:%2/%3").arg(serverIp).arg(serverPort).arg(serverPassword); else - connectString = - QString("obsws://%1:%2").arg(serverIp).arg(serverPort); + connectString = QString("obsws://%1:%2").arg(serverIp).arg(serverPort); DrawQr(connectString); } @@ -120,8 +109,7 @@ void ConnectInfo::DrawQr(QString qrText) map.fill(Qt::white); QPainter painter(&map); - qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText( - QT_TO_UTF8(qrText), qrcodegen::QrCode::Ecc::MEDIUM); + qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(QT_TO_UTF8(qrText), qrcodegen::QrCode::Ecc::MEDIUM); const int s = qr.getSize() > 0 ? qr.getSize() : 1; const double w = map.width(); const double h = map.height(); diff --git a/src/forms/SettingsDialog.cpp b/src/forms/SettingsDialog.cpp index 79365db5..7049c336 100644 --- a/src/forms/SettingsDialog.cpp +++ b/src/forms/SettingsDialog.cpp @@ -32,10 +32,8 @@ with this program. If not, see QString GetToolTipIconHtml() { bool lightTheme = QApplication::palette().text().color().redF() < 0.5; - QString iconFile = lightTheme ? ":toolTip/images/help.svg" - : ":toolTip/images/help_light.svg"; - QString iconTemplate = - " "; + QString iconFile = lightTheme ? ":toolTip/images/help.svg" : ":toolTip/images/help_light.svg"; + QString iconTemplate = " "; return iconTemplate.arg(iconFile); } @@ -47,8 +45,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) passwordManuallyEdited(false) { ui->setupUi(this); - ui->websocketSessionTable->horizontalHeader()->resizeSection( - 3, 100); // Resize Session Table column widths + ui->websocketSessionTable->horizontalHeader()->resizeSection(3, 100); // Resize Session Table column widths ui->websocketSessionTable->horizontalHeader()->resizeSection(4, 100); // Remove the ? button on dialogs on Windows @@ -59,18 +56,13 @@ SettingsDialog::SettingsDialog(QWidget *parent) ui->enableDebugLoggingToolTipLabel->setText(toolTipHtml); ui->allowExternalToolTipLabel->setText(toolTipHtml); - connect(sessionTableTimer, &QTimer::timeout, this, - &SettingsDialog::FillSessionTable); - connect(ui->buttonBox, &QDialogButtonBox::clicked, this, - &SettingsDialog::DialogButtonClicked); - connect(ui->enableAuthenticationCheckBox, &QCheckBox::stateChanged, - this, &SettingsDialog::EnableAuthenticationCheckBoxChanged); - connect(ui->generatePasswordButton, &QPushButton::clicked, this, - &SettingsDialog::GeneratePasswordButtonClicked); - connect(ui->showConnectInfoButton, &QPushButton::clicked, this, - &SettingsDialog::ShowConnectInfoButtonClicked); - connect(ui->serverPasswordLineEdit, &QLineEdit::textEdited, this, - &SettingsDialog::PasswordEdited); + connect(sessionTableTimer, &QTimer::timeout, this, &SettingsDialog::FillSessionTable); + connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &SettingsDialog::DialogButtonClicked); + connect(ui->enableAuthenticationCheckBox, &QCheckBox::stateChanged, this, + &SettingsDialog::EnableAuthenticationCheckBoxChanged); + connect(ui->generatePasswordButton, &QPushButton::clicked, this, &SettingsDialog::GeneratePasswordButtonClicked); + connect(ui->showConnectInfoButton, &QPushButton::clicked, this, &SettingsDialog::ShowConnectInfoButtonClicked); + connect(ui->serverPasswordLineEdit, &QLineEdit::textEdited, this, &SettingsDialog::PasswordEdited); } SettingsDialog::~SettingsDialog() @@ -84,8 +76,7 @@ void SettingsDialog::showEvent(QShowEvent *) { auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[SettingsDialog::showEvent] Unable to retreive config!"); + blog(LOG_ERROR, "[SettingsDialog::showEvent] Unable to retreive config!"); return; } @@ -125,8 +116,7 @@ void SettingsDialog::RefreshData() { auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[SettingsDialog::RefreshData] Unable to retreive config!"); + blog(LOG_ERROR, "[SettingsDialog::RefreshData] Unable to retreive config!"); return; } @@ -143,10 +133,7 @@ void SettingsDialog::RefreshData() ui->generatePasswordButton->setEnabled(conf->AuthRequired); ui->showConnectInfoButton->setToolTip( - ui->allowExternalCheckBox->isChecked() - ? "" - : obs_module_text( - "OBSWebSocket.Settings.ShowConnectInfoHoverText")); + ui->allowExternalCheckBox->isChecked() ? "" : obs_module_text("OBSWebSocket.Settings.ShowConnectInfoHoverText")); FillSessionTable(); } @@ -164,32 +151,25 @@ void SettingsDialog::SaveFormData() { auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[SettingsDialog::SaveFormData] Unable to retreive config!"); + blog(LOG_ERROR, "[SettingsDialog::SaveFormData] Unable to retreive config!"); return; } if (ui->serverPasswordLineEdit->text().length() < 6) { QMessageBox msgBox; - msgBox.setWindowTitle(obs_module_text( - "OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle")); - msgBox.setText(obs_module_text( - "OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage")); + msgBox.setWindowTitle(obs_module_text("OBSWebSocket.Settings.Save.PasswordInvalidErrorTitle")); + msgBox.setText(obs_module_text("OBSWebSocket.Settings.Save.PasswordInvalidErrorMessage")); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.exec(); return; } // Show a confirmation box to the user if they attempt to provide their own password - if (passwordManuallyEdited && - (conf->ServerPassword != ui->serverPasswordLineEdit->text())) { + if (passwordManuallyEdited && (conf->ServerPassword != ui->serverPasswordLineEdit->text())) { QMessageBox msgBox; - msgBox.setWindowTitle(obs_module_text( - "OBSWebSocket.Settings.Save.UserPasswordWarningTitle")); - msgBox.setText(obs_module_text( - "OBSWebSocket.Settings.Save.UserPasswordWarningMessage")); - msgBox.setInformativeText(obs_module_text( - "OBSWebSocket.Settings.Save.UserPasswordWarningInfoText")); + msgBox.setWindowTitle(obs_module_text("OBSWebSocket.Settings.Save.UserPasswordWarningTitle")); + msgBox.setText(obs_module_text("OBSWebSocket.Settings.Save.UserPasswordWarningMessage")); + msgBox.setInformativeText(obs_module_text("OBSWebSocket.Settings.Save.UserPasswordWarningInfoText")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); @@ -199,19 +179,15 @@ void SettingsDialog::SaveFormData() break; case QMessageBox::No: default: - ui->serverPasswordLineEdit->setText( - conf->ServerPassword); + ui->serverPasswordLineEdit->setText(conf->ServerPassword); return; } } bool needsRestart = - (conf->ServerEnabled != - ui->enableWebSocketServerCheckBox->isChecked()) || - (ui->enableAuthenticationCheckBox->isChecked() && - conf->ServerPassword != ui->serverPasswordLineEdit->text()) || - (conf->BindLoopback == - ui->allowExternalCheckBox->isChecked()) || + (conf->ServerEnabled != ui->enableWebSocketServerCheckBox->isChecked()) || + (ui->enableAuthenticationCheckBox->isChecked() && conf->ServerPassword != ui->serverPasswordLineEdit->text()) || + (conf->BindLoopback == ui->allowExternalCheckBox->isChecked()) || (conf->ServerPort != ui->serverPortSpinBox->value()); conf->ServerEnabled = ui->enableWebSocketServerCheckBox->isChecked(); @@ -228,8 +204,7 @@ void SettingsDialog::SaveFormData() connectInfo->RefreshData(); if (needsRestart) { - blog(LOG_INFO, - "[SettingsDialog::SaveFormData] A setting was changed which requires a server restart."); + blog(LOG_INFO, "[SettingsDialog::SaveFormData] A setting was changed which requires a server restart."); auto server = GetWebSocketServer(); server->Stop(); if (conf->ServerEnabled) { @@ -242,8 +217,7 @@ void SettingsDialog::FillSessionTable() { auto webSocketServer = GetWebSocketServer(); if (!webSocketServer) { - blog(LOG_ERROR, - "[SettingsDialog::FillSessionTable] Unable to fetch websocket server instance!"); + blog(LOG_ERROR, "[SettingsDialog::FillSessionTable] Unable to fetch websocket server instance!"); return; } @@ -257,26 +231,20 @@ void SettingsDialog::FillSessionTable() QPixmap crossIconPixmap = crossIcon.pixmap(QSize(25, 25)); // Todo: Make a util for translations so that we don't need to import a bunch of obs libraries in order to use them. - QString kickButtonText = - obs_module_text("OBSWebSocket.SessionTable.KickButtonText"); + QString kickButtonText = obs_module_text("OBSWebSocket.SessionTable.KickButtonText"); ui->websocketSessionTable->setRowCount(rowCount); size_t i = 0; for (auto session : webSocketSessions) { - QTableWidgetItem *addressItem = new QTableWidgetItem( - QString::fromStdString(session.remoteAddress)); + QTableWidgetItem *addressItem = new QTableWidgetItem(QString::fromStdString(session.remoteAddress)); ui->websocketSessionTable->setItem(i, 0, addressItem); - uint64_t sessionDuration = QDateTime::currentSecsSinceEpoch() - - session.connectedAt; - QTableWidgetItem *durationItem = new QTableWidgetItem( - QTime(0, 0, sessionDuration).toString("hh:mm:ss")); + uint64_t sessionDuration = QDateTime::currentSecsSinceEpoch() - session.connectedAt; + QTableWidgetItem *durationItem = new QTableWidgetItem(QTime(0, 0, sessionDuration).toString("hh:mm:ss")); ui->websocketSessionTable->setItem(i, 1, durationItem); - QTableWidgetItem *statsItem = new QTableWidgetItem( - QString("%1/%2") - .arg(session.incomingMessages) - .arg(session.outgoingMessages)); + QTableWidgetItem *statsItem = + new QTableWidgetItem(QString("%1/%2").arg(session.incomingMessages).arg(session.outgoingMessages)); ui->websocketSessionTable->setItem(i, 2, statsItem); QLabel *identifiedLabel = new QLabel(); @@ -288,20 +256,15 @@ void SettingsDialog::FillSessionTable() } ui->websocketSessionTable->setCellWidget(i, 3, identifiedLabel); - QPushButton *invalidateButton = - new QPushButton(kickButtonText, this); + QPushButton *invalidateButton = new QPushButton(kickButtonText, this); QWidget *invalidateButtonWidget = new QWidget(); - QHBoxLayout *invalidateButtonLayout = - new QHBoxLayout(invalidateButtonWidget); + QHBoxLayout *invalidateButtonLayout = new QHBoxLayout(invalidateButtonWidget); invalidateButtonLayout->addWidget(invalidateButton); invalidateButtonLayout->setAlignment(Qt::AlignCenter); invalidateButtonLayout->setContentsMargins(0, 0, 0, 0); invalidateButtonWidget->setLayout(invalidateButtonLayout); - ui->websocketSessionTable->setCellWidget( - i, 4, invalidateButtonWidget); - connect(invalidateButton, &QPushButton::clicked, [=]() { - webSocketServer->InvalidateSession(session.hdl); - }); + ui->websocketSessionTable->setCellWidget(i, 4, invalidateButtonWidget); + connect(invalidateButton, &QPushButton::clicked, [=]() { webSocketServer->InvalidateSession(session.hdl); }); i++; } @@ -320,8 +283,7 @@ void SettingsDialog::EnableAuthenticationCheckBoxChanged() void SettingsDialog::GeneratePasswordButtonClicked() { - QString newPassword = - QString::fromStdString(Utils::Crypto::GeneratePassword()); + QString newPassword = QString::fromStdString(Utils::Crypto::GeneratePassword()); ui->serverPasswordLineEdit->setText(newPassword); ui->serverPasswordLineEdit->selectAll(); passwordManuallyEdited = false; @@ -331,12 +293,9 @@ void SettingsDialog::ShowConnectInfoButtonClicked() { if (obs_video_active()) { QMessageBox msgBox; - msgBox.setWindowTitle(obs_module_text( - "OBSWebSocket.Settings.ShowConnectInfoWarningTitle")); - msgBox.setText(obs_module_text( - "OBSWebSocket.Settings.ShowConnectInfoWarningMessage")); - msgBox.setInformativeText(obs_module_text( - "OBSWebSocket.Settings.ShowConnectInfoWarningInfoText")); + msgBox.setWindowTitle(obs_module_text("OBSWebSocket.Settings.ShowConnectInfoWarningTitle")); + msgBox.setText(obs_module_text("OBSWebSocket.Settings.ShowConnectInfoWarningMessage")); + msgBox.setInformativeText(obs_module_text("OBSWebSocket.Settings.ShowConnectInfoWarningInfoText")); msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); msgBox.setDefaultButton(QMessageBox::No); int ret = msgBox.exec(); diff --git a/src/obs-websocket.cpp b/src/obs-websocket.cpp index 160bb379..48d92a9e 100644 --- a/src/obs-websocket.cpp +++ b/src/obs-websocket.cpp @@ -48,19 +48,14 @@ WebSocketApiPtr _webSocketApi; WebSocketServerPtr _webSocketServer; SettingsDialog *_settingsDialog = nullptr; -void WebSocketApiEventCallback(std::string vendorName, std::string eventType, - obs_data_t *obsEventData); +void WebSocketApiEventCallback(std::string vendorName, std::string eventType, obs_data_t *obsEventData); bool obs_module_load(void) { - blog(LOG_INFO, - "[obs_module_load] you can haz websockets (Version: %s | RPC Version: %d)", - OBS_WEBSOCKET_VERSION, OBS_WEBSOCKET_RPC_VERSION); - blog(LOG_INFO, - "[obs_module_load] Qt version (compile-time): %s | Qt version (run-time): %s", - QT_VERSION_STR, qVersion()); - blog(LOG_INFO, "[obs_module_load] Linked ASIO Version: %d", - ASIO_VERSION); + blog(LOG_INFO, "[obs_module_load] you can haz websockets (Version: %s | RPC Version: %d)", OBS_WEBSOCKET_VERSION, + OBS_WEBSOCKET_RPC_VERSION); + blog(LOG_INFO, "[obs_module_load] Qt version (compile-time): %s | Qt version (run-time): %s", QT_VERSION_STR, qVersion()); + blog(LOG_INFO, "[obs_module_load] Linked ASIO Version: %d", ASIO_VERSION); // Initialize the cpu stats _cpuUsageInfo = os_cpu_usage_info_start(); @@ -81,18 +76,14 @@ bool obs_module_load(void) // Initialize the settings dialog obs_frontend_push_ui_translation(obs_module_get_string); - QMainWindow *mainWindow = - static_cast(obs_frontend_get_main_window()); + QMainWindow *mainWindow = static_cast(obs_frontend_get_main_window()); _settingsDialog = new SettingsDialog(mainWindow); obs_frontend_pop_ui_translation(); // Add the settings dialog to the tools menu - const char *menuActionText = - obs_module_text("OBSWebSocket.Settings.DialogTitle"); - QAction *menuAction = - (QAction *)obs_frontend_add_tools_menu_qaction(menuActionText); - QObject::connect(menuAction, &QAction::triggered, - [] { _settingsDialog->ToggleShowHide(); }); + const char *menuActionText = obs_module_text("OBSWebSocket.Settings.DialogTitle"); + QAction *menuAction = (QAction *)obs_frontend_add_tools_menu_qaction(menuActionText); + QObject::connect(menuAction, &QAction::triggered, [] { _settingsDialog->ToggleShowHide(); }); blog(LOG_INFO, "[obs_module_load] Module loaded."); return true; @@ -104,8 +95,7 @@ void obs_module_unload() // Shutdown the WebSocket server if it is running if (_webSocketServer->IsListening()) { - blog_debug( - "[obs_module_unload] WebSocket server is running. Stopping..."); + blog_debug("[obs_module_unload] WebSocket server is running. Stopping..."); _webSocketServer->Stop(); } @@ -176,8 +166,7 @@ bool IsDebugEnabled() * @api events * @category general */ -void WebSocketApiEventCallback(std::string vendorName, std::string eventType, - obs_data_t *obsEventData) +void WebSocketApiEventCallback(std::string vendorName, std::string eventType, obs_data_t *obsEventData) { json eventData = Utils::Json::ObsDataToJson(obsEventData); @@ -186,19 +175,16 @@ void WebSocketApiEventCallback(std::string vendorName, std::string eventType, broadcastEventData["eventType"] = eventType; broadcastEventData["eventData"] = eventData; - _webSocketServer->BroadcastEvent(EventSubscription::Vendors, - "VendorEvent", broadcastEventData); + _webSocketServer->BroadcastEvent(EventSubscription::Vendors, "VendorEvent", broadcastEventData); } #ifdef PLUGIN_TESTS -static void test_vendor_request_cb(obs_data_t *requestData, - obs_data_t *responseData, void *priv_data) +static void test_vendor_request_cb(obs_data_t *requestData, obs_data_t *responseData, void *priv_data) { blog(LOG_INFO, "[test_vendor_request_cb] Request called!"); - blog(LOG_INFO, "[test_vendor_request_cb] Request data: %s", - obs_data_get_json(requestData)); + blog(LOG_INFO, "[test_vendor_request_cb] Request data: %s", obs_data_get_json(requestData)); // Set an item to the response data obs_data_set_string(responseData, "test", "pp"); @@ -213,34 +199,26 @@ void obs_module_post_load() // Test plugin API version fetch uint apiVersion = obs_websocket_get_api_version(); - blog(LOG_INFO, - "[obs_module_post_load] obs-websocket plugin API version: %u", - apiVersion); + blog(LOG_INFO, "[obs_module_post_load] obs-websocket plugin API version: %u", apiVersion); // Test calling obs-websocket requests - struct obs_websocket_request_response *response = - obs_websocket_call_request("GetVersion"); + struct obs_websocket_request_response *response = obs_websocket_call_request("GetVersion"); if (response) { - blog(LOG_INFO, - "[obs_module_post_load] Called GetVersion. Status Code: %u | Comment: %s | Response Data: %s", - response->status_code, response->comment, - response->response_data); + blog(LOG_INFO, "[obs_module_post_load] Called GetVersion. Status Code: %u | Comment: %s | Response Data: %s", + response->status_code, response->comment, response->response_data); obs_websocket_request_response_free(response); } // Test vendor creation auto vendor = obs_websocket_register_vendor("obs-websocket-test"); if (!vendor) { - blog(LOG_WARNING, - "[obs_module_post_load] Failed to create vendor!"); + blog(LOG_WARNING, "[obs_module_post_load] Failed to create vendor!"); return; } // Test vendor request registration - if (!obs_websocket_vendor_register_request( - vendor, "TestRequest", test_vendor_request_cb, vendor)) { - blog(LOG_WARNING, - "[obs_module_post_load] Failed to register vendor request!"); + if (!obs_websocket_vendor_register_request(vendor, "TestRequest", test_vendor_request_cb, vendor)) { + blog(LOG_WARNING, "[obs_module_post_load] Failed to register vendor request!"); return; } diff --git a/src/requesthandler/RequestBatchHandler.cpp b/src/requesthandler/RequestBatchHandler.cpp index 8e638982..8a622b78 100644 --- a/src/requesthandler/RequestBatchHandler.cpp +++ b/src/requesthandler/RequestBatchHandler.cpp @@ -36,8 +36,7 @@ struct SerialFrameBatch { std::mutex conditionMutex; std::condition_variable condition; - SerialFrameBatch(RequestHandler &requestHandler, json &variables, - bool haltOnFailure) + SerialFrameBatch(RequestHandler &requestHandler, json &variables, bool haltOnFailure) : requestHandler(requestHandler), variables(variables), haltOnFailure(haltOnFailure), @@ -54,18 +53,14 @@ struct ParallelBatchResults { std::mutex conditionMutex; std::condition_variable condition; - ParallelBatchResults(RequestHandler &requestHandler) - : requestHandler(requestHandler) - { - } + ParallelBatchResults(RequestHandler &requestHandler) : requestHandler(requestHandler) {} }; // `{"inputName": "inputNameVariable"}` is essentially `inputName = inputNameVariable` -static void PreProcessVariables(const json &variables, - RequestBatchRequest &request) +static void PreProcessVariables(const json &variables, RequestBatchRequest &request) { - if (variables.empty() || !request.InputVariables.is_object() || - request.InputVariables.empty() || !request.RequestData.is_object()) + if (variables.empty() || !request.InputVariables.is_object() || request.InputVariables.empty() || + !request.RequestData.is_object()) return; for (auto &[key, value] : request.InputVariables.items()) { @@ -91,13 +86,9 @@ static void PreProcessVariables(const json &variables, } // `{"sceneItemIdVariable": "sceneItemId"}` is essentially `sceneItemIdVariable = sceneItemId` -static void PostProcessVariables(json &variables, - const RequestBatchRequest &request, - const RequestResult &requestResult) +static void PostProcessVariables(json &variables, const RequestBatchRequest &request, const RequestResult &requestResult) { - if (!request.OutputVariables.is_object() || - request.OutputVariables.empty() || - requestResult.ResponseData.empty()) + if (!request.OutputVariables.is_object() || request.OutputVariables.empty() || requestResult.ResponseData.empty()) return; for (auto &[key, value] : request.OutputVariables.items()) { @@ -130,8 +121,7 @@ static void ObsTickCallback(void *param, float) serialFrameBatch->frameCount++; if (serialFrameBatch->sleepUntilFrame) { - if (serialFrameBatch->frameCount < - serialFrameBatch->sleepUntilFrame) + if (serialFrameBatch->frameCount < serialFrameBatch->sleepUntilFrame) // Do not process any requests if in "sleep mode" return; else @@ -142,35 +132,27 @@ static void ObsTickCallback(void *param, float) // Begin recursing any unprocessed requests while (!serialFrameBatch->requests.empty()) { // Fetch first in queue - RequestBatchRequest request = - serialFrameBatch->requests.front(); + RequestBatchRequest request = serialFrameBatch->requests.front(); // Pre-process batch variables PreProcessVariables(serialFrameBatch->variables, request); // Process request and get result - RequestResult requestResult = - serialFrameBatch->requestHandler.ProcessRequest( - request); + RequestResult requestResult = serialFrameBatch->requestHandler.ProcessRequest(request); // Post-process batch variables - PostProcessVariables(serialFrameBatch->variables, request, - requestResult); + PostProcessVariables(serialFrameBatch->variables, request, requestResult); // Add to results vector serialFrameBatch->results.push_back(requestResult); // Remove from front of queue serialFrameBatch->requests.pop(); // If haltOnFailure and the request failed, clear the queue to make the batch return early. - if (serialFrameBatch->haltOnFailure && - requestResult.StatusCode != RequestStatus::Success) { - serialFrameBatch->requests = - std::queue(); + if (serialFrameBatch->haltOnFailure && requestResult.StatusCode != RequestStatus::Success) { + serialFrameBatch->requests = std::queue(); break; } // If the processed request tells us to sleep, do so accordingly if (requestResult.SleepFrames) { - serialFrameBatch->sleepUntilFrame = - serialFrameBatch->frameCount + - requestResult.SleepFrames; + serialFrameBatch->sleepUntilFrame = serialFrameBatch->frameCount + requestResult.SleepFrames; break; } } @@ -180,11 +162,10 @@ static void ObsTickCallback(void *param, float) serialFrameBatch->condition.notify_one(); } -std::vector RequestBatchHandler::ProcessRequestBatch( - QThreadPool &threadPool, SessionPtr session, - RequestBatchExecutionType::RequestBatchExecutionType executionType, - std::vector &requests, json &variables, - bool haltOnFailure) +std::vector +RequestBatchHandler::ProcessRequestBatch(QThreadPool &threadPool, SessionPtr session, + RequestBatchExecutionType::RequestBatchExecutionType executionType, + std::vector &requests, json &variables, bool haltOnFailure) { RequestHandler requestHandler(session); if (executionType == RequestBatchExecutionType::SerialRealtime) { @@ -194,22 +175,19 @@ std::vector RequestBatchHandler::ProcessRequestBatch( for (auto &request : requests) { PreProcessVariables(variables, request); - RequestResult requestResult = - requestHandler.ProcessRequest(request); + RequestResult requestResult = requestHandler.ProcessRequest(request); PostProcessVariables(variables, request, requestResult); ret.push_back(requestResult); - if (haltOnFailure && - requestResult.StatusCode != RequestStatus::Success) + if (haltOnFailure && requestResult.StatusCode != RequestStatus::Success) break; } return ret; } else if (executionType == RequestBatchExecutionType::SerialFrame) { - SerialFrameBatch serialFrameBatch(requestHandler, variables, - haltOnFailure); + SerialFrameBatch serialFrameBatch(requestHandler, variables, haltOnFailure); // Create Request objects in the worker thread (avoid unnecessary processing in graphics thread) for (auto &request : requests) @@ -219,11 +197,8 @@ std::vector RequestBatchHandler::ProcessRequestBatch( obs_add_tick_callback(ObsTickCallback, &serialFrameBatch); // Wait until the graphics thread processes the last request in the queue - std::unique_lock lock( - serialFrameBatch.conditionMutex); - serialFrameBatch.condition.wait(lock, [&serialFrameBatch] { - return serialFrameBatch.requests.empty(); - }); + std::unique_lock lock(serialFrameBatch.conditionMutex); + serialFrameBatch.condition.wait(lock, [&serialFrameBatch] { return serialFrameBatch.requests.empty(); }); // Remove the created callback entry since we don't need it anymore obs_remove_tick_callback(ObsTickCallback, &serialFrameBatch); @@ -233,31 +208,23 @@ std::vector RequestBatchHandler::ProcessRequestBatch( ParallelBatchResults parallelResults(requestHandler); // Acquire the lock early to prevent the batch from finishing before we're ready - std::unique_lock lock( - parallelResults.conditionMutex); + std::unique_lock lock(parallelResults.conditionMutex); // Submit each request as a task to the thread pool to be processed ASAP for (auto &request : requests) { - threadPool.start(Utils::Compat::CreateFunctionRunnable( - [¶llelResults, &request]() { - RequestResult requestResult = - parallelResults.requestHandler - .ProcessRequest( - request); + threadPool.start(Utils::Compat::CreateFunctionRunnable([¶llelResults, &request]() { + RequestResult requestResult = parallelResults.requestHandler.ProcessRequest(request); - std::unique_lock lock( - parallelResults.conditionMutex); - parallelResults.results.push_back( - requestResult); - lock.unlock(); - parallelResults.condition.notify_one(); - })); + std::unique_lock lock(parallelResults.conditionMutex); + parallelResults.results.push_back(requestResult); + lock.unlock(); + parallelResults.condition.notify_one(); + })); } // Wait for the last request to finish processing size_t requestCount = requests.size(); - parallelResults.condition.wait(lock, [¶llelResults, - requestCount] { + parallelResults.condition.wait(lock, [¶llelResults, requestCount] { return parallelResults.results.size() == requestCount; }); diff --git a/src/requesthandler/RequestBatchHandler.h b/src/requesthandler/RequestBatchHandler.h index 6f3c36d6..10ac2a5a 100644 --- a/src/requesthandler/RequestBatchHandler.h +++ b/src/requesthandler/RequestBatchHandler.h @@ -24,9 +24,7 @@ with this program. If not, see #include "rpc/RequestBatchRequest.h" namespace RequestBatchHandler { -std::vector ProcessRequestBatch( - QThreadPool &threadPool, SessionPtr session, - RequestBatchExecutionType::RequestBatchExecutionType executionType, - std::vector &requests, json &variables, - bool haltOnFailure); +std::vector ProcessRequestBatch(QThreadPool &threadPool, SessionPtr session, + RequestBatchExecutionType::RequestBatchExecutionType executionType, + std::vector &requests, json &variables, bool haltOnFailure); } diff --git a/src/requesthandler/RequestHandler.cpp b/src/requesthandler/RequestHandler.cpp index e8a91ef3..536e7fc1 100644 --- a/src/requesthandler/RequestHandler.cpp +++ b/src/requesthandler/RequestHandler.cpp @@ -31,16 +31,14 @@ const std::unordered_map RequestHandler::_han {"CallVendorRequest", &RequestHandler::CallVendorRequest}, {"GetHotkeyList", &RequestHandler::GetHotkeyList}, {"TriggerHotkeyByName", &RequestHandler::TriggerHotkeyByName}, - {"TriggerHotkeyByKeySequence", - &RequestHandler::TriggerHotkeyByKeySequence}, + {"TriggerHotkeyByKeySequence", &RequestHandler::TriggerHotkeyByKeySequence}, {"Sleep", &RequestHandler::Sleep}, // Config {"GetPersistentData", &RequestHandler::GetPersistentData}, {"SetPersistentData", &RequestHandler::SetPersistentData}, {"GetSceneCollectionList", &RequestHandler::GetSceneCollectionList}, - {"SetCurrentSceneCollection", - &RequestHandler::SetCurrentSceneCollection}, + {"SetCurrentSceneCollection", &RequestHandler::SetCurrentSceneCollection}, {"CreateSceneCollection", &RequestHandler::CreateSceneCollection}, {"GetProfileList", &RequestHandler::GetProfileList}, {"SetCurrentProfile", &RequestHandler::SetCurrentProfile}, @@ -71,10 +69,8 @@ const std::unordered_map RequestHandler::_han {"CreateScene", &RequestHandler::CreateScene}, {"RemoveScene", &RequestHandler::RemoveScene}, {"SetSceneName", &RequestHandler::SetSceneName}, - {"GetSceneSceneTransitionOverride", - &RequestHandler::GetSceneSceneTransitionOverride}, - {"SetSceneSceneTransitionOverride", - &RequestHandler::SetSceneSceneTransitionOverride}, + {"GetSceneSceneTransitionOverride", &RequestHandler::GetSceneSceneTransitionOverride}, + {"SetSceneSceneTransitionOverride", &RequestHandler::SetSceneSceneTransitionOverride}, // Inputs {"GetInputList", &RequestHandler::GetInputList}, @@ -99,32 +95,23 @@ const std::unordered_map RequestHandler::_han {"SetInputAudioMonitorType", &RequestHandler::SetInputAudioMonitorType}, {"GetInputAudioTracks", &RequestHandler::GetInputAudioTracks}, {"SetInputAudioTracks", &RequestHandler::SetInputAudioTracks}, - {"GetInputPropertiesListPropertyItems", - &RequestHandler::GetInputPropertiesListPropertyItems}, - {"PressInputPropertiesButton", - &RequestHandler::PressInputPropertiesButton}, + {"GetInputPropertiesListPropertyItems", &RequestHandler::GetInputPropertiesListPropertyItems}, + {"PressInputPropertiesButton", &RequestHandler::PressInputPropertiesButton}, // Transitions {"GetTransitionKindList", &RequestHandler::GetTransitionKindList}, {"GetSceneTransitionList", &RequestHandler::GetSceneTransitionList}, - {"GetCurrentSceneTransition", - &RequestHandler::GetCurrentSceneTransition}, - {"SetCurrentSceneTransition", - &RequestHandler::SetCurrentSceneTransition}, - {"SetCurrentSceneTransitionDuration", - &RequestHandler::SetCurrentSceneTransitionDuration}, - {"SetCurrentSceneTransitionSettings", - &RequestHandler::SetCurrentSceneTransitionSettings}, - {"GetCurrentSceneTransitionCursor", - &RequestHandler::GetCurrentSceneTransitionCursor}, - {"TriggerStudioModeTransition", - &RequestHandler::TriggerStudioModeTransition}, + {"GetCurrentSceneTransition", &RequestHandler::GetCurrentSceneTransition}, + {"SetCurrentSceneTransition", &RequestHandler::SetCurrentSceneTransition}, + {"SetCurrentSceneTransitionDuration", &RequestHandler::SetCurrentSceneTransitionDuration}, + {"SetCurrentSceneTransitionSettings", &RequestHandler::SetCurrentSceneTransitionSettings}, + {"GetCurrentSceneTransitionCursor", &RequestHandler::GetCurrentSceneTransitionCursor}, + {"TriggerStudioModeTransition", &RequestHandler::TriggerStudioModeTransition}, {"SetTBarPosition", &RequestHandler::SetTBarPosition}, // Filters {"GetSourceFilterList", &RequestHandler::GetSourceFilterList}, - {"GetSourceFilterDefaultSettings", - &RequestHandler::GetSourceFilterDefaultSettings}, + {"GetSourceFilterDefaultSettings", &RequestHandler::GetSourceFilterDefaultSettings}, {"CreateSourceFilter", &RequestHandler::CreateSourceFilter}, {"RemoveSourceFilter", &RequestHandler::RemoveSourceFilter}, {"SetSourceFilterName", &RequestHandler::SetSourceFilterName}, @@ -150,10 +137,8 @@ const std::unordered_map RequestHandler::_han {"SetSceneItemIndex", &RequestHandler::SetSceneItemIndex}, {"GetSceneItemBlendMode", &RequestHandler::GetSceneItemBlendMode}, {"SetSceneItemBlendMode", &RequestHandler::SetSceneItemBlendMode}, - {"GetSceneItemPrivateSettings", - &RequestHandler::GetSceneItemPrivateSettings}, - {"SetSceneItemPrivateSettings", - &RequestHandler::SetSceneItemPrivateSettings}, + {"GetSceneItemPrivateSettings", &RequestHandler::GetSceneItemPrivateSettings}, + {"SetSceneItemPrivateSettings", &RequestHandler::SetSceneItemPrivateSettings}, // Outputs {"GetVirtualCamStatus", &RequestHandler::GetVirtualCamStatus}, @@ -165,8 +150,7 @@ const std::unordered_map RequestHandler::_han {"StartReplayBuffer", &RequestHandler::StartReplayBuffer}, {"StopReplayBuffer", &RequestHandler::StopReplayBuffer}, {"SaveReplayBuffer", &RequestHandler::SaveReplayBuffer}, - {"GetLastReplayBufferReplay", - &RequestHandler::GetLastReplayBufferReplay}, + {"GetLastReplayBufferReplay", &RequestHandler::GetLastReplayBufferReplay}, // Stream {"GetStreamStatus", &RequestHandler::GetStreamStatus}, @@ -193,8 +177,7 @@ const std::unordered_map RequestHandler::_han // Ui {"GetStudioModeEnabled", &RequestHandler::GetStudioModeEnabled}, {"SetStudioModeEnabled", &RequestHandler::SetStudioModeEnabled}, - {"OpenInputPropertiesDialog", - &RequestHandler::OpenInputPropertiesDialog}, + {"OpenInputPropertiesDialog", &RequestHandler::OpenInputPropertiesDialog}, {"OpenInputFiltersDialog", &RequestHandler::OpenInputFiltersDialog}, {"OpenInputInteractDialog", &RequestHandler::OpenInputInteractDialog}, {"GetMonitorList", &RequestHandler::GetMonitorList}, @@ -209,21 +192,16 @@ RequestResult RequestHandler::ProcessRequest(const Request &request) #endif if (!request.RequestData.is_object() && !request.RequestData.is_null()) - return RequestResult::Error( - RequestStatus::InvalidRequestFieldType, - "Your request data is not an object."); + return RequestResult::Error(RequestStatus::InvalidRequestFieldType, "Your request data is not an object."); if (request.RequestType.empty()) - return RequestResult::Error( - RequestStatus::MissingRequestType, - "Your request is missing a `requestType`"); + return RequestResult::Error(RequestStatus::MissingRequestType, "Your request is missing a `requestType`"); RequestMethodHandler handler; try { handler = _handlerMap.at(request.RequestType); } catch (const std::out_of_range &oor) { - return RequestResult::Error(RequestStatus::UnknownRequestType, - "Your request type is not valid."); + return RequestResult::Error(RequestStatus::UnknownRequestType, "Your request type is not valid."); } return std::bind(handler, this, std::placeholders::_1)(request); diff --git a/src/requesthandler/RequestHandler.h b/src/requesthandler/RequestHandler.h index 5f6fc315..bb94e3c9 100644 --- a/src/requesthandler/RequestHandler.h +++ b/src/requesthandler/RequestHandler.h @@ -202,6 +202,5 @@ private: RequestResult GetMonitorList(const Request &); SessionPtr _session; - static const std::unordered_map - _handlerMap; + static const std::unordered_map _handlerMap; }; diff --git a/src/requesthandler/RequestHandler_Config.cpp b/src/requesthandler/RequestHandler_Config.cpp index dd3ff44d..57e001bb 100644 --- a/src/requesthandler/RequestHandler_Config.cpp +++ b/src/requesthandler/RequestHandler_Config.cpp @@ -41,30 +41,24 @@ RequestResult RequestHandler::GetPersistentData(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!(request.ValidateString("realm", statusCode, comment) && - request.ValidateString("slotName", statusCode, comment))) + if (!(request.ValidateString("realm", statusCode, comment) && request.ValidateString("slotName", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string realm = request.RequestData["realm"]; std::string slotName = request.RequestData["slotName"]; - std::string persistentDataPath = - Utils::Obs::StringHelper::GetCurrentProfilePath(); + std::string persistentDataPath = Utils::Obs::StringHelper::GetCurrentProfilePath(); if (realm == "OBS_WEBSOCKET_DATA_REALM_GLOBAL") - persistentDataPath += - "/../../../obsWebSocketPersistentData.json"; + persistentDataPath += "/../../../obsWebSocketPersistentData.json"; else if (realm == "OBS_WEBSOCKET_DATA_REALM_PROFILE") persistentDataPath += "/obsWebSocketPersistentData.json"; else - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "You have specified an invalid persistent data realm."); + return RequestResult::Error(RequestStatus::ResourceNotFound, + "You have specified an invalid persistent data realm."); json responseData; json persistentData; - if (Utils::Json::GetJsonFileContent(persistentDataPath, - persistentData) && - persistentData.contains(slotName)) + if (Utils::Json::GetJsonFileContent(persistentDataPath, persistentData) && persistentData.contains(slotName)) responseData["slotValue"] = persistentData[slotName]; else responseData["slotValue"] = nullptr; @@ -90,8 +84,7 @@ RequestResult RequestHandler::SetPersistentData(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!(request.ValidateString("realm", statusCode, comment) && - request.ValidateString("slotName", statusCode, comment) && + if (!(request.ValidateString("realm", statusCode, comment) && request.ValidateString("slotName", statusCode, comment) && request.ValidateBasic("slotValue", statusCode, comment))) return RequestResult::Error(statusCode, comment); @@ -99,26 +92,21 @@ RequestResult RequestHandler::SetPersistentData(const Request &request) std::string slotName = request.RequestData["slotName"]; json slotValue = request.RequestData["slotValue"]; - std::string persistentDataPath = - Utils::Obs::StringHelper::GetCurrentProfilePath(); + std::string persistentDataPath = Utils::Obs::StringHelper::GetCurrentProfilePath(); if (realm == "OBS_WEBSOCKET_DATA_REALM_GLOBAL") - persistentDataPath += - "/../../../obsWebSocketPersistentData.json"; + persistentDataPath += "/../../../obsWebSocketPersistentData.json"; else if (realm == "OBS_WEBSOCKET_DATA_REALM_PROFILE") persistentDataPath += "/obsWebSocketPersistentData.json"; else - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "You have specified an invalid persistent data realm."); + return RequestResult::Error(RequestStatus::ResourceNotFound, + "You have specified an invalid persistent data realm."); json persistentData = json::object(); Utils::Json::GetJsonFileContent(persistentDataPath, persistentData); persistentData[slotName] = slotValue; - if (!Utils::Json::SetJsonFileContent(persistentDataPath, - persistentData)) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Unable to write persistent data. No permissions?"); + if (!Utils::Json::SetJsonFileContent(persistentDataPath, persistentData)) + return RequestResult::Error(RequestStatus::RequestProcessingFailed, + "Unable to write persistent data. No permissions?"); return RequestResult::Success(); } @@ -139,10 +127,8 @@ RequestResult RequestHandler::SetPersistentData(const Request &request) RequestResult RequestHandler::GetSceneCollectionList(const Request &) { json responseData; - responseData["currentSceneCollectionName"] = - Utils::Obs::StringHelper::GetCurrentSceneCollection(); - responseData["sceneCollections"] = - Utils::Obs::ArrayHelper::GetSceneCollectionList(); + responseData["currentSceneCollectionName"] = Utils::Obs::StringHelper::GetCurrentSceneCollection(); + responseData["sceneCollections"] = Utils::Obs::ArrayHelper::GetSceneCollectionList(); return RequestResult::Success(responseData); } @@ -167,25 +153,18 @@ RequestResult RequestHandler::SetCurrentSceneCollection(const Request &request) if (!request.ValidateString("sceneCollectionName", statusCode, comment)) return RequestResult::Error(statusCode, comment); - std::string sceneCollectionName = - request.RequestData["sceneCollectionName"]; + std::string sceneCollectionName = request.RequestData["sceneCollectionName"]; - auto sceneCollections = - Utils::Obs::ArrayHelper::GetSceneCollectionList(); - if (std::find(sceneCollections.begin(), sceneCollections.end(), - sceneCollectionName) == sceneCollections.end()) + auto sceneCollections = Utils::Obs::ArrayHelper::GetSceneCollectionList(); + if (std::find(sceneCollections.begin(), sceneCollections.end(), sceneCollectionName) == sceneCollections.end()) return RequestResult::Error(RequestStatus::ResourceNotFound); - std::string currentSceneCollectionName = - Utils::Obs::StringHelper::GetCurrentSceneCollection(); + std::string currentSceneCollectionName = Utils::Obs::StringHelper::GetCurrentSceneCollection(); // Avoid queueing tasks if nothing will change if (currentSceneCollectionName != sceneCollectionName) { obs_queue_task( OBS_TASK_UI, - [](void *param) { - obs_frontend_set_current_scene_collection( - static_cast(param)); - }, + [](void *param) { obs_frontend_set_current_scene_collection(static_cast(param)); }, (void *)sceneCollectionName.c_str(), true); } @@ -213,27 +192,18 @@ RequestResult RequestHandler::CreateSceneCollection(const Request &request) if (!request.ValidateString("sceneCollectionName", statusCode, comment)) return RequestResult::Error(statusCode, comment); - std::string sceneCollectionName = - request.RequestData["sceneCollectionName"]; + std::string sceneCollectionName = request.RequestData["sceneCollectionName"]; - auto sceneCollections = - Utils::Obs::ArrayHelper::GetSceneCollectionList(); - if (std::find(sceneCollections.begin(), sceneCollections.end(), - sceneCollectionName) != sceneCollections.end()) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists); + auto sceneCollections = Utils::Obs::ArrayHelper::GetSceneCollectionList(); + if (std::find(sceneCollections.begin(), sceneCollections.end(), sceneCollectionName) != sceneCollections.end()) + return RequestResult::Error(RequestStatus::ResourceAlreadyExists); - QMainWindow *mainWindow = - static_cast(obs_frontend_get_main_window()); + QMainWindow *mainWindow = static_cast(obs_frontend_get_main_window()); bool success = false; - QMetaObject::invokeMethod( - mainWindow, "AddSceneCollection", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(bool, success), Q_ARG(bool, true), - Q_ARG(QString, QString::fromStdString(sceneCollectionName))); + QMetaObject::invokeMethod(mainWindow, "AddSceneCollection", Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, success), + Q_ARG(bool, true), Q_ARG(QString, QString::fromStdString(sceneCollectionName))); if (!success) - return RequestResult::Error( - RequestStatus::ResourceCreationFailed, - "Failed to create the scene collection."); + return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Failed to create the scene collection."); return RequestResult::Success(); } @@ -254,8 +224,7 @@ RequestResult RequestHandler::CreateSceneCollection(const Request &request) RequestResult RequestHandler::GetProfileList(const Request &) { json responseData; - responseData["currentProfileName"] = - Utils::Obs::StringHelper::GetCurrentProfile(); + responseData["currentProfileName"] = Utils::Obs::StringHelper::GetCurrentProfile(); responseData["profiles"] = Utils::Obs::ArrayHelper::GetProfileList(); return RequestResult::Success(responseData); } @@ -282,20 +251,14 @@ RequestResult RequestHandler::SetCurrentProfile(const Request &request) std::string profileName = request.RequestData["profileName"]; auto profiles = Utils::Obs::ArrayHelper::GetProfileList(); - if (std::find(profiles.begin(), profiles.end(), profileName) == - profiles.end()) + if (std::find(profiles.begin(), profiles.end(), profileName) == profiles.end()) return RequestResult::Error(RequestStatus::ResourceNotFound); - std::string currentProfileName = - Utils::Obs::StringHelper::GetCurrentProfile(); + std::string currentProfileName = Utils::Obs::StringHelper::GetCurrentProfile(); // Avoid queueing tasks if nothing will change if (currentProfileName != profileName) { obs_queue_task( - OBS_TASK_UI, - [](void *param) { - obs_frontend_set_current_profile( - static_cast(param)); - }, + OBS_TASK_UI, [](void *param) { obs_frontend_set_current_profile(static_cast(param)); }, (void *)profileName.c_str(), true); } @@ -324,16 +287,12 @@ RequestResult RequestHandler::CreateProfile(const Request &request) std::string profileName = request.RequestData["profileName"]; auto profiles = Utils::Obs::ArrayHelper::GetProfileList(); - if (std::find(profiles.begin(), profiles.end(), profileName) != - profiles.end()) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists); + if (std::find(profiles.begin(), profiles.end(), profileName) != profiles.end()) + return RequestResult::Error(RequestStatus::ResourceAlreadyExists); - QMainWindow *mainWindow = - static_cast(obs_frontend_get_main_window()); - QMetaObject::invokeMethod( - mainWindow, "NewProfile", Qt::BlockingQueuedConnection, - Q_ARG(QString, QString::fromStdString(profileName))); + QMainWindow *mainWindow = static_cast(obs_frontend_get_main_window()); + QMetaObject::invokeMethod(mainWindow, "NewProfile", Qt::BlockingQueuedConnection, + Q_ARG(QString, QString::fromStdString(profileName))); return RequestResult::Success(); } @@ -360,18 +319,15 @@ RequestResult RequestHandler::RemoveProfile(const Request &request) std::string profileName = request.RequestData["profileName"]; auto profiles = Utils::Obs::ArrayHelper::GetProfileList(); - if (std::find(profiles.begin(), profiles.end(), profileName) == - profiles.end()) + if (std::find(profiles.begin(), profiles.end(), profileName) == profiles.end()) return RequestResult::Error(RequestStatus::ResourceNotFound); if (profiles.size() < 2) return RequestResult::Error(RequestStatus::NotEnoughResources); - QMainWindow *mainWindow = - static_cast(obs_frontend_get_main_window()); - QMetaObject::invokeMethod( - mainWindow, "DeleteProfile", Qt::BlockingQueuedConnection, - Q_ARG(QString, QString::fromStdString(profileName))); + QMainWindow *mainWindow = static_cast(obs_frontend_get_main_window()); + QMetaObject::invokeMethod(mainWindow, "DeleteProfile", Qt::BlockingQueuedConnection, + Q_ARG(QString, QString::fromStdString(profileName))); return RequestResult::Success(); } @@ -396,36 +352,25 @@ RequestResult RequestHandler::GetProfileParameter(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!(request.ValidateString("parameterCategory", statusCode, - comment) && + if (!(request.ValidateString("parameterCategory", statusCode, comment) && request.ValidateString("parameterName", statusCode, comment))) return RequestResult::Error(statusCode, comment); - std::string parameterCategory = - request.RequestData["parameterCategory"]; + std::string parameterCategory = request.RequestData["parameterCategory"]; std::string parameterName = request.RequestData["parameterName"]; config_t *profile = obs_frontend_get_profile_config(); if (!profile) - blog(LOG_ERROR, - "[RequestHandler::GetProfileParameter] Profile is invalid."); + blog(LOG_ERROR, "[RequestHandler::GetProfileParameter] Profile is invalid."); json responseData; - if (config_has_default_value(profile, parameterCategory.c_str(), - parameterName.c_str())) { - responseData["parameterValue"] = - config_get_string(profile, parameterCategory.c_str(), - parameterName.c_str()); + if (config_has_default_value(profile, parameterCategory.c_str(), parameterName.c_str())) { + responseData["parameterValue"] = config_get_string(profile, parameterCategory.c_str(), parameterName.c_str()); responseData["defaultParameterValue"] = - config_get_default_string(profile, - parameterCategory.c_str(), - parameterName.c_str()); - } else if (config_has_user_value(profile, parameterCategory.c_str(), - parameterName.c_str())) { - responseData["parameterValue"] = - config_get_string(profile, parameterCategory.c_str(), - parameterName.c_str()); + config_get_default_string(profile, parameterCategory.c_str(), parameterName.c_str()); + } else if (config_has_user_value(profile, parameterCategory.c_str(), parameterName.c_str())) { + responseData["parameterValue"] = config_get_string(profile, parameterCategory.c_str(), parameterName.c_str()); responseData["defaultParameterValue"] = nullptr; } else { responseData["parameterValue"] = nullptr; @@ -453,35 +398,25 @@ RequestResult RequestHandler::SetProfileParameter(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!(request.ValidateString("parameterCategory", statusCode, - comment) && + if (!(request.ValidateString("parameterCategory", statusCode, comment) && request.ValidateString("parameterName", statusCode, comment))) return RequestResult::Error(statusCode, comment); - std::string parameterCategory = - request.RequestData["parameterCategory"]; + std::string parameterCategory = request.RequestData["parameterCategory"]; std::string parameterName = request.RequestData["parameterName"]; config_t *profile = obs_frontend_get_profile_config(); // Using check helpers here would just make the logic more complicated - if (!request.RequestData.contains("parameterValue") || - request.RequestData["parameterValue"].is_null()) { - if (!config_remove_value(profile, parameterCategory.c_str(), - parameterName.c_str())) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "There are no existing instances of that profile parameter."); + if (!request.RequestData.contains("parameterValue") || request.RequestData["parameterValue"].is_null()) { + if (!config_remove_value(profile, parameterCategory.c_str(), parameterName.c_str())) + return RequestResult::Error(RequestStatus::ResourceNotFound, + "There are no existing instances of that profile parameter."); } else if (request.RequestData["parameterValue"].is_string()) { - std::string parameterValue = - request.RequestData["parameterValue"]; - config_set_string(profile, parameterCategory.c_str(), - parameterName.c_str(), - parameterValue.c_str()); + std::string parameterValue = request.RequestData["parameterValue"]; + config_set_string(profile, parameterCategory.c_str(), parameterName.c_str(), parameterValue.c_str()); } else { - return RequestResult::Error( - RequestStatus::InvalidRequestFieldType, - "The field `parameterValue` must be a string."); + return RequestResult::Error(RequestStatus::InvalidRequestFieldType, "The field `parameterValue` must be a string."); } config_save(profile); @@ -512,9 +447,7 @@ RequestResult RequestHandler::GetVideoSettings(const Request &) { struct obs_video_info ovi; if (!obs_get_video_info(&ovi)) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Unable to get internal OBS video info."); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Unable to get internal OBS video info."); json responseData; responseData["fpsNumerator"] = ovi.fps_num; @@ -549,60 +482,42 @@ RequestResult RequestHandler::GetVideoSettings(const Request &) RequestResult RequestHandler::SetVideoSettings(const Request &request) { if (obs_video_active()) - return RequestResult::Error( - RequestStatus::OutputRunning, - "Video settings cannot be changed while an output is active."); + return RequestResult::Error(RequestStatus::OutputRunning, + "Video settings cannot be changed while an output is active."); RequestStatus::RequestStatus statusCode = RequestStatus::NoError; std::string comment; - bool changeFps = (request.Contains("fpsNumerator") && - request.Contains("fpsDenominator")); - if (changeFps && !(request.ValidateOptionalNumber( - "fpsNumerator", statusCode, comment, 1) && - request.ValidateOptionalNumber( - "fpsDenominator", statusCode, comment, 1))) + bool changeFps = (request.Contains("fpsNumerator") && request.Contains("fpsDenominator")); + if (changeFps && !(request.ValidateOptionalNumber("fpsNumerator", statusCode, comment, 1) && + request.ValidateOptionalNumber("fpsDenominator", statusCode, comment, 1))) return RequestResult::Error(statusCode, comment); - bool changeBaseRes = (request.Contains("baseWidth") && - request.Contains("baseHeight")); - if (changeBaseRes && - !(request.ValidateOptionalNumber("baseWidth", statusCode, comment, - 8, 4096) && - request.ValidateOptionalNumber("baseHeight", statusCode, comment, - 8, 4096))) + bool changeBaseRes = (request.Contains("baseWidth") && request.Contains("baseHeight")); + if (changeBaseRes && !(request.ValidateOptionalNumber("baseWidth", statusCode, comment, 8, 4096) && + request.ValidateOptionalNumber("baseHeight", statusCode, comment, 8, 4096))) return RequestResult::Error(statusCode, comment); - bool changeOutputRes = (request.Contains("outputWidth") && - request.Contains("outputHeight")); - if (changeOutputRes && - !(request.ValidateOptionalNumber("outputWidth", statusCode, comment, - 8, 4096) && - request.ValidateOptionalNumber("outputHeight", statusCode, - comment, 8, 4096))) + bool changeOutputRes = (request.Contains("outputWidth") && request.Contains("outputHeight")); + if (changeOutputRes && !(request.ValidateOptionalNumber("outputWidth", statusCode, comment, 8, 4096) && + request.ValidateOptionalNumber("outputHeight", statusCode, comment, 8, 4096))) return RequestResult::Error(statusCode, comment); config_t *config = obs_frontend_get_profile_config(); if (changeFps) { config_set_uint(config, "Video", "FPSType", 2); - config_set_uint(config, "Video", "FPSNum", - request.RequestData["fpsNumerator"]); - config_set_uint(config, "Video", "FPSDen", - request.RequestData["fpsDenominator"]); + config_set_uint(config, "Video", "FPSNum", request.RequestData["fpsNumerator"]); + config_set_uint(config, "Video", "FPSDen", request.RequestData["fpsDenominator"]); } if (changeBaseRes) { - config_set_uint(config, "Video", "BaseCX", - request.RequestData["baseWidth"]); - config_set_uint(config, "Video", "BaseCY", - request.RequestData["baseHeight"]); + config_set_uint(config, "Video", "BaseCX", request.RequestData["baseWidth"]); + config_set_uint(config, "Video", "BaseCY", request.RequestData["baseHeight"]); } if (changeOutputRes) { - config_set_uint(config, "Video", "OutputCX", - request.RequestData["outputWidth"]); - config_set_uint(config, "Video", "OutputCY", - request.RequestData["outputHeight"]); + config_set_uint(config, "Video", "OutputCX", request.RequestData["outputWidth"]); + config_set_uint(config, "Video", "OutputCY", request.RequestData["outputHeight"]); } if (changeFps || changeBaseRes || changeOutputRes) { @@ -611,9 +526,7 @@ RequestResult RequestHandler::SetVideoSettings(const Request &request) return RequestResult::Success(); } - return RequestResult::Error( - RequestStatus::MissingRequestField, - "You must specify at least one video-changing pair."); + return RequestResult::Error(RequestStatus::MissingRequestField, "You must specify at least one video-changing pair."); } /** @@ -636,8 +549,7 @@ RequestResult RequestHandler::GetStreamServiceSettings(const Request &) OBSService service = obs_frontend_get_streaming_service(); responseData["streamServiceType"] = obs_service_get_type(service); OBSDataAutoRelease serviceSettings = obs_service_get_settings(service); - responseData["streamServiceSettings"] = - Utils::Json::ObsDataToJson(serviceSettings, true); + responseData["streamServiceSettings"] = Utils::Json::ObsDataToJson(serviceSettings, true); return RequestResult::Success(responseData); } @@ -660,48 +572,36 @@ RequestResult RequestHandler::GetStreamServiceSettings(const Request &) RequestResult RequestHandler::SetStreamServiceSettings(const Request &request) { if (obs_frontend_streaming_active()) - return RequestResult::Error( - RequestStatus::OutputRunning, - "You cannot change stream service settings while streaming."); + return RequestResult::Error(RequestStatus::OutputRunning, + "You cannot change stream service settings while streaming."); RequestStatus::RequestStatus statusCode; std::string comment; - if (!(request.ValidateString("streamServiceType", statusCode, - comment) && - request.ValidateObject("streamServiceSettings", statusCode, - comment))) + if (!(request.ValidateString("streamServiceType", statusCode, comment) && + request.ValidateObject("streamServiceSettings", statusCode, comment))) return RequestResult::Error(statusCode, comment); OBSService currentStreamService = obs_frontend_get_streaming_service(); - std::string streamServiceType = - obs_service_get_type(currentStreamService); - std::string requestedStreamServiceType = - request.RequestData["streamServiceType"]; + std::string streamServiceType = obs_service_get_type(currentStreamService); + std::string requestedStreamServiceType = request.RequestData["streamServiceType"]; OBSDataAutoRelease requestedStreamServiceSettings = - Utils::Json::JsonToObsData( - request.RequestData["streamServiceSettings"]); + Utils::Json::JsonToObsData(request.RequestData["streamServiceSettings"]); // Don't create a new service if the current service is the same type. if (streamServiceType == requestedStreamServiceType) { - OBSDataAutoRelease currentStreamServiceSettings = - obs_service_get_settings(currentStreamService); + OBSDataAutoRelease currentStreamServiceSettings = obs_service_get_settings(currentStreamService); // TODO: Add `overlay` field OBSDataAutoRelease newStreamServiceSettings = obs_data_create(); - obs_data_apply(newStreamServiceSettings, - currentStreamServiceSettings); - obs_data_apply(newStreamServiceSettings, - requestedStreamServiceSettings); + obs_data_apply(newStreamServiceSettings, currentStreamServiceSettings); + obs_data_apply(newStreamServiceSettings, requestedStreamServiceSettings); - obs_service_update(currentStreamService, - newStreamServiceSettings); + obs_service_update(currentStreamService, newStreamServiceSettings); } else { // TODO: This leaks memory. I have no idea why. - OBSService newStreamService = obs_service_create( - requestedStreamServiceType.c_str(), - "obs_websocket_custom_service", - requestedStreamServiceSettings, nullptr); + OBSService newStreamService = obs_service_create(requestedStreamServiceType.c_str(), "obs_websocket_custom_service", + requestedStreamServiceSettings, nullptr); // TODO: Check service type here, instead of relying on service creation to fail. if (!newStreamService) return RequestResult::Error( @@ -731,8 +631,7 @@ RequestResult RequestHandler::SetStreamServiceSettings(const Request &request) RequestResult RequestHandler::GetRecordDirectory(const Request &) { json responseData; - responseData["recordDirectory"] = - Utils::Obs::StringHelper::GetCurrentRecordOutputPath(); + responseData["recordDirectory"] = Utils::Obs::StringHelper::GetCurrentRecordOutputPath(); return RequestResult::Success(responseData); } diff --git a/src/requesthandler/RequestHandler_Filters.cpp b/src/requesthandler/RequestHandler_Filters.cpp index 1d3db8ce..fb07feb5 100644 --- a/src/requesthandler/RequestHandler_Filters.cpp +++ b/src/requesthandler/RequestHandler_Filters.cpp @@ -37,14 +37,12 @@ RequestResult RequestHandler::GetSourceFilterList(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); if (!source) return RequestResult::Error(statusCode, comment); json responseData; - responseData["filters"] = - Utils::Obs::ArrayHelper::GetSourceFilterList(source); + responseData["filters"] = Utils::Obs::ArrayHelper::GetSourceFilterList(source); return RequestResult::Success(responseData); } @@ -63,8 +61,7 @@ RequestResult RequestHandler::GetSourceFilterList(const Request &request) * @api requests * @category filters */ -RequestResult -RequestHandler::GetSourceFilterDefaultSettings(const Request &request) +RequestResult RequestHandler::GetSourceFilterDefaultSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; @@ -76,14 +73,12 @@ RequestHandler::GetSourceFilterDefaultSettings(const Request &request) if (std::find(kinds.begin(), kinds.end(), filterKind) == kinds.end()) return RequestResult::Error(RequestStatus::InvalidFilterKind); - OBSDataAutoRelease defaultSettings = - obs_get_source_defaults(filterKind.c_str()); + OBSDataAutoRelease defaultSettings = obs_get_source_defaults(filterKind.c_str()); if (!defaultSettings) return RequestResult::Error(RequestStatus::InvalidFilterKind); json responseData; - responseData["defaultFilterSettings"] = - Utils::Json::ObsDataToJson(defaultSettings, true); + responseData["defaultFilterSettings"] = Utils::Json::ObsDataToJson(defaultSettings, true); return RequestResult::Success(responseData); } @@ -107,20 +102,15 @@ RequestResult RequestHandler::CreateSourceFilter(const Request &request) RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); - if (!(source && - request.ValidateString("filterName", statusCode, comment) && + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); + if (!(source && request.ValidateString("filterName", statusCode, comment) && request.ValidateString("filterKind", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string filterName = request.RequestData["filterName"]; - OBSSourceAutoRelease existingFilter = - obs_source_get_filter_by_name(source, filterName.c_str()); + OBSSourceAutoRelease existingFilter = obs_source_get_filter_by_name(source, filterName.c_str()); if (existingFilter) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists, - "A filter already exists by that name."); + return RequestResult::Error(RequestStatus::ResourceAlreadyExists, "A filter already exists by that name."); std::string filterKind = request.RequestData["filterKind"]; auto kinds = Utils::Obs::ArrayHelper::GetFilterKindList(); @@ -131,22 +121,16 @@ RequestResult RequestHandler::CreateSourceFilter(const Request &request) OBSDataAutoRelease filterSettings = nullptr; if (request.Contains("filterSettings")) { - if (!request.ValidateOptionalObject("filterSettings", - statusCode, comment, true)) + if (!request.ValidateOptionalObject("filterSettings", statusCode, comment, true)) return RequestResult::Error(statusCode, comment); - filterSettings = Utils::Json::JsonToObsData( - request.RequestData["filterSettings"]); + filterSettings = Utils::Json::JsonToObsData(request.RequestData["filterSettings"]); } - OBSSourceAutoRelease filter = - Utils::Obs::ActionHelper::CreateSourceFilter( - source, filterName, filterKind, filterSettings); + OBSSourceAutoRelease filter = Utils::Obs::ActionHelper::CreateSourceFilter(source, filterName, filterKind, filterSettings); if (!filter) - return RequestResult::Error( - RequestStatus::ResourceCreationFailed, - "Creation of the filter failed."); + return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Creation of the filter failed."); return RequestResult::Success(); } @@ -168,8 +152,7 @@ RequestResult RequestHandler::RemoveSourceFilter(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - FilterPair pair = request.ValidateFilter("sourceName", "filterName", - statusCode, comment); + FilterPair pair = request.ValidateFilter("sourceName", "filterName", statusCode, comment); if (!pair.filter) return RequestResult::Error(statusCode, comment); @@ -196,20 +179,15 @@ RequestResult RequestHandler::SetSourceFilterName(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - FilterPair pair = request.ValidateFilter("sourceName", "filterName", - statusCode, comment); - if (!pair.filter || - !request.ValidateString("newFilterName", statusCode, comment)) + FilterPair pair = request.ValidateFilter("sourceName", "filterName", statusCode, comment); + if (!pair.filter || !request.ValidateString("newFilterName", statusCode, comment)) return RequestResult::Error(statusCode, comment); std::string newFilterName = request.RequestData["newFilterName"]; - OBSSourceAutoRelease existingFilter = obs_source_get_filter_by_name( - pair.source, newFilterName.c_str()); + OBSSourceAutoRelease existingFilter = obs_source_get_filter_by_name(pair.source, newFilterName.c_str()); if (existingFilter) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists, - "A filter already exists by that new name."); + return RequestResult::Error(RequestStatus::ResourceAlreadyExists, "A filter already exists by that new name."); obs_source_set_name(pair.filter, newFilterName.c_str()); @@ -238,23 +216,19 @@ RequestResult RequestHandler::GetSourceFilter(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - FilterPair pair = request.ValidateFilter("sourceName", "filterName", - statusCode, comment); + FilterPair pair = request.ValidateFilter("sourceName", "filterName", statusCode, comment); if (!pair.filter) return RequestResult::Error(statusCode, comment); json responseData; responseData["filterEnabled"] = obs_source_enabled(pair.filter); - responseData["filterIndex"] = - Utils::Obs::NumberHelper::GetSourceFilterIndex( - pair.source, - pair.filter); // Todo: Use `GetSourceFilterlist` to select this filter maybe + responseData["filterIndex"] = Utils::Obs::NumberHelper::GetSourceFilterIndex( + pair.source, + pair.filter); // Todo: Use `GetSourceFilterlist` to select this filter maybe responseData["filterKind"] = obs_source_get_id(pair.filter); - OBSDataAutoRelease filterSettings = - obs_source_get_settings(pair.filter); - responseData["filterSettings"] = - Utils::Json::ObsDataToJson(filterSettings); + OBSDataAutoRelease filterSettings = obs_source_get_settings(pair.filter); + responseData["filterSettings"] = Utils::Json::ObsDataToJson(filterSettings); return RequestResult::Success(responseData); } @@ -277,16 +251,13 @@ RequestResult RequestHandler::SetSourceFilterIndex(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - FilterPair pair = request.ValidateFilter("sourceName", "filterName", - statusCode, comment); - if (!(pair.filter && request.ValidateNumber("filterIndex", statusCode, - comment, 0, 8192))) + FilterPair pair = request.ValidateFilter("sourceName", "filterName", statusCode, comment); + if (!(pair.filter && request.ValidateNumber("filterIndex", statusCode, comment, 0, 8192))) return RequestResult::Error(statusCode, comment); int filterIndex = request.RequestData["filterIndex"]; - Utils::Obs::ActionHelper::SetSourceFilterIndex(pair.source, pair.filter, - filterIndex); + Utils::Obs::ActionHelper::SetSourceFilterIndex(pair.source, pair.filter, filterIndex); return RequestResult::Success(); } @@ -310,29 +281,24 @@ RequestResult RequestHandler::SetSourceFilterSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - FilterPair pair = request.ValidateFilter("sourceName", "filterName", - statusCode, comment); - if (!(pair.filter && request.ValidateObject("filterSettings", - statusCode, comment, true))) + FilterPair pair = request.ValidateFilter("sourceName", "filterName", statusCode, comment); + if (!(pair.filter && request.ValidateObject("filterSettings", statusCode, comment, true))) return RequestResult::Error(statusCode, comment); // Almost identical to SetInputSettings bool overlay = true; if (request.Contains("overlay")) { - if (!request.ValidateOptionalBoolean("overlay", statusCode, - comment)) + if (!request.ValidateOptionalBoolean("overlay", statusCode, comment)) return RequestResult::Error(statusCode, comment); overlay = request.RequestData["overlay"]; } - OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData( - request.RequestData["filterSettings"]); + OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData(request.RequestData["filterSettings"]); if (!newSettings) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "An internal data conversion operation failed. Please report this!"); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, + "An internal data conversion operation failed. Please report this!"); if (overlay) obs_source_update(pair.filter, newSettings); @@ -362,10 +328,8 @@ RequestResult RequestHandler::SetSourceFilterEnabled(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - FilterPair pair = request.ValidateFilter("sourceName", "filterName", - statusCode, comment); - if (!(pair.filter && - request.ValidateBoolean("filterEnabled", statusCode, comment))) + FilterPair pair = request.ValidateFilter("sourceName", "filterName", statusCode, comment); + if (!(pair.filter && request.ValidateBoolean("filterEnabled", statusCode, comment))) return RequestResult::Error(statusCode, comment); bool filterEnabled = request.RequestData["filterEnabled"]; diff --git a/src/requesthandler/RequestHandler_General.cpp b/src/requesthandler/RequestHandler_General.cpp index 3cb73058..4fd54e93 100644 --- a/src/requesthandler/RequestHandler_General.cpp +++ b/src/requesthandler/RequestHandler_General.cpp @@ -52,8 +52,7 @@ RequestResult RequestHandler::GetVersion(const Request &) responseData["rpcVersion"] = OBS_WEBSOCKET_RPC_VERSION; responseData["availableRequests"] = GetRequestList(); - QList imageWriterFormats = - QImageWriter::supportedImageFormats(); + QList imageWriterFormats = QImageWriter::supportedImageFormats(); std::vector supportedImageFormats; for (const QByteArray &format : imageWriterFormats) { supportedImageFormats.push_back(format.toStdString()); @@ -61,8 +60,7 @@ RequestResult RequestHandler::GetVersion(const Request &) responseData["supportedImageFormats"] = supportedImageFormats; responseData["platform"] = QSysInfo::productType().toStdString(); - responseData["platformDescription"] = - QSysInfo::prettyProductName().toStdString(); + responseData["platformDescription"] = QSysInfo::prettyProductName().toStdString(); return RequestResult::Success(responseData); } @@ -94,10 +92,8 @@ RequestResult RequestHandler::GetStats(const Request &) json responseData = Utils::Obs::ObjectHelper::GetStats(); if (_session) { - responseData["webSocketSessionIncomingMessages"] = - _session->IncomingMessages(); - responseData["webSocketSessionOutgoingMessages"] = - _session->OutgoingMessages(); + responseData["webSocketSessionIncomingMessages"] = _session->IncomingMessages(); + responseData["webSocketSessionOutgoingMessages"] = _session->OutgoingMessages(); } else { responseData["webSocketSessionIncomingMessages"] = nullptr; responseData["webSocketSessionOutgoingMessages"] = nullptr; @@ -127,13 +123,9 @@ RequestResult RequestHandler::BroadcastCustomEvent(const Request &request) auto webSocketServer = GetWebSocketServer(); if (!webSocketServer) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Unable to send event due to internal error."); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Unable to send event due to internal error."); - webSocketServer->BroadcastEvent(EventSubscription::General, - "CustomEvent", - request.RequestData["eventData"]); + webSocketServer->BroadcastEvent(EventSubscription::General, "CustomEvent", request.RequestData["eventData"]); return RequestResult::Success(); } @@ -170,41 +162,32 @@ RequestResult RequestHandler::CallVendorRequest(const Request &request) OBSDataAutoRelease requestData = obs_data_create(); if (request.Contains("requestData")) { - if (!request.ValidateOptionalObject("requestData", statusCode, - comment)) + if (!request.ValidateOptionalObject("requestData", statusCode, comment)) return RequestResult::Error(statusCode, comment); - requestData = Utils::Json::JsonToObsData( - request.RequestData["requestData"]); + requestData = Utils::Json::JsonToObsData(request.RequestData["requestData"]); } OBSDataAutoRelease obsResponseData = obs_data_create(); auto webSocketApi = GetWebSocketApi(); if (!webSocketApi) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Unable to call request due to internal error."); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, + "Unable to call request due to internal error."); - auto ret = webSocketApi->PerformVendorRequest( - vendorName, requestType, requestData, obsResponseData); + auto ret = webSocketApi->PerformVendorRequest(vendorName, requestType, requestData, obsResponseData); switch (ret) { default: case WebSocketApi::RequestReturnCode::Normal: break; case WebSocketApi::RequestReturnCode::NoVendor: - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "No vendor was found by that name."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "No vendor was found by that name."); case WebSocketApi::RequestReturnCode::NoVendorRequest: - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "No request was found by that name."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "No request was found by that name."); } json responseData; - responseData["responseData"] = - Utils::Json::ObsDataToJson(obsResponseData); + responseData["responseData"] = Utils::Json::ObsDataToJson(obsResponseData); return RequestResult::Success(responseData); } @@ -247,12 +230,9 @@ RequestResult RequestHandler::TriggerHotkeyByName(const Request &request) if (!request.ValidateString("hotkeyName", statusCode, comment)) return RequestResult::Error(statusCode, comment); - obs_hotkey_t *hotkey = Utils::Obs::SearchHelper::GetHotkeyByName( - request.RequestData["hotkeyName"]); + obs_hotkey_t *hotkey = Utils::Obs::SearchHelper::GetHotkeyByName(request.RequestData["hotkeyName"]); if (!hotkey) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "No hotkeys were found by that name."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "No hotkeys were found by that name."); obs_hotkey_trigger_routed_callback(obs_hotkey_get_id(hotkey), true); @@ -284,8 +264,7 @@ RequestResult RequestHandler::TriggerHotkeyByKeySequence(const Request &request) std::string comment; if (request.Contains("keyId")) { - if (!request.ValidateOptionalString("keyId", statusCode, - comment)) + if (!request.ValidateOptionalString("keyId", statusCode, comment)) return RequestResult::Error(statusCode, comment); std::string keyId = request.RequestData["keyId"]; @@ -294,37 +273,28 @@ RequestResult RequestHandler::TriggerHotkeyByKeySequence(const Request &request) statusCode = RequestStatus::NoError; if (request.Contains("keyModifiers")) { - if (!request.ValidateOptionalObject("keyModifiers", statusCode, - comment, true)) + if (!request.ValidateOptionalObject("keyModifiers", statusCode, comment, true)) return RequestResult::Error(statusCode, comment); - const json keyModifiersJson = - request.RequestData["keyModifiers"]; + const json keyModifiersJson = request.RequestData["keyModifiers"]; uint32_t keyModifiers = 0; - if (keyModifiersJson.contains("shift") && - keyModifiersJson["shift"].is_boolean() && + if (keyModifiersJson.contains("shift") && keyModifiersJson["shift"].is_boolean() && keyModifiersJson["shift"].get()) keyModifiers |= INTERACT_SHIFT_KEY; - if (keyModifiersJson.contains("control") && - keyModifiersJson["control"].is_boolean() && + if (keyModifiersJson.contains("control") && keyModifiersJson["control"].is_boolean() && keyModifiersJson["control"].get()) keyModifiers |= INTERACT_CONTROL_KEY; - if (keyModifiersJson.contains("alt") && - keyModifiersJson["alt"].is_boolean() && - keyModifiersJson["alt"].get()) + if (keyModifiersJson.contains("alt") && keyModifiersJson["alt"].is_boolean() && keyModifiersJson["alt"].get()) keyModifiers |= INTERACT_ALT_KEY; - if (keyModifiersJson.contains("command") && - keyModifiersJson["command"].is_boolean() && + if (keyModifiersJson.contains("command") && keyModifiersJson["command"].is_boolean() && keyModifiersJson["command"].get()) keyModifiers |= INTERACT_COMMAND_KEY; combo.modifiers = keyModifiers; } - if (!combo.modifiers && - (combo.key == OBS_KEY_NONE || combo.key >= OBS_KEY_LAST_VALUE)) - return RequestResult::Error( - RequestStatus::CannotAct, - "Your provided request fields cannot be used to trigger a hotkey."); + if (!combo.modifiers && (combo.key == OBS_KEY_NONE || combo.key >= OBS_KEY_LAST_VALUE)) + return RequestResult::Error(RequestStatus::CannotAct, + "Your provided request fields cannot be used to trigger a hotkey."); // Apparently things break when you don't start by setting the combo to false obs_hotkey_inject_event(combo, false); @@ -352,25 +322,19 @@ RequestResult RequestHandler::Sleep(const Request &request) RequestStatus::RequestStatus statusCode; std::string comment; - if (request.ExecutionType == - RequestBatchExecutionType::SerialRealtime) { - if (!request.ValidateNumber("sleepMillis", statusCode, comment, - 0, 50000)) + if (request.ExecutionType == RequestBatchExecutionType::SerialRealtime) { + if (!request.ValidateNumber("sleepMillis", statusCode, comment, 0, 50000)) return RequestResult::Error(statusCode, comment); int64_t sleepMillis = request.RequestData["sleepMillis"]; - std::this_thread::sleep_for( - std::chrono::milliseconds(sleepMillis)); + std::this_thread::sleep_for(std::chrono::milliseconds(sleepMillis)); return RequestResult::Success(); - } else if (request.ExecutionType == - RequestBatchExecutionType::SerialFrame) { - if (!request.ValidateNumber("sleepFrames", statusCode, comment, - 0, 10000)) + } else if (request.ExecutionType == RequestBatchExecutionType::SerialFrame) { + if (!request.ValidateNumber("sleepFrames", statusCode, comment, 0, 10000)) return RequestResult::Error(statusCode, comment); RequestResult ret = RequestResult::Success(); ret.SleepFrames = request.RequestData["sleepFrames"]; return ret; } else { - return RequestResult::Error( - RequestStatus::UnsupportedRequestBatchExecutionType); + return RequestResult::Error(RequestStatus::UnsupportedRequestBatchExecutionType); } } diff --git a/src/requesthandler/RequestHandler_Inputs.cpp b/src/requesthandler/RequestHandler_Inputs.cpp index cfbebb65..aead6a31 100644 --- a/src/requesthandler/RequestHandler_Inputs.cpp +++ b/src/requesthandler/RequestHandler_Inputs.cpp @@ -40,16 +40,14 @@ RequestResult RequestHandler::GetInputList(const Request &request) if (request.Contains("inputKind")) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!request.ValidateOptionalString("inputKind", statusCode, - comment)) + if (!request.ValidateOptionalString("inputKind", statusCode, comment)) return RequestResult::Error(statusCode, comment); inputKind = request.RequestData["inputKind"]; } json responseData; - responseData["inputs"] = - Utils::Obs::ArrayHelper::GetInputList(inputKind); + responseData["inputs"] = Utils::Obs::ArrayHelper::GetInputList(inputKind); return RequestResult::Success(responseData); } @@ -74,16 +72,14 @@ RequestResult RequestHandler::GetInputKindList(const Request &request) if (request.Contains("unversioned")) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!request.ValidateOptionalBoolean("unversioned", statusCode, - comment)) + if (!request.ValidateOptionalBoolean("unversioned", statusCode, comment)) return RequestResult::Error(statusCode, comment); unversioned = request.RequestData["unversioned"]; } json responseData; - responseData["inputKinds"] = - Utils::Obs::ArrayHelper::GetInputKindList(unversioned); + responseData["inputKinds"] = Utils::Obs::ArrayHelper::GetInputKindList(unversioned); return RequestResult::Success(responseData); } @@ -108,8 +104,7 @@ RequestResult RequestHandler::GetSpecialInputs(const Request &) { json responseData; - std::vector channels = {"desktop1", "desktop2", "mic1", - "mic2", "mic3", "mic4"}; + std::vector channels = {"desktop1", "desktop2", "mic1", "mic2", "mic3", "mic4"}; size_t channelId = 1; for (auto &channel : channels) { @@ -147,20 +142,15 @@ RequestResult RequestHandler::CreateInput(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease sceneSource = - request.ValidateScene("sceneName", statusCode, comment); - if (!(sceneSource && - request.ValidateString("inputName", statusCode, comment) && + OBSSourceAutoRelease sceneSource = request.ValidateScene("sceneName", statusCode, comment); + if (!(sceneSource && request.ValidateString("inputName", statusCode, comment) && request.ValidateString("inputKind", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string inputName = request.RequestData["inputName"]; - OBSSourceAutoRelease existingInput = - obs_get_source_by_name(inputName.c_str()); + OBSSourceAutoRelease existingInput = obs_get_source_by_name(inputName.c_str()); if (existingInput) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists, - "A source already exists by that input name."); + return RequestResult::Error(RequestStatus::ResourceAlreadyExists, "A source already exists by that input name."); std::string inputKind = request.RequestData["inputKind"]; auto kinds = Utils::Obs::ArrayHelper::GetInputKindList(); @@ -171,20 +161,17 @@ RequestResult RequestHandler::CreateInput(const Request &request) OBSDataAutoRelease inputSettings = nullptr; if (request.Contains("inputSettings")) { - if (!request.ValidateOptionalObject("inputSettings", statusCode, - comment, true)) + if (!request.ValidateOptionalObject("inputSettings", statusCode, comment, true)) return RequestResult::Error(statusCode, comment); - inputSettings = Utils::Json::JsonToObsData( - request.RequestData["inputSettings"]); + inputSettings = Utils::Json::JsonToObsData(request.RequestData["inputSettings"]); } OBSScene scene = obs_scene_from_source(sceneSource); bool sceneItemEnabled = true; if (request.Contains("sceneItemEnabled")) { - if (!request.ValidateOptionalBoolean("sceneItemEnabled", - statusCode, comment)) + if (!request.ValidateOptionalBoolean("sceneItemEnabled", statusCode, comment)) return RequestResult::Error(statusCode, comment); sceneItemEnabled = request.RequestData["sceneItemEnabled"]; @@ -192,14 +179,10 @@ RequestResult RequestHandler::CreateInput(const Request &request) // Create the input and add it as a scene item to the destination scene OBSSceneItemAutoRelease sceneItem = - Utils::Obs::ActionHelper::CreateInput(inputName, inputKind, - inputSettings, scene, - sceneItemEnabled); + Utils::Obs::ActionHelper::CreateInput(inputName, inputKind, inputSettings, scene, sceneItemEnabled); if (!sceneItem) - return RequestResult::Error( - RequestStatus::ResourceCreationFailed, - "Creation of the input or scene item failed."); + return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Creation of the input or scene item failed."); json responseData; responseData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); @@ -224,8 +207,7 @@ RequestResult RequestHandler::RemoveInput(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); @@ -254,20 +236,16 @@ RequestResult RequestHandler::SetInputName(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateString("newInputName", statusCode, comment))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateString("newInputName", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string newInputName = request.RequestData["newInputName"]; - OBSSourceAutoRelease existingSource = - obs_get_source_by_name(newInputName.c_str()); + OBSSourceAutoRelease existingSource = obs_get_source_by_name(newInputName.c_str()); if (existingSource) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists, - "A source already exists by that new input name."); + return RequestResult::Error(RequestStatus::ResourceAlreadyExists, + "A source already exists by that new input name."); obs_source_set_name(input, newInputName.c_str()); @@ -300,14 +278,12 @@ RequestResult RequestHandler::GetInputDefaultSettings(const Request &request) if (std::find(kinds.begin(), kinds.end(), inputKind) == kinds.end()) return RequestResult::Error(RequestStatus::InvalidInputKind); - OBSDataAutoRelease defaultSettings = - obs_get_source_defaults(inputKind.c_str()); + OBSDataAutoRelease defaultSettings = obs_get_source_defaults(inputKind.c_str()); if (!defaultSettings) return RequestResult::Error(RequestStatus::InvalidInputKind); json responseData; - responseData["defaultInputSettings"] = - Utils::Json::ObsDataToJson(defaultSettings, true); + responseData["defaultInputSettings"] = Utils::Json::ObsDataToJson(defaultSettings, true); return RequestResult::Success(responseData); } @@ -332,16 +308,14 @@ RequestResult RequestHandler::GetInputSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); OBSDataAutoRelease inputSettings = obs_source_get_settings(input); json responseData; - responseData["inputSettings"] = - Utils::Json::ObsDataToJson(inputSettings); + responseData["inputSettings"] = Utils::Json::ObsDataToJson(inputSettings); responseData["inputKind"] = obs_source_get_id(input); return RequestResult::Success(responseData); } @@ -364,29 +338,24 @@ RequestResult RequestHandler::SetInputSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && request.ValidateObject("inputSettings", statusCode, - comment, true))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateObject("inputSettings", statusCode, comment, true))) return RequestResult::Error(statusCode, comment); bool overlay = true; if (request.Contains("overlay")) { - if (!request.ValidateOptionalBoolean("overlay", statusCode, - comment)) + if (!request.ValidateOptionalBoolean("overlay", statusCode, comment)) return RequestResult::Error(statusCode, comment); overlay = request.RequestData["overlay"]; } // Get the new settings and convert it to obs_data_t* - OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData( - request.RequestData["inputSettings"]); + OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData(request.RequestData["inputSettings"]); if (!newSettings) // This should never happen - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "An internal data conversion operation failed. Please report this!"); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, + "An internal data conversion operation failed. Please report this!"); if (overlay) // Applies the new settings on top of the existing user settings @@ -419,15 +388,12 @@ RequestResult RequestHandler::GetInputMute(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); json responseData; responseData["inputMuted"] = obs_source_muted(input); @@ -451,16 +417,12 @@ RequestResult RequestHandler::SetInputMute(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateBoolean("inputMuted", statusCode, comment))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateBoolean("inputMuted", statusCode, comment))) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); obs_source_set_muted(input, request.RequestData["inputMuted"]); @@ -485,15 +447,12 @@ RequestResult RequestHandler::ToggleInputMute(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); bool inputMuted = !obs_source_muted(input); obs_source_set_muted(input, inputMuted); @@ -522,15 +481,12 @@ RequestResult RequestHandler::GetInputVolume(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); float inputVolumeMul = obs_source_get_volume(input); float inputVolumeDb = obs_mul_to_db(inputVolumeMul); @@ -561,42 +517,32 @@ RequestResult RequestHandler::SetInputVolume(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); bool hasMul = request.Contains("inputVolumeMul"); - if (hasMul && !request.ValidateOptionalNumber( - "inputVolumeMul", statusCode, comment, 0, 20)) + if (hasMul && !request.ValidateOptionalNumber("inputVolumeMul", statusCode, comment, 0, 20)) return RequestResult::Error(statusCode, comment); bool hasDb = request.Contains("inputVolumeDb"); - if (hasDb && !request.ValidateOptionalNumber( - "inputVolumeDb", statusCode, comment, -100, 26)) + if (hasDb && !request.ValidateOptionalNumber("inputVolumeDb", statusCode, comment, -100, 26)) return RequestResult::Error(statusCode, comment); if (hasMul && hasDb) - return RequestResult::Error( - RequestStatus::TooManyRequestFields, - "You may only specify one volume field."); + return RequestResult::Error(RequestStatus::TooManyRequestFields, "You may only specify one volume field."); if (!hasMul && !hasDb) - return RequestResult::Error( - RequestStatus::MissingRequestField, - "You must specify one volume field."); + return RequestResult::Error(RequestStatus::MissingRequestField, "You must specify one volume field."); float inputVolumeMul; if (hasMul) inputVolumeMul = request.RequestData["inputVolumeMul"]; else - inputVolumeMul = - obs_db_to_mul(request.RequestData["inputVolumeDb"]); + inputVolumeMul = obs_db_to_mul(request.RequestData["inputVolumeDb"]); obs_source_set_volume(input, inputVolumeMul); @@ -621,15 +567,12 @@ RequestResult RequestHandler::GetInputAudioBalance(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); json responseData; responseData["inputAudioBalance"] = obs_source_get_balance_value(input); @@ -654,16 +597,12 @@ RequestResult RequestHandler::SetInputAudioBalance(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && request.ValidateNumber("inputAudioBalance", statusCode, - comment, 0.0, 1.0))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateNumber("inputAudioBalance", statusCode, comment, 0.0, 1.0))) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); float inputAudioBalance = request.RequestData["inputAudioBalance"]; obs_source_set_balance_value(input, inputAudioBalance); @@ -691,20 +630,16 @@ RequestResult RequestHandler::GetInputAudioSyncOffset(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); json responseData; // Offset is stored in nanoseconds in OBS. - responseData["inputAudioSyncOffset"] = - obs_source_get_sync_offset(input) / 1000000; + responseData["inputAudioSyncOffset"] = obs_source_get_sync_offset(input) / 1000000; return RequestResult::Success(responseData); } @@ -726,17 +661,12 @@ RequestResult RequestHandler::SetInputAudioSyncOffset(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateNumber("inputAudioSyncOffset", statusCode, - comment, -950, 20000))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateNumber("inputAudioSyncOffset", statusCode, comment, -950, 20000))) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); int64_t syncOffset = request.RequestData["inputAudioSyncOffset"]; obs_source_set_sync_offset(input, syncOffset * 1000000); @@ -768,19 +698,15 @@ RequestResult RequestHandler::GetInputAudioMonitorType(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); json responseData; - responseData["monitorType"] = - Utils::Obs::StringHelper::GetInputMonitorType(input); + responseData["monitorType"] = Utils::Obs::StringHelper::GetInputMonitorType(input); return RequestResult::Success(responseData); } @@ -802,21 +728,16 @@ RequestResult RequestHandler::SetInputAudioMonitorType(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateString("monitorType", statusCode, comment))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateString("monitorType", statusCode, comment))) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); if (!obs_audio_monitoring_available()) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "Audio monitoring is not available on this platform."); + return RequestResult::Error(RequestStatus::InvalidResourceState, + "Audio monitoring is not available on this platform."); enum obs_monitoring_type monitorType; std::string monitorTypeString = request.RequestData["monitorType"]; @@ -827,10 +748,8 @@ RequestResult RequestHandler::SetInputAudioMonitorType(const Request &request) else if (monitorTypeString == "OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT") monitorType = OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT; else - return RequestResult::Error( - RequestStatus::InvalidRequestField, - std::string("Unknown monitor type: ") + - monitorTypeString); + return RequestResult::Error(RequestStatus::InvalidRequestField, + std::string("Unknown monitor type: ") + monitorTypeString); obs_source_set_monitoring_type(input, monitorType); @@ -855,22 +774,18 @@ RequestResult RequestHandler::GetInputAudioTracks(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); long long tracks = obs_source_get_audio_mixers(input); json inputAudioTracks; for (long long i = 0; i < MAX_AUDIO_MIXES; i++) { - inputAudioTracks[std::to_string(i + 1)] = - (bool)((tracks >> i) & 1); + inputAudioTracks[std::to_string(i + 1)] = (bool)((tracks >> i) & 1); } json responseData; @@ -896,16 +811,12 @@ RequestResult RequestHandler::SetInputAudioTracks(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!input || - !request.ValidateObject("inputAudioTracks", statusCode, comment)) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!input || !request.ValidateObject("inputAudioTracks", statusCode, comment)) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_AUDIO)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support audio."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The specified input does not support audio."); json inputAudioTracks = request.RequestData["inputAudioTracks"]; @@ -918,9 +829,8 @@ RequestResult RequestHandler::SetInputAudioTracks(const Request &request) continue; if (!inputAudioTracks[track].is_boolean()) - return RequestResult::Error( - RequestStatus::InvalidRequestFieldType, - "The value of one of your tracks is not a boolean."); + return RequestResult::Error(RequestStatus::InvalidRequestFieldType, + "The value of one of your tracks is not a boolean."); bool enabled = inputAudioTracks[track]; @@ -953,34 +863,25 @@ RequestResult RequestHandler::SetInputAudioTracks(const Request &request) * @api requests * @category inputs */ -RequestResult -RequestHandler::GetInputPropertiesListPropertyItems(const Request &request) +RequestResult RequestHandler::GetInputPropertiesListPropertyItems(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateString("propertyName", statusCode, comment))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateString("propertyName", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string propertyName = request.RequestData["propertyName"]; OBSPropertiesAutoDestroy inputProperties = obs_source_properties(input); - obs_property_t *property = - obs_properties_get(inputProperties, propertyName.c_str()); + obs_property_t *property = obs_properties_get(inputProperties, propertyName.c_str()); if (!property) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "Unable to find a property by that name."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "Unable to find a property by that name."); if (obs_property_get_type(property) != OBS_PROPERTY_LIST) - return RequestResult::Error( - RequestStatus::InvalidResourceType, - "The property found is not a list."); + return RequestResult::Error(RequestStatus::InvalidResourceType, "The property found is not a list."); json responseData; - responseData["propertyItems"] = - Utils::Obs::ArrayHelper::GetListPropertyItems(property); + responseData["propertyItems"] = Utils::Obs::ArrayHelper::GetListPropertyItems(property); return RequestResult::Success(responseData); } @@ -1004,29 +905,20 @@ RequestResult RequestHandler::PressInputPropertiesButton(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateString("propertyName", statusCode, comment))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateString("propertyName", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string propertyName = request.RequestData["propertyName"]; OBSPropertiesAutoDestroy inputProperties = obs_source_properties(input); - obs_property_t *property = - obs_properties_get(inputProperties, propertyName.c_str()); + obs_property_t *property = obs_properties_get(inputProperties, propertyName.c_str()); if (!property) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "Unable to find a property by that name."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "Unable to find a property by that name."); if (obs_property_get_type(property) != OBS_PROPERTY_BUTTON) - return RequestResult::Error( - RequestStatus::InvalidResourceType, - "The property found is not a button."); + return RequestResult::Error(RequestStatus::InvalidResourceType, "The property found is not a button."); if (!obs_property_enabled(property)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The property item found is not enabled."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "The property item found is not enabled."); obs_property_button_clicked(property, input); diff --git a/src/requesthandler/RequestHandler_MediaInputs.cpp b/src/requesthandler/RequestHandler_MediaInputs.cpp index 9f53163b..dab152be 100644 --- a/src/requesthandler/RequestHandler_MediaInputs.cpp +++ b/src/requesthandler/RequestHandler_MediaInputs.cpp @@ -22,8 +22,7 @@ with this program. If not, see bool IsMediaTimeValid(obs_source_t *input) { auto mediaState = obs_source_media_get_state(input); - return mediaState == OBS_MEDIA_STATE_PLAYING || - mediaState == OBS_MEDIA_STATE_PAUSED; + return mediaState == OBS_MEDIA_STATE_PLAYING || mediaState == OBS_MEDIA_STATE_PAUSED; } /** @@ -57,18 +56,15 @@ RequestResult RequestHandler::GetMediaInputStatus(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); json responseData; - responseData["mediaState"] = - Utils::Obs::StringHelper::GetMediaInputState(input); + responseData["mediaState"] = Utils::Obs::StringHelper::GetMediaInputState(input); if (IsMediaTimeValid(input)) { - responseData["mediaDuration"] = - obs_source_media_get_duration(input); + responseData["mediaDuration"] = obs_source_media_get_duration(input); responseData["mediaCursor"] = obs_source_media_get_time(input); } else { responseData["mediaDuration"] = nullptr; @@ -97,16 +93,13 @@ RequestResult RequestHandler::SetMediaInputCursor(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateNumber("mediaCursor", statusCode, comment, 0))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateNumber("mediaCursor", statusCode, comment, 0))) return RequestResult::Error(statusCode, comment); if (!IsMediaTimeValid(input)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The media input must be playing or paused in order to set the cursor position."); + return RequestResult::Error(RequestStatus::InvalidResourceState, + "The media input must be playing or paused in order to set the cursor position."); int64_t mediaCursor = request.RequestData["mediaCursor"]; @@ -135,20 +128,16 @@ RequestResult RequestHandler::OffsetMediaInputCursor(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateNumber("mediaCursorOffset", statusCode, comment))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateNumber("mediaCursorOffset", statusCode, comment))) return RequestResult::Error(statusCode, comment); if (!IsMediaTimeValid(input)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The media input must be playing or paused in order to set the cursor position."); + return RequestResult::Error(RequestStatus::InvalidResourceState, + "The media input must be playing or paused in order to set the cursor position."); int64_t mediaCursorOffset = request.RequestData["mediaCursorOffset"]; - int64_t mediaCursor = - obs_source_media_get_time(input) + mediaCursorOffset; + int64_t mediaCursor = obs_source_media_get_time(input) + mediaCursorOffset; if (mediaCursor < 0) mediaCursor = 0; @@ -175,22 +164,18 @@ RequestResult RequestHandler::TriggerMediaInputAction(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); - if (!(input && - request.ValidateString("mediaAction", statusCode, comment))) + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); + if (!(input && request.ValidateString("mediaAction", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string mediaActionString = request.RequestData["mediaAction"]; - auto mediaAction = - Utils::Obs::EnumHelper::GetMediaInputAction(mediaActionString); + auto mediaAction = Utils::Obs::EnumHelper::GetMediaInputAction(mediaActionString); switch (mediaAction) { default: case OBS_WEBSOCKET_MEDIA_INPUT_ACTION_NONE: - return RequestResult::Error( - RequestStatus::InvalidRequestField, - "You have specified an invalid media input action."); + return RequestResult::Error(RequestStatus::InvalidRequestField, + "You have specified an invalid media input action."); case OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY: // Shoutout to whoever implemented this API call like this obs_source_media_play_pause(input, false); diff --git a/src/requesthandler/RequestHandler_Outputs.cpp b/src/requesthandler/RequestHandler_Outputs.cpp index 2b75afdd..89564c97 100644 --- a/src/requesthandler/RequestHandler_Outputs.cpp +++ b/src/requesthandler/RequestHandler_Outputs.cpp @@ -49,8 +49,7 @@ static bool ReplayBufferAvailable() RequestResult RequestHandler::GetVirtualCamStatus(const Request &) { if (!VirtualCamAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "VirtualCam is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "VirtualCam is not available."); json responseData; responseData["outputActive"] = obs_frontend_virtualcam_active(); @@ -72,8 +71,7 @@ RequestResult RequestHandler::GetVirtualCamStatus(const Request &) RequestResult RequestHandler::ToggleVirtualCam(const Request &) { if (!VirtualCamAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "VirtualCam is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "VirtualCam is not available."); bool outputActive = obs_frontend_virtualcam_active(); @@ -100,8 +98,7 @@ RequestResult RequestHandler::ToggleVirtualCam(const Request &) RequestResult RequestHandler::StartVirtualCam(const Request &) { if (!VirtualCamAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "VirtualCam is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "VirtualCam is not available."); if (obs_frontend_virtualcam_active()) return RequestResult::Error(RequestStatus::OutputRunning); @@ -124,8 +121,7 @@ RequestResult RequestHandler::StartVirtualCam(const Request &) RequestResult RequestHandler::StopVirtualCam(const Request &) { if (!VirtualCamAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "VirtualCam is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "VirtualCam is not available."); if (!obs_frontend_virtualcam_active()) return RequestResult::Error(RequestStatus::OutputNotRunning); @@ -150,8 +146,7 @@ RequestResult RequestHandler::StopVirtualCam(const Request &) RequestResult RequestHandler::GetReplayBufferStatus(const Request &) { if (!ReplayBufferAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "Replay buffer is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "Replay buffer is not available."); json responseData; responseData["outputActive"] = obs_frontend_replay_buffer_active(); @@ -173,8 +168,7 @@ RequestResult RequestHandler::GetReplayBufferStatus(const Request &) RequestResult RequestHandler::ToggleReplayBuffer(const Request &) { if (!ReplayBufferAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "Replay buffer is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "Replay buffer is not available."); bool outputActive = obs_frontend_replay_buffer_active(); @@ -201,8 +195,7 @@ RequestResult RequestHandler::ToggleReplayBuffer(const Request &) RequestResult RequestHandler::StartReplayBuffer(const Request &) { if (!ReplayBufferAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "Replay buffer is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "Replay buffer is not available."); if (obs_frontend_replay_buffer_active()) return RequestResult::Error(RequestStatus::OutputRunning); @@ -225,8 +218,7 @@ RequestResult RequestHandler::StartReplayBuffer(const Request &) RequestResult RequestHandler::StopReplayBuffer(const Request &) { if (!ReplayBufferAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "Replay buffer is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "Replay buffer is not available."); if (!obs_frontend_replay_buffer_active()) return RequestResult::Error(RequestStatus::OutputNotRunning); @@ -249,8 +241,7 @@ RequestResult RequestHandler::StopReplayBuffer(const Request &) RequestResult RequestHandler::SaveReplayBuffer(const Request &) { if (!ReplayBufferAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "Replay buffer is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "Replay buffer is not available."); if (!obs_frontend_replay_buffer_active()) return RequestResult::Error(RequestStatus::OutputNotRunning); @@ -275,14 +266,12 @@ RequestResult RequestHandler::SaveReplayBuffer(const Request &) RequestResult RequestHandler::GetLastReplayBufferReplay(const Request &) { if (!ReplayBufferAvailable()) - return RequestResult::Error(RequestStatus::InvalidResourceState, - "Replay buffer is not available."); + return RequestResult::Error(RequestStatus::InvalidResourceState, "Replay buffer is not available."); if (!obs_frontend_replay_buffer_active()) return RequestResult::Error(RequestStatus::OutputNotRunning); json responseData; - responseData["savedReplayPath"] = - Utils::Obs::StringHelper::GetLastReplayBufferFilePath(); + responseData["savedReplayPath"] = Utils::Obs::StringHelper::GetLastReplayBufferFilePath(); return RequestResult::Success(responseData); } diff --git a/src/requesthandler/RequestHandler_Record.cpp b/src/requesthandler/RequestHandler_Record.cpp index 7725c19e..efea13fa 100644 --- a/src/requesthandler/RequestHandler_Record.cpp +++ b/src/requesthandler/RequestHandler_Record.cpp @@ -39,17 +39,14 @@ RequestResult RequestHandler::GetRecordStatus(const Request &) { OBSOutputAutoRelease recordOutput = obs_frontend_get_recording_output(); - uint64_t outputDuration = - Utils::Obs::NumberHelper::GetOutputDuration(recordOutput); + uint64_t outputDuration = Utils::Obs::NumberHelper::GetOutputDuration(recordOutput); json responseData; responseData["outputActive"] = obs_output_active(recordOutput); responseData["outputPaused"] = obs_output_paused(recordOutput); - responseData["outputTimecode"] = - Utils::Obs::StringHelper::DurationToTimecode(outputDuration); + responseData["outputTimecode"] = Utils::Obs::StringHelper::DurationToTimecode(outputDuration); responseData["outputDuration"] = outputDuration; - responseData["outputBytes"] = - (uint64_t)obs_output_get_total_bytes(recordOutput); + responseData["outputBytes"] = (uint64_t)obs_output_get_total_bytes(recordOutput); return RequestResult::Success(responseData); } diff --git a/src/requesthandler/RequestHandler_SceneItems.cpp b/src/requesthandler/RequestHandler_SceneItems.cpp index fb790431..01633ce4 100644 --- a/src/requesthandler/RequestHandler_SceneItems.cpp +++ b/src/requesthandler/RequestHandler_SceneItems.cpp @@ -39,14 +39,12 @@ RequestResult RequestHandler::GetSceneItemList(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment); + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment); if (!scene) return RequestResult::Error(statusCode, comment); json responseData; - responseData["sceneItems"] = Utils::Obs::ArrayHelper::GetSceneItemList( - obs_scene_from_source(scene)); + responseData["sceneItems"] = Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_from_source(scene)); return RequestResult::Success(responseData); } @@ -73,15 +71,12 @@ RequestResult RequestHandler::GetGroupSceneItemList(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_GROUP_ONLY); + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment, OBS_WEBSOCKET_SCENE_FILTER_GROUP_ONLY); if (!scene) return RequestResult::Error(statusCode, comment); json responseData; - responseData["sceneItems"] = Utils::Obs::ArrayHelper::GetSceneItemList( - obs_group_from_source(scene)); + responseData["sceneItems"] = Utils::Obs::ArrayHelper::GetSceneItemList(obs_group_from_source(scene)); return RequestResult::Success(responseData); } @@ -108,30 +103,24 @@ RequestResult RequestHandler::GetSceneItemId(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneAutoRelease scene = request.ValidateScene2( - "sceneName", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); - if (!(scene && - request.ValidateString("sourceName", statusCode, comment))) + OBSSceneAutoRelease scene = + request.ValidateScene2("sceneName", statusCode, comment, OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + if (!(scene && request.ValidateString("sourceName", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string sourceName = request.RequestData["sourceName"]; int offset = 0; if (request.Contains("searchOffset")) { - if (!request.ValidateOptionalNumber("searchOffset", statusCode, - comment, -1)) + if (!request.ValidateOptionalNumber("searchOffset", statusCode, comment, -1)) return RequestResult::Error(statusCode, comment); offset = request.RequestData["searchOffset"]; } - OBSSceneItemAutoRelease item = - Utils::Obs::SearchHelper::GetSceneItemByName(scene, sourceName, - offset); + OBSSceneItemAutoRelease item = Utils::Obs::SearchHelper::GetSceneItemByName(scene, sourceName, offset); if (!item) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "No scene items were found in the specified scene by that name or offset."); + return RequestResult::Error(RequestStatus::ResourceNotFound, + "No scene items were found in the specified scene by that name or offset."); json responseData; responseData["sceneItemId"] = obs_sceneitem_get_id(item); @@ -161,39 +150,29 @@ RequestResult RequestHandler::CreateSceneItem(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease sceneSource = - request.ValidateScene("sceneName", statusCode, comment); + OBSSourceAutoRelease sceneSource = request.ValidateScene("sceneName", statusCode, comment); if (!sceneSource) return RequestResult::Error(statusCode, comment); OBSScene scene = obs_scene_from_source(sceneSource); - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); if (!source) return RequestResult::Error(statusCode, comment); - if (request.RequestData["sceneName"] == - request.RequestData["sourceName"]) - return RequestResult::Error( - RequestStatus::CannotAct, - "You cannot create scene item of a scene within itself."); + if (request.RequestData["sceneName"] == request.RequestData["sourceName"]) + return RequestResult::Error(RequestStatus::CannotAct, "You cannot create scene item of a scene within itself."); bool sceneItemEnabled = true; if (request.Contains("sceneItemEnabled")) { - if (!request.ValidateOptionalBoolean("sceneItemEnabled", - statusCode, comment)) + if (!request.ValidateOptionalBoolean("sceneItemEnabled", statusCode, comment)) return RequestResult::Error(statusCode, comment); sceneItemEnabled = request.RequestData["sceneItemEnabled"]; } - OBSSceneItemAutoRelease sceneItem = - Utils::Obs::ActionHelper::CreateSceneItem(source, scene, - sceneItemEnabled); + OBSSceneItemAutoRelease sceneItem = Utils::Obs::ActionHelper::CreateSceneItem(source, scene, sceneItemEnabled); if (!sceneItem) - return RequestResult::Error( - RequestStatus::ResourceCreationFailed, - "Failed to create the scene item."); + return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Failed to create the scene item."); json responseData; responseData["sceneItemId"] = obs_sceneitem_get_id(sceneItem); @@ -220,8 +199,7 @@ RequestResult RequestHandler::RemoveSceneItem(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment); if (!sceneItem) return RequestResult::Error(statusCode, comment); @@ -253,33 +231,26 @@ RequestResult RequestHandler::DuplicateSceneItem(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment); if (!sceneItem) return RequestResult::Error(statusCode, comment); // Get destination scene obs_scene_t *destinationScene; if (request.Contains("destinationSceneName")) { - destinationScene = request.ValidateScene2( - "destinationSceneName", statusCode, comment); + destinationScene = request.ValidateScene2("destinationSceneName", statusCode, comment); if (!destinationScene) return RequestResult::Error(statusCode, comment); } else { - destinationScene = - obs_scene_get_ref(obs_sceneitem_get_scene(sceneItem)); + destinationScene = obs_scene_get_ref(obs_sceneitem_get_scene(sceneItem)); if (!destinationScene) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Internal error: Failed to get ref for scene of scene item."); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, + "Internal error: Failed to get ref for scene of scene item."); } - if (obs_sceneitem_is_group(sceneItem) && - obs_sceneitem_get_scene(sceneItem) == destinationScene) { + if (obs_sceneitem_is_group(sceneItem) && obs_sceneitem_get_scene(sceneItem) == destinationScene) { obs_scene_release(destinationScene); - return RequestResult::Error( - RequestStatus::ResourceCreationFailed, - "Scenes may only have one instance of a group."); + return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Scenes may only have one instance of a group."); } // Get scene item details @@ -291,15 +262,11 @@ RequestResult RequestHandler::DuplicateSceneItem(const Request &request) obs_sceneitem_get_crop(sceneItem, &sceneItemCrop); // Create the new item - OBSSceneItemAutoRelease newSceneItem = - Utils::Obs::ActionHelper::CreateSceneItem( - sceneItemSource, destinationScene, sceneItemEnabled, - &sceneItemTransform, &sceneItemCrop); + OBSSceneItemAutoRelease newSceneItem = Utils::Obs::ActionHelper::CreateSceneItem( + sceneItemSource, destinationScene, sceneItemEnabled, &sceneItemTransform, &sceneItemCrop); obs_scene_release(destinationScene); if (!newSceneItem) - return RequestResult::Error( - RequestStatus::ResourceCreationFailed, - "Failed to create the scene item."); + return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Failed to create the scene item."); json responseData; responseData["sceneItemId"] = obs_sceneitem_get_id(newSceneItem); @@ -328,15 +295,13 @@ RequestResult RequestHandler::GetSceneItemTransform(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); if (!sceneItem) return RequestResult::Error(statusCode, comment); json responseData; - responseData["sceneItemTransform"] = - Utils::Obs::ObjectHelper::GetSceneItemTransform(sceneItem); + responseData["sceneItemTransform"] = Utils::Obs::ObjectHelper::GetSceneItemTransform(sceneItem); return RequestResult::Success(responseData); } @@ -359,11 +324,9 @@ RequestResult RequestHandler::SetSceneItemTransform(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); - if (!(sceneItem && request.ValidateObject("sceneItemTransform", - statusCode, comment))) + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + if (!(sceneItem && request.ValidateObject("sceneItemTransform", statusCode, comment))) return RequestResult::Error(statusCode, comment); // Create a fake request to use checks on the sub object @@ -381,23 +344,20 @@ RequestResult RequestHandler::SetSceneItemTransform(const Request &request) float sourceHeight = float(obs_source_get_height(source)); if (r.Contains("positionX")) { - if (!r.ValidateOptionalNumber("positionX", statusCode, comment, - -90001.0, 90001.0)) + if (!r.ValidateOptionalNumber("positionX", statusCode, comment, -90001.0, 90001.0)) return RequestResult::Error(statusCode, comment); sceneItemTransform.pos.x = r.RequestData["positionX"]; transformChanged = true; } if (r.Contains("positionY")) { - if (!r.ValidateOptionalNumber("positionY", statusCode, comment, - -90001.0, 90001.0)) + if (!r.ValidateOptionalNumber("positionY", statusCode, comment, -90001.0, 90001.0)) return RequestResult::Error(statusCode, comment); sceneItemTransform.pos.y = r.RequestData["positionY"]; transformChanged = true; } if (r.Contains("rotation")) { - if (!r.ValidateOptionalNumber("rotation", statusCode, comment, - -360.0, 360.0)) + if (!r.ValidateOptionalNumber("rotation", statusCode, comment, -360.0, 360.0)) return RequestResult::Error(statusCode, comment); sceneItemTransform.rot = r.RequestData["rotation"]; transformChanged = true; @@ -409,110 +369,89 @@ RequestResult RequestHandler::SetSceneItemTransform(const Request &request) float scaleX = r.RequestData["scaleX"]; float finalWidth = scaleX * sourceWidth; if (!(finalWidth > -90001.0 && finalWidth < 90001.0)) - return RequestResult::Error( - RequestStatus::RequestFieldOutOfRange, - "The field scaleX is too small or large for the current source resolution."); + return RequestResult::Error(RequestStatus::RequestFieldOutOfRange, + "The field scaleX is too small or large for the current source resolution."); sceneItemTransform.scale.x = scaleX; transformChanged = true; } if (r.Contains("scaleY")) { - if (!r.ValidateOptionalNumber("scaleY", statusCode, comment, - -90001.0, 90001.0)) + if (!r.ValidateOptionalNumber("scaleY", statusCode, comment, -90001.0, 90001.0)) return RequestResult::Error(statusCode, comment); float scaleY = r.RequestData["scaleY"]; float finalHeight = scaleY * sourceHeight; if (!(finalHeight > -90001.0 && finalHeight < 90001.0)) - return RequestResult::Error( - RequestStatus::RequestFieldOutOfRange, - "The field scaleY is too small or large for the current source resolution."); + return RequestResult::Error(RequestStatus::RequestFieldOutOfRange, + "The field scaleY is too small or large for the current source resolution."); sceneItemTransform.scale.y = scaleY; transformChanged = true; } if (r.Contains("alignment")) { - if (!r.ValidateOptionalNumber( - "alignment", statusCode, comment, 0, - std::numeric_limits::max())) + if (!r.ValidateOptionalNumber("alignment", statusCode, comment, 0, std::numeric_limits::max())) return RequestResult::Error(statusCode, comment); sceneItemTransform.alignment = r.RequestData["alignment"]; transformChanged = true; } if (r.Contains("boundsType")) { - if (!r.ValidateOptionalString("boundsType", statusCode, - comment)) + if (!r.ValidateOptionalString("boundsType", statusCode, comment)) return RequestResult::Error(statusCode, comment); std::string boundsTypeString = r.RequestData["boundsType"]; - enum obs_bounds_type boundsType = - Utils::Obs::EnumHelper::GetSceneItemBoundsType( - boundsTypeString); - if (boundsType == OBS_BOUNDS_NONE && - boundsTypeString != "OBS_BOUNDS_NONE") - return RequestResult::Error( - RequestStatus::InvalidRequestField, - "The field boundsType has an invalid value."); + enum obs_bounds_type boundsType = Utils::Obs::EnumHelper::GetSceneItemBoundsType(boundsTypeString); + if (boundsType == OBS_BOUNDS_NONE && boundsTypeString != "OBS_BOUNDS_NONE") + return RequestResult::Error(RequestStatus::InvalidRequestField, + "The field boundsType has an invalid value."); sceneItemTransform.bounds_type = boundsType; transformChanged = true; } if (r.Contains("boundsAlignment")) { - if (!r.ValidateOptionalNumber( - "boundsAlignment", statusCode, comment, 0, - std::numeric_limits::max())) + if (!r.ValidateOptionalNumber("boundsAlignment", statusCode, comment, 0, std::numeric_limits::max())) return RequestResult::Error(statusCode, comment); - sceneItemTransform.bounds_alignment = - r.RequestData["boundsAlignment"]; + sceneItemTransform.bounds_alignment = r.RequestData["boundsAlignment"]; transformChanged = true; } if (r.Contains("boundsWidth")) { - if (!r.ValidateOptionalNumber("boundsWidth", statusCode, - comment, 1.0, 90001.0)) + if (!r.ValidateOptionalNumber("boundsWidth", statusCode, comment, 1.0, 90001.0)) return RequestResult::Error(statusCode, comment); sceneItemTransform.bounds.x = r.RequestData["boundsWidth"]; transformChanged = true; } if (r.Contains("boundsHeight")) { - if (!r.ValidateOptionalNumber("boundsHeight", statusCode, - comment, 1.0, 90001.0)) + if (!r.ValidateOptionalNumber("boundsHeight", statusCode, comment, 1.0, 90001.0)) return RequestResult::Error(statusCode, comment); sceneItemTransform.bounds.y = r.RequestData["boundsHeight"]; transformChanged = true; } if (r.Contains("cropLeft")) { - if (!r.ValidateOptionalNumber("cropLeft", statusCode, comment, - 0.0, 100000.0)) + if (!r.ValidateOptionalNumber("cropLeft", statusCode, comment, 0.0, 100000.0)) return RequestResult::Error(statusCode, comment); sceneItemCrop.left = r.RequestData["cropLeft"]; cropChanged = true; } if (r.Contains("cropRight")) { - if (!r.ValidateOptionalNumber("cropRight", statusCode, comment, - 0.0, 100000.0)) + if (!r.ValidateOptionalNumber("cropRight", statusCode, comment, 0.0, 100000.0)) return RequestResult::Error(statusCode, comment); sceneItemCrop.right = r.RequestData["cropRight"]; cropChanged = true; } if (r.Contains("cropTop")) { - if (!r.ValidateOptionalNumber("cropTop", statusCode, comment, - 0.0, 100000.0)) + if (!r.ValidateOptionalNumber("cropTop", statusCode, comment, 0.0, 100000.0)) return RequestResult::Error(statusCode, comment); sceneItemCrop.top = r.RequestData["cropTop"]; cropChanged = true; } if (r.Contains("cropBottom")) { - if (!r.ValidateOptionalNumber("cropBottom", statusCode, comment, - 0.0, 100000.0)) + if (!r.ValidateOptionalNumber("cropBottom", statusCode, comment, 0.0, 100000.0)) return RequestResult::Error(statusCode, comment); sceneItemCrop.bottom = r.RequestData["cropBottom"]; cropChanged = true; } if (!transformChanged && !cropChanged) - return RequestResult::Error( - RequestStatus::CannotAct, - "You have not provided any valid transform changes."); + return RequestResult::Error(RequestStatus::CannotAct, "You have not provided any valid transform changes."); if (transformChanged) obs_sceneitem_set_info(sceneItem, &sceneItemTransform); @@ -544,9 +483,8 @@ RequestResult RequestHandler::GetSceneItemEnabled(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); if (!sceneItem) return RequestResult::Error(statusCode, comment); @@ -576,11 +514,9 @@ RequestResult RequestHandler::SetSceneItemEnabled(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); - if (!(sceneItem && - request.ValidateBoolean("sceneItemEnabled", statusCode, comment))) + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + if (!(sceneItem && request.ValidateBoolean("sceneItemEnabled", statusCode, comment))) return RequestResult::Error(statusCode, comment); bool sceneItemEnabled = request.RequestData["sceneItemEnabled"]; @@ -611,9 +547,8 @@ RequestResult RequestHandler::GetSceneItemLocked(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); if (!sceneItem) return RequestResult::Error(statusCode, comment); @@ -643,11 +578,9 @@ RequestResult RequestHandler::SetSceneItemLocked(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); - if (!(sceneItem && - request.ValidateBoolean("sceneItemLocked", statusCode, comment))) + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + if (!(sceneItem && request.ValidateBoolean("sceneItemLocked", statusCode, comment))) return RequestResult::Error(statusCode, comment); bool sceneItemLocked = request.RequestData["sceneItemLocked"]; @@ -680,15 +613,13 @@ RequestResult RequestHandler::GetSceneItemIndex(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); if (!sceneItem) return RequestResult::Error(statusCode, comment); json responseData; - responseData["sceneItemIndex"] = - obs_sceneitem_get_order_position(sceneItem); + responseData["sceneItemIndex"] = obs_sceneitem_get_order_position(sceneItem); return RequestResult::Success(responseData); } @@ -713,11 +644,9 @@ RequestResult RequestHandler::SetSceneItemIndex(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); - if (!(sceneItem && request.ValidateNumber("sceneItemIndex", statusCode, - comment, 0, 8192))) + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + if (!(sceneItem && request.ValidateNumber("sceneItemIndex", statusCode, comment, 0, 8192))) return RequestResult::Error(statusCode, comment); int sceneItemIndex = request.RequestData["sceneItemIndex"]; @@ -758,17 +687,15 @@ RequestResult RequestHandler::GetSceneItemBlendMode(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); if (!sceneItem) return RequestResult::Error(statusCode, comment); auto blendMode = obs_sceneitem_get_blending_mode(sceneItem); json responseData; - responseData["sceneItemBlendMode"] = - Utils::Obs::StringHelper::GetSceneItemBlendMode(blendMode); + responseData["sceneItemBlendMode"] = Utils::Obs::StringHelper::GetSceneItemBlendMode(blendMode); return RequestResult::Success(responseData); } @@ -793,22 +720,17 @@ RequestResult RequestHandler::SetSceneItemBlendMode(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); - if (!(sceneItem && request.ValidateString("sceneItemBlendMode", - statusCode, comment))) + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + if (!(sceneItem && request.ValidateString("sceneItemBlendMode", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string blendModeString = request.RequestData["sceneItemBlendMode"]; - auto blendMode = - Utils::Obs::EnumHelper::GetSceneItemBlendMode(blendModeString); - if (blendMode == OBS_BLEND_NORMAL && - blendModeString != "OBS_BLEND_NORMAL") - return RequestResult::Error( - RequestStatus::InvalidRequestField, - "The field sceneItemBlendMode has an invalid value."); + auto blendMode = Utils::Obs::EnumHelper::GetSceneItemBlendMode(blendModeString); + if (blendMode == OBS_BLEND_NORMAL && blendModeString != "OBS_BLEND_NORMAL") + return RequestResult::Error(RequestStatus::InvalidRequestField, + "The field sceneItemBlendMode has an invalid value."); obs_sceneitem_set_blending_mode(sceneItem, blendMode); @@ -816,45 +738,36 @@ RequestResult RequestHandler::SetSceneItemBlendMode(const Request &request) } // Intentionally undocumented -RequestResult -RequestHandler::GetSceneItemPrivateSettings(const Request &request) +RequestResult RequestHandler::GetSceneItemPrivateSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); if (!sceneItem) return RequestResult::Error(statusCode, comment); - OBSDataAutoRelease privateSettings = - obs_sceneitem_get_private_settings(sceneItem); + OBSDataAutoRelease privateSettings = obs_sceneitem_get_private_settings(sceneItem); json responseData; - responseData["sceneItemSettings"] = - Utils::Json::ObsDataToJson(privateSettings); + responseData["sceneItemSettings"] = Utils::Json::ObsDataToJson(privateSettings); return RequestResult::Success(responseData); } // Intentionally undocumented -RequestResult -RequestHandler::SetSceneItemPrivateSettings(const Request &request) +RequestResult RequestHandler::SetSceneItemPrivateSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem( - "sceneName", "sceneItemId", statusCode, comment, - OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); - if (!sceneItem || - !request.ValidateObject("sceneItemSettings", statusCode, comment)) + OBSSceneItemAutoRelease sceneItem = request.ValidateSceneItem("sceneName", "sceneItemId", statusCode, comment, + OBS_WEBSOCKET_SCENE_FILTER_SCENE_OR_GROUP); + if (!sceneItem || !request.ValidateObject("sceneItemSettings", statusCode, comment)) return RequestResult::Error(statusCode, comment); - OBSDataAutoRelease privateSettings = - obs_sceneitem_get_private_settings(sceneItem); + OBSDataAutoRelease privateSettings = obs_sceneitem_get_private_settings(sceneItem); - OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData( - request.RequestData["sceneItemSettings"]); + OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData(request.RequestData["sceneItemSettings"]); // Always overlays to prevent destroying internal source unintentionally obs_data_apply(privateSettings, newSettings); diff --git a/src/requesthandler/RequestHandler_Scenes.cpp b/src/requesthandler/RequestHandler_Scenes.cpp index 02583276..fcf29390 100644 --- a/src/requesthandler/RequestHandler_Scenes.cpp +++ b/src/requesthandler/RequestHandler_Scenes.cpp @@ -37,19 +37,15 @@ RequestResult RequestHandler::GetSceneList(const Request &) { json responseData; - OBSSourceAutoRelease currentProgramScene = - obs_frontend_get_current_scene(); + OBSSourceAutoRelease currentProgramScene = obs_frontend_get_current_scene(); if (currentProgramScene) - responseData["currentProgramSceneName"] = - obs_source_get_name(currentProgramScene); + responseData["currentProgramSceneName"] = obs_source_get_name(currentProgramScene); else responseData["currentProgramSceneName"] = nullptr; - OBSSourceAutoRelease currentPreviewScene = - obs_frontend_get_current_preview_scene(); + OBSSourceAutoRelease currentPreviewScene = obs_frontend_get_current_preview_scene(); if (currentPreviewScene) - responseData["currentPreviewSceneName"] = - obs_source_get_name(currentPreviewScene); + responseData["currentPreviewSceneName"] = obs_source_get_name(currentPreviewScene); else responseData["currentPreviewSceneName"] = nullptr; @@ -96,10 +92,8 @@ RequestResult RequestHandler::GetGroupList(const Request &) RequestResult RequestHandler::GetCurrentProgramScene(const Request &) { json responseData; - OBSSourceAutoRelease currentProgramScene = - obs_frontend_get_current_scene(); - responseData["currentProgramSceneName"] = - obs_source_get_name(currentProgramScene); + OBSSourceAutoRelease currentProgramScene = obs_frontend_get_current_scene(); + responseData["currentProgramSceneName"] = obs_source_get_name(currentProgramScene); return RequestResult::Success(responseData); } @@ -120,8 +114,7 @@ RequestResult RequestHandler::SetCurrentProgramScene(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment); + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment); if (!scene) return RequestResult::Error(statusCode, comment); @@ -149,12 +142,10 @@ RequestResult RequestHandler::GetCurrentPreviewScene(const Request &) if (!obs_frontend_preview_program_mode_active()) return RequestResult::Error(RequestStatus::StudioModeNotActive); - OBSSourceAutoRelease currentPreviewScene = - obs_frontend_get_current_preview_scene(); + OBSSourceAutoRelease currentPreviewScene = obs_frontend_get_current_preview_scene(); json responseData; - responseData["currentPreviewSceneName"] = - obs_source_get_name(currentPreviewScene); + responseData["currentPreviewSceneName"] = obs_source_get_name(currentPreviewScene); return RequestResult::Success(responseData); } @@ -180,8 +171,7 @@ RequestResult RequestHandler::SetCurrentPreviewScene(const Request &request) RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment); + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment); if (!scene) return RequestResult::Error(statusCode, comment); @@ -213,15 +203,11 @@ RequestResult RequestHandler::CreateScene(const Request &request) OBSSourceAutoRelease scene = obs_get_source_by_name(sceneName.c_str()); if (scene) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists, - "A source already exists by that scene name."); + return RequestResult::Error(RequestStatus::ResourceAlreadyExists, "A source already exists by that scene name."); obs_scene_t *createdScene = obs_scene_create(sceneName.c_str()); if (!createdScene) - return RequestResult::Error( - RequestStatus::ResourceCreationFailed, - "Failed to create the scene."); + return RequestResult::Error(RequestStatus::ResourceCreationFailed, "Failed to create the scene."); obs_scene_release(createdScene); @@ -244,15 +230,13 @@ RequestResult RequestHandler::RemoveScene(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment); + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment); if (!scene) return RequestResult::Error(statusCode, comment); if (Utils::Obs::NumberHelper::GetSceneCount() < 2) - return RequestResult::Error( - RequestStatus::NotEnoughResources, - "You cannot remove the last scene in the collection."); + return RequestResult::Error(RequestStatus::NotEnoughResources, + "You cannot remove the last scene in the collection."); obs_source_remove(scene); @@ -276,20 +260,16 @@ RequestResult RequestHandler::SetSceneName(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment); - if (!(scene && - request.ValidateString("newSceneName", statusCode, comment))) + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment); + if (!(scene && request.ValidateString("newSceneName", statusCode, comment))) return RequestResult::Error(statusCode, comment); std::string newSceneName = request.RequestData["newSceneName"]; - OBSSourceAutoRelease existingSource = - obs_get_source_by_name(newSceneName.c_str()); + OBSSourceAutoRelease existingSource = obs_get_source_by_name(newSceneName.c_str()); if (existingSource) - return RequestResult::Error( - RequestStatus::ResourceAlreadyExists, - "A source already exists by that new scene name."); + return RequestResult::Error(RequestStatus::ResourceAlreadyExists, + "A source already exists by that new scene name."); obs_source_set_name(scene, newSceneName.c_str()); @@ -311,30 +291,25 @@ RequestResult RequestHandler::SetSceneName(const Request &request) * @api requests * @category scenes */ -RequestResult -RequestHandler::GetSceneSceneTransitionOverride(const Request &request) +RequestResult RequestHandler::GetSceneSceneTransitionOverride(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment); + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment); if (!scene) return RequestResult::Error(statusCode, comment); - OBSDataAutoRelease privateSettings = - obs_source_get_private_settings(scene); + OBSDataAutoRelease privateSettings = obs_source_get_private_settings(scene); json responseData; - const char *transitionName = - obs_data_get_string(privateSettings, "transition"); + const char *transitionName = obs_data_get_string(privateSettings, "transition"); if (transitionName && strlen(transitionName)) responseData["transitionName"] = transitionName; else responseData["transitionName"] = nullptr; if (obs_data_has_user_value(privateSettings, "transition_duration")) - responseData["transitionDuration"] = obs_data_get_int( - privateSettings, "transition_duration"); + responseData["transitionDuration"] = obs_data_get_int(privateSettings, "transition_duration"); else responseData["transitionDuration"] = nullptr; @@ -355,55 +330,42 @@ RequestHandler::GetSceneSceneTransitionOverride(const Request &request) * @api requests * @category scenes */ -RequestResult -RequestHandler::SetSceneSceneTransitionOverride(const Request &request) +RequestResult RequestHandler::SetSceneSceneTransitionOverride(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease scene = - request.ValidateScene("sceneName", statusCode, comment); + OBSSourceAutoRelease scene = request.ValidateScene("sceneName", statusCode, comment); if (!scene) return RequestResult::Error(statusCode, comment); - OBSDataAutoRelease privateSettings = - obs_source_get_private_settings(scene); + OBSDataAutoRelease privateSettings = obs_source_get_private_settings(scene); bool hasName = request.RequestData.contains("transitionName"); if (hasName && !request.RequestData["transitionName"].is_null()) { - if (!request.ValidateOptionalString("transitionName", - statusCode, comment)) + if (!request.ValidateOptionalString("transitionName", statusCode, comment)) return RequestResult::Error(statusCode, comment); OBSSourceAutoRelease transition = - Utils::Obs::SearchHelper::GetSceneTransitionByName( - request.RequestData["transitionName"]); + Utils::Obs::SearchHelper::GetSceneTransitionByName(request.RequestData["transitionName"]); if (!transition) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "No scene transition was found by that name."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "No scene transition was found by that name."); } bool hasDuration = request.RequestData.contains("transitionDuration"); - if (hasDuration && - !request.RequestData["transitionDuration"].is_null()) { - if (!request.ValidateOptionalNumber("transitionDuration", - statusCode, comment, 50, - 20000)) + if (hasDuration && !request.RequestData["transitionDuration"].is_null()) { + if (!request.ValidateOptionalNumber("transitionDuration", statusCode, comment, 50, 20000)) return RequestResult::Error(statusCode, comment); } if (!hasName && !hasDuration) - return RequestResult::Error( - RequestStatus::MissingRequestField, - "Your request data must include either `transitionName` or `transitionDuration`."); + return RequestResult::Error(RequestStatus::MissingRequestField, + "Your request data must include either `transitionName` or `transitionDuration`."); if (hasName) { if (request.RequestData["transitionName"].is_null()) { obs_data_erase(privateSettings, "transition"); } else { - std::string transitionName = - request.RequestData["transitionName"]; - obs_data_set_string(privateSettings, "transition", - transitionName.c_str()); + std::string transitionName = request.RequestData["transitionName"]; + obs_data_set_string(privateSettings, "transition", transitionName.c_str()); } } @@ -411,9 +373,7 @@ RequestHandler::SetSceneSceneTransitionOverride(const Request &request) if (request.RequestData["transitionDuration"].is_null()) { obs_data_erase(privateSettings, "transition_duration"); } else { - obs_data_set_int( - privateSettings, "transition_duration", - request.RequestData["transitionDuration"]); + obs_data_set_int(privateSettings, "transition_duration", request.RequestData["transitionDuration"]); } } diff --git a/src/requesthandler/RequestHandler_Sources.cpp b/src/requesthandler/RequestHandler_Sources.cpp index fb5d81bf..7aee8af2 100644 --- a/src/requesthandler/RequestHandler_Sources.cpp +++ b/src/requesthandler/RequestHandler_Sources.cpp @@ -25,15 +25,12 @@ with this program. If not, see #include "RequestHandler.h" -QImage TakeSourceScreenshot(obs_source_t *source, bool &success, - uint32_t requestedWidth = 0, - uint32_t requestedHeight = 0) +QImage TakeSourceScreenshot(obs_source_t *source, bool &success, uint32_t requestedWidth = 0, uint32_t requestedHeight = 0) { // Get info about the requested source const uint32_t sourceWidth = obs_source_get_base_width(source); const uint32_t sourceHeight = obs_source_get_base_height(source); - const double sourceAspectRatio = - ((double)sourceWidth / (double)sourceHeight); + const double sourceAspectRatio = ((double)sourceWidth / (double)sourceHeight); uint32_t imgWidth = sourceWidth; uint32_t imgHeight = sourceHeight; @@ -66,8 +63,7 @@ QImage TakeSourceScreenshot(obs_source_t *source, bool &success, obs_enter_graphics(); gs_texrender_t *texRender = gs_texrender_create(GS_RGBA, GS_ZS_NONE); - gs_stagesurf_t *stageSurface = - gs_stagesurface_create(imgWidth, imgHeight, GS_RGBA); + gs_stagesurf_t *stageSurface = gs_stagesurface_create(imgWidth, imgHeight, GS_RGBA); success = false; gs_texrender_reset(texRender); @@ -76,8 +72,7 @@ QImage TakeSourceScreenshot(obs_source_t *source, bool &success, vec4_zero(&background); gs_clear(GS_CLEAR_COLOR, &background, 0.0f, 0); - gs_ortho(0.0f, (float)sourceWidth, 0.0f, (float)sourceHeight, - -100.0f, 100.0f); + gs_ortho(0.0f, (float)sourceWidth, 0.0f, (float)sourceHeight, -100.0f, 100.0f); gs_blend_state_push(); gs_blend_function(GS_BLEND_ONE, GS_BLEND_ZERO); @@ -89,15 +84,11 @@ QImage TakeSourceScreenshot(obs_source_t *source, bool &success, gs_blend_state_pop(); gs_texrender_end(texRender); - gs_stage_texture(stageSurface, - gs_texrender_get_texture(texRender)); - if (gs_stagesurface_map(stageSurface, &videoData, - &videoLinesize)) { + gs_stage_texture(stageSurface, gs_texrender_get_texture(texRender)); + if (gs_stagesurface_map(stageSurface, &videoData, &videoLinesize)) { int lineSize = ret.bytesPerLine(); for (uint y = 0; y < imgHeight; y++) { - memcpy(ret.scanLine(y), - videoData + (y * videoLinesize), - lineSize); + memcpy(ret.scanLine(y), videoData + (y * videoLinesize), lineSize); } gs_stagesurface_unmap(stageSurface); success = true; @@ -139,16 +130,12 @@ RequestResult RequestHandler::GetSourceActive(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); if (!source) return RequestResult::Error(statusCode, comment); - if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && - obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE) - return RequestResult::Error( - RequestStatus::InvalidResourceType, - "The specified source is not an input or a scene."); + if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE) + return RequestResult::Error(RequestStatus::InvalidResourceType, "The specified source is not an input or a scene."); json responseData; responseData["videoActive"] = obs_source_active(source); @@ -183,79 +170,60 @@ RequestResult RequestHandler::GetSourceScreenshot(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); - if (!(source && - request.ValidateString("imageFormat", statusCode, comment))) + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); + if (!(source && request.ValidateString("imageFormat", statusCode, comment))) return RequestResult::Error(statusCode, comment); - if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && - obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE) - return RequestResult::Error( - RequestStatus::InvalidResourceType, - "The specified source is not an input or a scene."); + if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE) + return RequestResult::Error(RequestStatus::InvalidResourceType, "The specified source is not an input or a scene."); std::string imageFormat = request.RequestData["imageFormat"]; if (!IsImageFormatValid(imageFormat)) - return RequestResult::Error( - RequestStatus::InvalidRequestField, - "Your specified image format is invalid or not supported by this system."); + return RequestResult::Error(RequestStatus::InvalidRequestField, + "Your specified image format is invalid or not supported by this system."); uint32_t requestedWidth{0}; uint32_t requestedHeight{0}; int compressionQuality{-1}; if (request.Contains("imageWidth")) { - if (!request.ValidateOptionalNumber("imageWidth", statusCode, - comment, 8, 4096)) + if (!request.ValidateOptionalNumber("imageWidth", statusCode, comment, 8, 4096)) return RequestResult::Error(statusCode, comment); requestedWidth = request.RequestData["imageWidth"]; } if (request.Contains("imageHeight")) { - if (!request.ValidateOptionalNumber("imageHeight", statusCode, - comment, 8, 4096)) + if (!request.ValidateOptionalNumber("imageHeight", statusCode, comment, 8, 4096)) return RequestResult::Error(statusCode, comment); requestedHeight = request.RequestData["imageHeight"]; } if (request.Contains("imageCompressionQuality")) { - if (!request.ValidateOptionalNumber("imageCompressionQuality", - statusCode, comment, -1, - 100)) + if (!request.ValidateOptionalNumber("imageCompressionQuality", statusCode, comment, -1, 100)) return RequestResult::Error(statusCode, comment); - compressionQuality = - request.RequestData["imageCompressionQuality"]; + compressionQuality = request.RequestData["imageCompressionQuality"]; } bool success; - QImage renderedImage = TakeSourceScreenshot( - source, success, requestedWidth, requestedHeight); + QImage renderedImage = TakeSourceScreenshot(source, success, requestedWidth, requestedHeight); if (!success) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Failed to render screenshot."); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Failed to render screenshot."); QByteArray encodedImgBytes; QBuffer buffer(&encodedImgBytes); buffer.open(QBuffer::WriteOnly); - if (!renderedImage.save(&buffer, imageFormat.c_str(), - compressionQuality)) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Failed to encode screenshot."); + if (!renderedImage.save(&buffer, imageFormat.c_str(), compressionQuality)) + return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Failed to encode screenshot."); buffer.close(); - QString encodedPicture = QString("data:image/%1;base64,") - .arg(imageFormat.c_str()) - .append(encodedImgBytes.toBase64()); + QString encodedPicture = QString("data:image/%1;base64,").arg(imageFormat.c_str()).append(encodedImgBytes.toBase64()); json responseData; responseData["imageData"] = encodedPicture.toStdString(); @@ -290,79 +258,60 @@ RequestResult RequestHandler::SaveSourceScreenshot(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); - if (!(source && - request.ValidateString("imageFormat", statusCode, comment) && + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); + if (!(source && request.ValidateString("imageFormat", statusCode, comment) && request.ValidateString("imageFilePath", statusCode, comment))) return RequestResult::Error(statusCode, comment); - if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && - obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE) - return RequestResult::Error( - RequestStatus::InvalidResourceType, - "The specified source is not an input or a scene."); + if (obs_source_get_type(source) != OBS_SOURCE_TYPE_INPUT && obs_source_get_type(source) != OBS_SOURCE_TYPE_SCENE) + return RequestResult::Error(RequestStatus::InvalidResourceType, "The specified source is not an input or a scene."); std::string imageFormat = request.RequestData["imageFormat"]; std::string imageFilePath = request.RequestData["imageFilePath"]; if (!IsImageFormatValid(imageFormat)) - return RequestResult::Error( - RequestStatus::InvalidRequestField, - "Your specified image format is invalid or not supported by this system."); + return RequestResult::Error(RequestStatus::InvalidRequestField, + "Your specified image format is invalid or not supported by this system."); QFileInfo filePathInfo(QString::fromStdString(imageFilePath)); if (!filePathInfo.absoluteDir().exists()) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "The directory for your file path does not exist."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "The directory for your file path does not exist."); uint32_t requestedWidth{0}; uint32_t requestedHeight{0}; int compressionQuality{-1}; if (request.Contains("imageWidth")) { - if (!request.ValidateOptionalNumber("imageWidth", statusCode, - comment, 8, 4096)) + if (!request.ValidateOptionalNumber("imageWidth", statusCode, comment, 8, 4096)) return RequestResult::Error(statusCode, comment); requestedWidth = request.RequestData["imageWidth"]; } if (request.Contains("imageHeight")) { - if (!request.ValidateOptionalNumber("imageHeight", statusCode, - comment, 8, 4096)) + if (!request.ValidateOptionalNumber("imageHeight", statusCode, comment, 8, 4096)) return RequestResult::Error(statusCode, comment); requestedHeight = request.RequestData["imageHeight"]; } if (request.Contains("imageCompressionQuality")) { - if (!request.ValidateOptionalNumber("imageCompressionQuality", - statusCode, comment, -1, - 100)) + if (!request.ValidateOptionalNumber("imageCompressionQuality", statusCode, comment, -1, 100)) return RequestResult::Error(statusCode, comment); - compressionQuality = - request.RequestData["imageCompressionQuality"]; + compressionQuality = request.RequestData["imageCompressionQuality"]; } bool success; - QImage renderedImage = TakeSourceScreenshot( - source, success, requestedWidth, requestedHeight); + QImage renderedImage = TakeSourceScreenshot(source, success, requestedWidth, requestedHeight); if (!success) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Failed to render screenshot."); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Failed to render screenshot."); QString absoluteFilePath = filePathInfo.absoluteFilePath(); - if (!renderedImage.save(absoluteFilePath, imageFormat.c_str(), - compressionQuality)) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "Failed to save screenshot."); + if (!renderedImage.save(absoluteFilePath, imageFormat.c_str(), compressionQuality)) + return RequestResult::Error(RequestStatus::RequestProcessingFailed, "Failed to save screenshot."); return RequestResult::Success(); } @@ -372,17 +321,14 @@ RequestResult RequestHandler::GetSourcePrivateSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); if (!source) return RequestResult::Error(statusCode, comment); - OBSDataAutoRelease privateSettings = - obs_source_get_private_settings(source); + OBSDataAutoRelease privateSettings = obs_source_get_private_settings(source); json responseData; - responseData["sourceSettings"] = - Utils::Json::ObsDataToJson(privateSettings); + responseData["sourceSettings"] = Utils::Json::ObsDataToJson(privateSettings); return RequestResult::Success(responseData); } @@ -392,17 +338,13 @@ RequestResult RequestHandler::SetSourcePrivateSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease source = - request.ValidateSource("sourceName", statusCode, comment); - if (!source || - !request.ValidateObject("sourceSettings", statusCode, comment)) + OBSSourceAutoRelease source = request.ValidateSource("sourceName", statusCode, comment); + if (!source || !request.ValidateObject("sourceSettings", statusCode, comment)) return RequestResult::Error(statusCode, comment); - OBSDataAutoRelease privateSettings = - obs_source_get_private_settings(source); + OBSDataAutoRelease privateSettings = obs_source_get_private_settings(source); - OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData( - request.RequestData["sourceSettings"]); + OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData(request.RequestData["sourceSettings"]); // Always overlays to prevent destroying internal source data unintentionally obs_data_apply(privateSettings, newSettings); diff --git a/src/requesthandler/RequestHandler_Stream.cpp b/src/requesthandler/RequestHandler_Stream.cpp index 8285ad5a..11a15c8f 100644 --- a/src/requesthandler/RequestHandler_Stream.cpp +++ b/src/requesthandler/RequestHandler_Stream.cpp @@ -41,22 +41,16 @@ RequestResult RequestHandler::GetStreamStatus(const Request &) { OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output(); - uint64_t outputDuration = - Utils::Obs::NumberHelper::GetOutputDuration(streamOutput); + uint64_t outputDuration = Utils::Obs::NumberHelper::GetOutputDuration(streamOutput); json responseData; responseData["outputActive"] = obs_output_active(streamOutput); - responseData["outputReconnecting"] = - obs_output_reconnecting(streamOutput); - responseData["outputTimecode"] = - Utils::Obs::StringHelper::DurationToTimecode(outputDuration); + responseData["outputReconnecting"] = obs_output_reconnecting(streamOutput); + responseData["outputTimecode"] = Utils::Obs::StringHelper::DurationToTimecode(outputDuration); responseData["outputDuration"] = outputDuration; - responseData["outputBytes"] = - (uint64_t)obs_output_get_total_bytes(streamOutput); - responseData["outputSkippedFrames"] = - obs_output_get_frames_dropped(streamOutput); - responseData["outputTotalFrames"] = - obs_output_get_total_frames(streamOutput); + responseData["outputBytes"] = (uint64_t)obs_output_get_total_bytes(streamOutput); + responseData["outputSkippedFrames"] = obs_output_get_frames_dropped(streamOutput); + responseData["outputTotalFrames"] = obs_output_get_total_frames(streamOutput); return RequestResult::Success(responseData); } diff --git a/src/requesthandler/RequestHandler_Transitions.cpp b/src/requesthandler/RequestHandler_Transitions.cpp index efcd8daa..785cfbe8 100644 --- a/src/requesthandler/RequestHandler_Transitions.cpp +++ b/src/requesthandler/RequestHandler_Transitions.cpp @@ -38,8 +38,7 @@ with this program. If not, see RequestResult RequestHandler::GetTransitionKindList(const Request &) { json responseData; - responseData["transitionKinds"] = - Utils::Obs::ArrayHelper::GetTransitionKindList(); + responseData["transitionKinds"] = Utils::Obs::ArrayHelper::GetTransitionKindList(); return RequestResult::Success(responseData); } @@ -63,17 +62,14 @@ RequestResult RequestHandler::GetSceneTransitionList(const Request &) OBSSourceAutoRelease transition = obs_frontend_get_current_transition(); if (transition) { - responseData["currentSceneTransitionName"] = - obs_source_get_name(transition); - responseData["currentSceneTransitionKind"] = - obs_source_get_id(transition); + responseData["currentSceneTransitionName"] = obs_source_get_name(transition); + responseData["currentSceneTransitionKind"] = obs_source_get_id(transition); } else { responseData["currentSceneTransitionName"] = nullptr; responseData["currentSceneTransitionKind"] = nullptr; } - responseData["transitions"] = - Utils::Obs::ArrayHelper::GetSceneTransitionList(); + responseData["transitions"] = Utils::Obs::ArrayHelper::GetSceneTransitionList(); return RequestResult::Success(responseData); } @@ -99,9 +95,8 @@ RequestResult RequestHandler::GetCurrentSceneTransition(const Request &) { OBSSourceAutoRelease transition = obs_frontend_get_current_transition(); if (!transition) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "OBS does not currently have a scene transition set."); // This should not happen! + return RequestResult::Error(RequestStatus::InvalidResourceState, + "OBS does not currently have a scene transition set."); // This should not happen! json responseData; responseData["transitionName"] = obs_source_get_name(transition); @@ -112,16 +107,13 @@ RequestResult RequestHandler::GetCurrentSceneTransition(const Request &) responseData["transitionDuration"] = nullptr; } else { responseData["transitionFixed"] = false; - responseData["transitionDuration"] = - obs_frontend_get_transition_duration(); + responseData["transitionDuration"] = obs_frontend_get_transition_duration(); } if (obs_source_configurable(transition)) { responseData["transitionConfigurable"] = true; - OBSDataAutoRelease transitionSettings = - obs_source_get_settings(transition); - responseData["transitionSettings"] = - Utils::Json::ObsDataToJson(transitionSettings); + OBSDataAutoRelease transitionSettings = obs_source_get_settings(transition); + responseData["transitionSettings"] = Utils::Json::ObsDataToJson(transitionSettings); } else { responseData["transitionConfigurable"] = false; responseData["transitionSettings"] = nullptr; @@ -153,13 +145,9 @@ RequestResult RequestHandler::SetCurrentSceneTransition(const Request &request) std::string transitionName = request.RequestData["transitionName"]; - OBSSourceAutoRelease transition = - Utils::Obs::SearchHelper::GetSceneTransitionByName( - transitionName); + OBSSourceAutoRelease transition = Utils::Obs::SearchHelper::GetSceneTransitionByName(transitionName); if (!transition) - return RequestResult::Error( - RequestStatus::ResourceNotFound, - "No scene transition was found by that name."); + return RequestResult::Error(RequestStatus::ResourceNotFound, "No scene transition was found by that name."); obs_frontend_set_current_transition(transition); @@ -178,13 +166,11 @@ RequestResult RequestHandler::SetCurrentSceneTransition(const Request &request) * @api requests * @category transitions */ -RequestResult -RequestHandler::SetCurrentSceneTransitionDuration(const Request &request) +RequestResult RequestHandler::SetCurrentSceneTransitionDuration(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!request.ValidateNumber("transitionDuration", statusCode, comment, - 50, 20000)) + if (!request.ValidateNumber("transitionDuration", statusCode, comment, 50, 20000)) return RequestResult::Error(statusCode, comment); int transitionDuration = request.RequestData["transitionDuration"]; @@ -207,41 +193,34 @@ RequestHandler::SetCurrentSceneTransitionDuration(const Request &request) * @api requests * @category transitions */ -RequestResult -RequestHandler::SetCurrentSceneTransitionSettings(const Request &request) +RequestResult RequestHandler::SetCurrentSceneTransitionSettings(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - if (!request.ValidateObject("transitionSettings", statusCode, comment, - true)) + if (!request.ValidateObject("transitionSettings", statusCode, comment, true)) return RequestResult::Error(statusCode, comment); OBSSourceAutoRelease transition = obs_frontend_get_current_transition(); if (!transition) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "OBS does not currently have a scene transition set."); // This should not happen! + return RequestResult::Error(RequestStatus::InvalidResourceState, + "OBS does not currently have a scene transition set."); // This should not happen! if (!obs_source_configurable(transition)) - return RequestResult::Error( - RequestStatus::ResourceNotConfigurable, - "The current transition does not support custom settings."); + return RequestResult::Error(RequestStatus::ResourceNotConfigurable, + "The current transition does not support custom settings."); bool overlay = true; if (request.Contains("overlay")) { - if (!request.ValidateOptionalBoolean("overlay", statusCode, - comment)) + if (!request.ValidateOptionalBoolean("overlay", statusCode, comment)) return RequestResult::Error(statusCode, comment); overlay = request.RequestData["overlay"]; } - OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData( - request.RequestData["transitionSettings"]); + OBSDataAutoRelease newSettings = Utils::Json::JsonToObsData(request.RequestData["transitionSettings"]); if (!newSettings) - return RequestResult::Error( - RequestStatus::RequestProcessingFailed, - "An internal data conversion operation failed. Please report this!"); + return RequestResult::Error(RequestStatus::RequestProcessingFailed, + "An internal data conversion operation failed. Please report this!"); if (overlay) obs_source_update(transition, newSettings); @@ -271,9 +250,8 @@ RequestResult RequestHandler::GetCurrentSceneTransitionCursor(const Request &) { OBSSourceAutoRelease transition = obs_frontend_get_current_transition(); if (!transition) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "OBS does not currently have a scene transition set."); // This should not happen! + return RequestResult::Error(RequestStatus::InvalidResourceState, + "OBS does not currently have a scene transition set."); // This should not happen! json responseData; responseData["transitionCursor"] = obs_transition_get_time(transition); @@ -296,8 +274,7 @@ RequestResult RequestHandler::TriggerStudioModeTransition(const Request &) if (!obs_frontend_preview_program_mode_active()) return RequestResult::Error(RequestStatus::StudioModeNotActive); - OBSSourceAutoRelease previewScene = - obs_frontend_get_current_preview_scene(); + OBSSourceAutoRelease previewScene = obs_frontend_get_current_preview_scene(); obs_frontend_set_current_scene(previewScene); @@ -331,16 +308,14 @@ RequestResult RequestHandler::SetTBarPosition(const Request &request) bool release = true; if (request.Contains("release")) { - if (!request.ValidateOptionalBoolean("release", statusCode, - comment)) + if (!request.ValidateOptionalBoolean("release", statusCode, comment)) return RequestResult::Error(statusCode, comment); } OBSSourceAutoRelease transition = obs_frontend_get_current_transition(); if (!transition) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "OBS does not currently have a scene transition set."); // This should not happen! + return RequestResult::Error(RequestStatus::InvalidResourceState, + "OBS does not currently have a scene transition set."); // This should not happen! float position = request.RequestData["position"]; diff --git a/src/requesthandler/RequestHandler_Ui.cpp b/src/requesthandler/RequestHandler_Ui.cpp index 3686c7aa..279663d7 100644 --- a/src/requesthandler/RequestHandler_Ui.cpp +++ b/src/requesthandler/RequestHandler_Ui.cpp @@ -39,8 +39,7 @@ with this program. If not, see RequestResult RequestHandler::GetStudioModeEnabled(const Request &) { json responseData; - responseData["studioModeEnabled"] = - obs_frontend_preview_program_mode_active(); + responseData["studioModeEnabled"] = obs_frontend_preview_program_mode_active(); return RequestResult::Success(responseData); } @@ -64,18 +63,15 @@ RequestResult RequestHandler::SetStudioModeEnabled(const Request &request) return RequestResult::Error(statusCode, comment); // Avoid queueing tasks if nothing will change - if (obs_frontend_preview_program_mode_active() != - request.RequestData["studioModeEnabled"]) { + if (obs_frontend_preview_program_mode_active() != request.RequestData["studioModeEnabled"]) { // (Bad) Create a boolean then pass it as a reference to the task. Requires `wait` in obs_queue_task() to be true, else undefined behavior - bool studioModeEnabled = - request.RequestData["studioModeEnabled"]; + bool studioModeEnabled = request.RequestData["studioModeEnabled"]; // Queue the task inside of the UI thread to prevent race conditions obs_queue_task( OBS_TASK_UI, [](void *param) { auto studioModeEnabled = (bool *)param; - obs_frontend_set_preview_program_mode( - *studioModeEnabled); + obs_frontend_set_preview_program_mode(*studioModeEnabled); }, &studioModeEnabled, true); } @@ -99,8 +95,7 @@ RequestResult RequestHandler::OpenInputPropertiesDialog(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); @@ -125,8 +120,7 @@ RequestResult RequestHandler::OpenInputFiltersDialog(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); @@ -151,15 +145,13 @@ RequestResult RequestHandler::OpenInputInteractDialog(const Request &request) { RequestStatus::RequestStatus statusCode; std::string comment; - OBSSourceAutoRelease input = - request.ValidateInput("inputName", statusCode, comment); + OBSSourceAutoRelease input = request.ValidateInput("inputName", statusCode, comment); if (!input) return RequestResult::Error(statusCode, comment); if (!(obs_source_get_output_flags(input) & OBS_SOURCE_INTERACTION)) - return RequestResult::Error( - RequestStatus::InvalidResourceState, - "The specified input does not support interaction."); + return RequestResult::Error(RequestStatus::InvalidResourceState, + "The specified input does not support interaction."); obs_frontend_open_source_interaction(input); @@ -183,8 +175,7 @@ RequestResult RequestHandler::GetMonitorList(const Request &) json responseData; std::vector monitorsData; QList screensList = QGuiApplication::screens(); - for (int screenIndex = 0; screenIndex < screensList.size(); - screenIndex++) { + for (int screenIndex = 0; screenIndex < screensList.size(); screenIndex++) { json screenData; QScreen const *screen = screensList[screenIndex]; std::stringstream nameAndIndex; diff --git a/src/requesthandler/rpc/Request.cpp b/src/requesthandler/rpc/Request.cpp index 33809f0b..9e55237d 100644 --- a/src/requesthandler/rpc/Request.cpp +++ b/src/requesthandler/rpc/Request.cpp @@ -30,8 +30,7 @@ json GetDefaultJsonObject(const json &requestData) } Request::Request(const std::string &requestType, const json &requestData, - const RequestBatchExecutionType::RequestBatchExecutionType - executionType) + const RequestBatchExecutionType::RequestBatchExecutionType executionType) : RequestType(requestType), HasRequestData(requestData.is_object()), RequestData(GetDefaultJsonObject(requestData)), @@ -41,103 +40,84 @@ Request::Request(const std::string &requestType, const json &requestData, bool Request::Contains(const std::string &keyName) const { - return (RequestData.contains(keyName) && - !RequestData[keyName].is_null()); + return (RequestData.contains(keyName) && !RequestData[keyName].is_null()); } -bool Request::ValidateBasic(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment) const +bool Request::ValidateBasic(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const { if (!HasRequestData) { statusCode = RequestStatus::MissingRequestData; - comment = - "Your request data is missing or invalid (non-object)"; + comment = "Your request data is missing or invalid (non-object)"; return false; } if (!RequestData.contains(keyName) || RequestData[keyName].is_null()) { statusCode = RequestStatus::MissingRequestField; - comment = std::string("Your request is missing the `") + - keyName + "` field."; + comment = std::string("Your request is missing the `") + keyName + "` field."; return false; } return true; } -bool Request::ValidateOptionalNumber(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, - const double minValue, - const double maxValue) const +bool Request::ValidateOptionalNumber(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const double minValue, const double maxValue) const { if (!RequestData[keyName].is_number()) { statusCode = RequestStatus::InvalidRequestFieldType; - comment = std::string("The field value of `") + keyName + - "` must be a number."; + comment = std::string("The field value of `") + keyName + "` must be a number."; return false; } double value = RequestData[keyName]; if (value < minValue) { statusCode = RequestStatus::RequestFieldOutOfRange; - comment = std::string("The field value of `") + keyName + - "` is below the minimum of `" + - std::to_string(minValue) + "`"; + comment = std::string("The field value of `") + keyName + "` is below the minimum of `" + std::to_string(minValue) + + "`"; return false; } if (value > maxValue) { statusCode = RequestStatus::RequestFieldOutOfRange; - comment = std::string("The field value of `") + keyName + - "` is above the maximum of `" + - std::to_string(maxValue) + "`"; + comment = std::string("The field value of `") + keyName + "` is above the maximum of `" + std::to_string(maxValue) + + "`"; return false; } return true; } -bool Request::ValidateNumber(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, const double minValue, - const double maxValue) const +bool Request::ValidateNumber(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const double minValue, const double maxValue) const { if (!ValidateBasic(keyName, statusCode, comment)) return false; - if (!ValidateOptionalNumber(keyName, statusCode, comment, minValue, - maxValue)) + if (!ValidateOptionalNumber(keyName, statusCode, comment, minValue, maxValue)) return false; return true; } -bool Request::ValidateOptionalString(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, +bool Request::ValidateOptionalString(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty) const { if (!RequestData[keyName].is_string()) { statusCode = RequestStatus::InvalidRequestFieldType; - comment = std::string("The field value of `") + keyName + - "` must be a string."; + comment = std::string("The field value of `") + keyName + "` must be a string."; return false; } if (RequestData[keyName].get().empty() && !allowEmpty) { statusCode = RequestStatus::RequestFieldEmpty; - comment = std::string("The field value of `") + keyName + - "` must not be empty."; + comment = std::string("The field value of `") + keyName + "` must not be empty."; return false; } return true; } -bool Request::ValidateString(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, const bool allowEmpty) const +bool Request::ValidateString(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const bool allowEmpty) const { if (!ValidateBasic(keyName, statusCode, comment)) return false; @@ -148,23 +128,19 @@ bool Request::ValidateString(const std::string &keyName, return true; } -bool Request::ValidateOptionalBoolean(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, +bool Request::ValidateOptionalBoolean(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const { if (!RequestData[keyName].is_boolean()) { statusCode = RequestStatus::InvalidRequestFieldType; - comment = std::string("The field value of `") + keyName + - "` must be boolean."; + comment = std::string("The field value of `") + keyName + "` must be boolean."; return false; } return true; } -bool Request::ValidateBoolean(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment) const +bool Request::ValidateBoolean(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const { if (!ValidateBasic(keyName, statusCode, comment)) return false; @@ -175,31 +151,26 @@ bool Request::ValidateBoolean(const std::string &keyName, return true; } -bool Request::ValidateOptionalObject(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, +bool Request::ValidateOptionalObject(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty) const { if (!RequestData[keyName].is_object()) { statusCode = RequestStatus::InvalidRequestFieldType; - comment = std::string("The field value of `") + keyName + - "` must be an object."; + comment = std::string("The field value of `") + keyName + "` must be an object."; return false; } if (RequestData[keyName].empty() && !allowEmpty) { statusCode = RequestStatus::RequestFieldEmpty; - comment = std::string("The field value of `") + keyName + - "` must not be empty."; + comment = std::string("The field value of `") + keyName + "` must not be empty."; return false; } return true; } -bool Request::ValidateObject(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, const bool allowEmpty) const +bool Request::ValidateObject(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const bool allowEmpty) const { if (!ValidateBasic(keyName, statusCode, comment)) return false; @@ -210,31 +181,26 @@ bool Request::ValidateObject(const std::string &keyName, return true; } -bool Request::ValidateOptionalArray(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, +bool Request::ValidateOptionalArray(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty) const { if (!RequestData[keyName].is_array()) { statusCode = RequestStatus::InvalidRequestFieldType; - comment = std::string("The field value of `") + keyName + - "` must be an array."; + comment = std::string("The field value of `") + keyName + "` must be an array."; return false; } if (RequestData[keyName].empty() && !allowEmpty) { statusCode = RequestStatus::RequestFieldEmpty; - comment = std::string("The field value of `") + keyName + - "` must not be empty."; + comment = std::string("The field value of `") + keyName + "` must not be empty."; return false; } return true; } -bool Request::ValidateArray(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, const bool allowEmpty) const +bool Request::ValidateArray(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const bool allowEmpty) const { if (!ValidateBasic(keyName, statusCode, comment)) return false; @@ -245,8 +211,7 @@ bool Request::ValidateArray(const std::string &keyName, return true; } -obs_source_t *Request::ValidateSource(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, +obs_source_t *Request::ValidateSource(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const { if (!ValidateString(keyName, statusCode, comment)) @@ -257,17 +222,14 @@ obs_source_t *Request::ValidateSource(const std::string &keyName, obs_source_t *ret = obs_get_source_by_name(sourceName.c_str()); if (!ret) { statusCode = RequestStatus::ResourceNotFound; - comment = std::string("No source was found by the name of `") + - sourceName + "`."; + comment = std::string("No source was found by the name of `") + sourceName + "`."; return nullptr; } return ret; } -obs_source_t *Request::ValidateScene(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, +obs_source_t *Request::ValidateScene(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const ObsWebSocketSceneFilter filter) const { obs_source_t *ret = ValidateSource(keyName, statusCode, comment); @@ -287,8 +249,7 @@ obs_source_t *Request::ValidateScene(const std::string &keyName, statusCode = RequestStatus::InvalidResourceType; comment = "The specified source is not a scene. (Is group)"; return nullptr; - } else if (filter == OBS_WEBSOCKET_SCENE_FILTER_GROUP_ONLY && - !isGroup) { + } else if (filter == OBS_WEBSOCKET_SCENE_FILTER_GROUP_ONLY && !isGroup) { obs_source_release(ret); statusCode = RequestStatus::InvalidResourceType; comment = "The specified source is not a group. (Is scene)"; @@ -298,13 +259,10 @@ obs_source_t *Request::ValidateScene(const std::string &keyName, return ret; } -obs_scene_t *Request::ValidateScene2(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, +obs_scene_t *Request::ValidateScene2(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const ObsWebSocketSceneFilter filter) const { - OBSSourceAutoRelease sceneSource = - ValidateSource(keyName, statusCode, comment); + OBSSourceAutoRelease sceneSource = ValidateSource(keyName, statusCode, comment); if (!sceneSource) return nullptr; @@ -318,24 +276,21 @@ obs_scene_t *Request::ValidateScene2(const std::string &keyName, if (isGroup) { if (filter == OBS_WEBSOCKET_SCENE_FILTER_SCENE_ONLY) { statusCode = RequestStatus::InvalidResourceType; - comment = - "The specified source is not a scene. (Is group)"; + comment = "The specified source is not a scene. (Is group)"; return nullptr; } return obs_scene_get_ref(obs_group_from_source(sceneSource)); } else { if (filter == OBS_WEBSOCKET_SCENE_FILTER_GROUP_ONLY) { statusCode = RequestStatus::InvalidResourceType; - comment = - "The specified source is not a group. (Is scene)"; + comment = "The specified source is not a group. (Is scene)"; return nullptr; } return obs_scene_get_ref(obs_scene_from_source(sceneSource)); } } -obs_source_t *Request::ValidateInput(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, +obs_source_t *Request::ValidateInput(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const { obs_source_t *ret = ValidateSource(keyName, statusCode, comment); @@ -352,13 +307,10 @@ obs_source_t *Request::ValidateInput(const std::string &keyName, return ret; } -FilterPair Request::ValidateFilter(const std::string &sourceKeyName, - const std::string &filterKeyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment) const +FilterPair Request::ValidateFilter(const std::string &sourceKeyName, const std::string &filterKeyName, + RequestStatus::RequestStatus &statusCode, std::string &comment) const { - obs_source_t *source = - ValidateSource(sourceKeyName, statusCode, comment); + obs_source_t *source = ValidateSource(sourceKeyName, statusCode, comment); if (!source) return FilterPair{source, nullptr}; @@ -367,12 +319,10 @@ FilterPair Request::ValidateFilter(const std::string &sourceKeyName, std::string filterName = RequestData[filterKeyName]; - obs_source_t *filter = - obs_source_get_filter_by_name(source, filterName.c_str()); + obs_source_t *filter = obs_source_get_filter_by_name(source, filterName.c_str()); if (!filter) { statusCode = RequestStatus::ResourceNotFound; - comment = std::string("No filter was found in the source `") + - RequestData[sourceKeyName].get() + + comment = std::string("No filter was found in the source `") + RequestData[sourceKeyName].get() + "` with the name `" + filterName + "`."; return FilterPair{source, nullptr}; } @@ -380,13 +330,11 @@ FilterPair Request::ValidateFilter(const std::string &sourceKeyName, return FilterPair{source, filter}; } -obs_sceneitem_t *Request::ValidateSceneItem( - const std::string &sceneKeyName, const std::string &sceneItemIdKeyName, - RequestStatus::RequestStatus &statusCode, std::string &comment, - const ObsWebSocketSceneFilter filter) const +obs_sceneitem_t *Request::ValidateSceneItem(const std::string &sceneKeyName, const std::string &sceneItemIdKeyName, + RequestStatus::RequestStatus &statusCode, std::string &comment, + const ObsWebSocketSceneFilter filter) const { - OBSSceneAutoRelease scene = - ValidateScene2(sceneKeyName, statusCode, comment, filter); + OBSSceneAutoRelease scene = ValidateScene2(sceneKeyName, statusCode, comment, filter); if (!scene) return nullptr; @@ -395,14 +343,11 @@ obs_sceneitem_t *Request::ValidateSceneItem( int64_t sceneItemId = RequestData[sceneItemIdKeyName]; - OBSSceneItem sceneItem = - obs_scene_find_sceneitem_by_id(scene, sceneItemId); + OBSSceneItem sceneItem = obs_scene_find_sceneitem_by_id(scene, sceneItemId); if (!sceneItem) { statusCode = RequestStatus::ResourceNotFound; - comment = std::string("No scene items were found in scene `") + - RequestData[sceneKeyName].get() + - "` with the ID `" + std::to_string(sceneItemId) + - "`."; + comment = std::string("No scene items were found in scene `") + RequestData[sceneKeyName].get() + + "` with the ID `" + std::to_string(sceneItemId) + "`."; return nullptr; } diff --git a/src/requesthandler/rpc/Request.h b/src/requesthandler/rpc/Request.h index 5810d4eb..b36905d6 100644 --- a/src/requesthandler/rpc/Request.h +++ b/src/requesthandler/rpc/Request.h @@ -36,88 +36,47 @@ struct FilterPair { }; struct Request { - Request(const std::string &requestType, - const json &requestData = nullptr, - const RequestBatchExecutionType::RequestBatchExecutionType - executionType = RequestBatchExecutionType::None); + Request(const std::string &requestType, const json &requestData = nullptr, + const RequestBatchExecutionType::RequestBatchExecutionType executionType = RequestBatchExecutionType::None); // Contains the key and is not null bool Contains(const std::string &keyName) const; - bool ValidateBasic(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment) const; - bool ValidateOptionalNumber(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, - const double minValue = -INFINITY, - const double maxValue = INFINITY) const; - bool ValidateNumber(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, - const double minValue = -INFINITY, - const double maxValue = INFINITY) const; - bool ValidateOptionalString(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, + bool ValidateBasic(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const; + bool ValidateOptionalNumber(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const double minValue = -INFINITY, const double maxValue = INFINITY) const; + bool ValidateNumber(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const double minValue = -INFINITY, const double maxValue = INFINITY) const; + bool ValidateOptionalString(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty = false) const; - bool ValidateString(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, + bool ValidateString(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty = false) const; - bool ValidateOptionalBoolean(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, + bool ValidateOptionalBoolean(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const; - bool ValidateBoolean(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment) const; - bool ValidateOptionalObject(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, + bool ValidateBoolean(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const; + bool ValidateOptionalObject(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty = false) const; - bool ValidateObject(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, + bool ValidateObject(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty = false) const; - bool ValidateOptionalArray(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, + bool ValidateOptionalArray(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty = false) const; - bool ValidateArray(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, + bool ValidateArray(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, const bool allowEmpty = false) const; // All return values have incremented refcounts - obs_source_t *ValidateSource(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, + obs_source_t *ValidateSource(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const; - obs_source_t * - ValidateScene(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, - const ObsWebSocketSceneFilter filter = - OBS_WEBSOCKET_SCENE_FILTER_SCENE_ONLY) const; - obs_scene_t * - ValidateScene2(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, - const ObsWebSocketSceneFilter filter = - OBS_WEBSOCKET_SCENE_FILTER_SCENE_ONLY) const; - obs_source_t *ValidateInput(const std::string &keyName, - RequestStatus::RequestStatus &statusCode, + obs_source_t *ValidateScene(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const ObsWebSocketSceneFilter filter = OBS_WEBSOCKET_SCENE_FILTER_SCENE_ONLY) const; + obs_scene_t *ValidateScene2(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment, + const ObsWebSocketSceneFilter filter = OBS_WEBSOCKET_SCENE_FILTER_SCENE_ONLY) const; + obs_source_t *ValidateInput(const std::string &keyName, RequestStatus::RequestStatus &statusCode, std::string &comment) const; - FilterPair ValidateFilter(const std::string &sourceKeyName, - const std::string &filterKeyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment) const; - obs_sceneitem_t * - ValidateSceneItem(const std::string &sceneKeyName, - const std::string &sceneItemIdKeyName, - RequestStatus::RequestStatus &statusCode, - std::string &comment, - const ObsWebSocketSceneFilter filter = - OBS_WEBSOCKET_SCENE_FILTER_SCENE_ONLY) const; + FilterPair ValidateFilter(const std::string &sourceKeyName, const std::string &filterKeyName, + RequestStatus::RequestStatus &statusCode, std::string &comment) const; + obs_sceneitem_t *ValidateSceneItem(const std::string &sceneKeyName, const std::string &sceneItemIdKeyName, + RequestStatus::RequestStatus &statusCode, std::string &comment, + const ObsWebSocketSceneFilter filter = OBS_WEBSOCKET_SCENE_FILTER_SCENE_ONLY) const; std::string RequestType; bool HasRequestData; diff --git a/src/requesthandler/rpc/RequestBatchRequest.cpp b/src/requesthandler/rpc/RequestBatchRequest.cpp index 57a53bb9..c89fd3a0 100644 --- a/src/requesthandler/rpc/RequestBatchRequest.cpp +++ b/src/requesthandler/rpc/RequestBatchRequest.cpp @@ -18,12 +18,9 @@ with this program. If not, see #include "RequestBatchRequest.h" -RequestBatchRequest::RequestBatchRequest( - const std::string &requestType, const json &requestData, - RequestBatchExecutionType::RequestBatchExecutionType executionType, - const json &inputVariables, const json &outputVariables) - : Request(requestType, requestData, executionType), - InputVariables(inputVariables), - OutputVariables(outputVariables) +RequestBatchRequest::RequestBatchRequest(const std::string &requestType, const json &requestData, + RequestBatchExecutionType::RequestBatchExecutionType executionType, + const json &inputVariables, const json &outputVariables) + : Request(requestType, requestData, executionType), InputVariables(inputVariables), OutputVariables(outputVariables) { } diff --git a/src/requesthandler/rpc/RequestBatchRequest.h b/src/requesthandler/rpc/RequestBatchRequest.h index 0efc052d..abe6dacd 100644 --- a/src/requesthandler/rpc/RequestBatchRequest.h +++ b/src/requesthandler/rpc/RequestBatchRequest.h @@ -21,12 +21,9 @@ with this program. If not, see #include "Request.h" struct RequestBatchRequest : Request { - RequestBatchRequest(const std::string &requestType, - const json &requestData, - RequestBatchExecutionType::RequestBatchExecutionType - executionType, - const json &inputVariables = nullptr, - const json &outputVariables = nullptr); + RequestBatchRequest(const std::string &requestType, const json &requestData, + RequestBatchExecutionType::RequestBatchExecutionType executionType, + const json &inputVariables = nullptr, const json &outputVariables = nullptr); json InputVariables; json OutputVariables; diff --git a/src/requesthandler/rpc/RequestResult.cpp b/src/requesthandler/rpc/RequestResult.cpp index d6000825..00f79f11 100644 --- a/src/requesthandler/rpc/RequestResult.cpp +++ b/src/requesthandler/rpc/RequestResult.cpp @@ -19,12 +19,8 @@ with this program. If not, see #include "RequestResult.h" -RequestResult::RequestResult(RequestStatus::RequestStatus statusCode, - json responseData, std::string comment) - : StatusCode(statusCode), - ResponseData(responseData), - Comment(comment), - SleepFrames(0) +RequestResult::RequestResult(RequestStatus::RequestStatus statusCode, json responseData, std::string comment) + : StatusCode(statusCode), ResponseData(responseData), Comment(comment), SleepFrames(0) { } @@ -33,8 +29,7 @@ RequestResult RequestResult::Success(json responseData) return RequestResult(RequestStatus::Success, responseData, ""); } -RequestResult RequestResult::Error(RequestStatus::RequestStatus statusCode, - std::string comment) +RequestResult RequestResult::Error(RequestStatus::RequestStatus statusCode, std::string comment) { return RequestResult(statusCode, nullptr, comment); } diff --git a/src/requesthandler/rpc/RequestResult.h b/src/requesthandler/rpc/RequestResult.h index 3cefe652..d9ded5ad 100644 --- a/src/requesthandler/rpc/RequestResult.h +++ b/src/requesthandler/rpc/RequestResult.h @@ -23,12 +23,10 @@ with this program. If not, see #include "../../utils/Json.h" struct RequestResult { - RequestResult(RequestStatus::RequestStatus statusCode = - RequestStatus::Success, - json responseData = nullptr, std::string comment = ""); + RequestResult(RequestStatus::RequestStatus statusCode = RequestStatus::Success, json responseData = nullptr, + std::string comment = ""); static RequestResult Success(json responseData = nullptr); - static RequestResult Error(RequestStatus::RequestStatus statusCode, - std::string comment = ""); + static RequestResult Error(RequestStatus::RequestStatus statusCode, std::string comment = ""); RequestStatus::RequestStatus StatusCode; json ResponseData; std::string Comment; diff --git a/src/utils/Compat.cpp b/src/utils/Compat.cpp index 9eb784f4..f55e373e 100644 --- a/src/utils/Compat.cpp +++ b/src/utils/Compat.cpp @@ -1,36 +1,32 @@ -/* -obs-websocket -Copyright (C) 2016-2021 Stephane Lepin -Copyright (C) 2020-2021 Kyle Manning - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see -*/ - -#include "Compat.h" - -Utils::Compat::StdFunctionRunnable::StdFunctionRunnable( - std::function func) - : cb(std::move(func)) -{ -} - -void Utils::Compat::StdFunctionRunnable::run() -{ - cb(); -} - -QRunnable *Utils::Compat::CreateFunctionRunnable(std::function func) -{ - return new Utils::Compat::StdFunctionRunnable(std::move(func)); -} +/* +obs-websocket +Copyright (C) 2016-2021 Stephane Lepin +Copyright (C) 2020-2021 Kyle Manning + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see +*/ + +#include "Compat.h" + +Utils::Compat::StdFunctionRunnable::StdFunctionRunnable(std::function func) : cb(std::move(func)) {} + +void Utils::Compat::StdFunctionRunnable::run() +{ + cb(); +} + +QRunnable *Utils::Compat::CreateFunctionRunnable(std::function func) +{ + return new Utils::Compat::StdFunctionRunnable(std::move(func)); +} diff --git a/src/utils/Crypto.cpp b/src/utils/Crypto.cpp index 8b89331c..4e30e830 100644 --- a/src/utils/Crypto.cpp +++ b/src/utils/Crypto.cpp @@ -24,8 +24,7 @@ with this program. If not, see #include "Crypto.h" #include "../plugin-macros.generated.h" -static const char allowedChars[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; +static const char allowedChars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; static const int allowedCharsCount = static_cast(sizeof(allowedChars) - 1); std::string Utils::Crypto::GenerateSalt() @@ -43,12 +42,10 @@ std::string Utils::Crypto::GenerateSalt() return randomChars.toBase64().toStdString(); } -std::string Utils::Crypto::GenerateSecret(std::string password, - std::string salt) +std::string Utils::Crypto::GenerateSecret(std::string password, std::string salt) { // Create challenge hash - auto challengeHash = - QCryptographicHash(QCryptographicHash::Algorithm::Sha256); + auto challengeHash = QCryptographicHash(QCryptographicHash::Algorithm::Sha256); // Add password bytes to hash challengeHash.addData(QByteArray::fromStdString(password)); // Add salt bytes to hash @@ -58,9 +55,7 @@ std::string Utils::Crypto::GenerateSecret(std::string password, return challengeHash.result().toBase64().toStdString(); } -bool Utils::Crypto::CheckAuthenticationString(std::string secret, - std::string challenge, - std::string authenticationString) +bool Utils::Crypto::CheckAuthenticationString(std::string secret, std::string challenge, std::string authenticationString) { // Concatenate auth secret with the challenge sent to the user QString secretAndChallenge = ""; @@ -68,13 +63,10 @@ bool Utils::Crypto::CheckAuthenticationString(std::string secret, secretAndChallenge += QString::fromStdString(challenge); // Generate a SHA256 hash of secretAndChallenge - auto hash = - QCryptographicHash::hash(secretAndChallenge.toUtf8(), - QCryptographicHash::Algorithm::Sha256); + auto hash = QCryptographicHash::hash(secretAndChallenge.toUtf8(), QCryptographicHash::Algorithm::Sha256); // Encode the SHA256 hash to Base64 - std::string expectedAuthenticationString = - hash.toBase64().toStdString(); + std::string expectedAuthenticationString = hash.toBase64().toStdString(); return (authenticationString == expectedAuthenticationString); } diff --git a/src/utils/Crypto.h b/src/utils/Crypto.h index 0e2b56e9..a2780b2a 100644 --- a/src/utils/Crypto.h +++ b/src/utils/Crypto.h @@ -26,8 +26,7 @@ namespace Utils { namespace Crypto { std::string GenerateSalt(); std::string GenerateSecret(std::string password, std::string salt); -bool CheckAuthenticationString(std::string secret, std::string challenge, - std::string authenticationString); +bool CheckAuthenticationString(std::string secret, std::string challenge, std::string authenticationString); std::string GeneratePassword(size_t length = 16); } } diff --git a/src/utils/Json.cpp b/src/utils/Json.cpp index 34bbb7c4..d61c4375 100644 --- a/src/utils/Json.cpp +++ b/src/utils/Json.cpp @@ -67,13 +67,11 @@ void obs_data_set_json_object_item(obs_data_t *d, json j) } else if (value.is_array()) { obs_data_set_json_array(d, key.c_str(), value); } else if (value.is_string()) { - obs_data_set_string(d, key.c_str(), - value.get().c_str()); + obs_data_set_string(d, key.c_str(), value.get().c_str()); } else if (value.is_number_integer()) { obs_data_set_int(d, key.c_str(), value.get()); } else if (value.is_number_float()) { - obs_data_set_double(d, key.c_str(), - value.get()); + obs_data_set_double(d, key.c_str(), value.get()); } else if (value.is_boolean()) { obs_data_set_bool(d, key.c_str(), value.get()); } @@ -116,15 +114,13 @@ void set_json_bool(json *j, const char *name, obs_data_item_t *item) bool val = obs_data_item_get_bool(item); j->emplace(name, val); } -void set_json_object(json *j, const char *name, obs_data_item_t *item, - bool includeDefault) +void set_json_object(json *j, const char *name, obs_data_item_t *item, bool includeDefault) { obs_data_t *obj = obs_data_item_get_obj(item); j->emplace(name, Utils::Json::ObsDataToJson(obj, includeDefault)); obs_data_release(obj); } -void set_json_array(json *j, const char *name, obs_data_item_t *item, - bool includeDefault) +void set_json_array(json *j, const char *name, obs_data_item_t *item, bool includeDefault) { json jArray = json::array(); obs_data_array_t *array = obs_data_item_get_array(item); @@ -132,8 +128,7 @@ void set_json_array(json *j, const char *name, obs_data_item_t *item, for (size_t idx = 0; idx < count; idx++) { obs_data_t *subItem = obs_data_array_item(array, idx); - json jItem = - Utils::Json::ObsDataToJson(subItem, includeDefault); + json jItem = Utils::Json::ObsDataToJson(subItem, includeDefault); obs_data_release(subItem); jArray.push_back(jItem); } @@ -189,18 +184,14 @@ bool Utils::Json::GetJsonFileContent(std::string fileName, json &content) try { content = json::parse(textContent); } catch (json::parse_error &e) { - blog(LOG_WARNING, - "Failed to decode content of JSON file `%s`. Error: %s", - fileName.c_str(), e.what()); + blog(LOG_WARNING, "Failed to decode content of JSON file `%s`. Error: %s", fileName.c_str(), e.what()); return false; } return true; } -bool Utils::Json::SetJsonFileContent(std::string fileName, const json &content, - bool createNew) +bool Utils::Json::SetJsonFileContent(std::string fileName, const json &content, bool createNew) { std::string textContent = content.dump(2); - return Utils::Platform::SetTextFileContent(fileName, textContent, - createNew); + return Utils::Platform::SetTextFileContent(fileName, textContent, createNew); } diff --git a/src/utils/Json.h b/src/utils/Json.h index 66998352..27a81802 100644 --- a/src/utils/Json.h +++ b/src/utils/Json.h @@ -31,8 +31,7 @@ bool JsonArrayIsValidObsArray(const json &j); obs_data_t *JsonToObsData(json j); json ObsDataToJson(obs_data_t *d, bool includeDefault = false); bool GetJsonFileContent(std::string fileName, json &content); -bool SetJsonFileContent(std::string fileName, const json &content, - bool createNew = true); +bool SetJsonFileContent(std::string fileName, const json &content, bool createNew = true); static inline bool Contains(const json &j, std::string key) { return j.contains(key) && !j[key].is_null(); diff --git a/src/utils/Obs.h b/src/utils/Obs.h index f849cc83..e7154b3e 100644 --- a/src/utils/Obs.h +++ b/src/utils/Obs.h @@ -27,9 +27,7 @@ with this program. If not, see // Autorelease object definitions inline void ___properties_dummy_addref(obs_properties_t *) {} -using OBSPropertiesAutoDestroy = - OBSRef; +using OBSPropertiesAutoDestroy = OBSRef; #if !defined(OBS_AUTORELEASE) inline void ___source_dummy_addref(obs_source_t *) {} @@ -46,41 +44,22 @@ inline void ___weak_output_dummy_addref(obs_weak_output_t *) {} inline void ___weak_encoder_dummy_addref(obs_weak_encoder_t *) {} inline void ___weak_service_dummy_addref(obs_weak_service_t *) {} -using OBSSourceAutoRelease = - OBSRef; -using OBSSceneAutoRelease = - OBSRef; -using OBSSceneItemAutoRelease = - OBSRef; -using OBSDataAutoRelease = - OBSRef; -using OBSDataArrayAutoRelease = - OBSRef; -using OBSOutputAutoRelease = - OBSRef; -using OBSEncoderAutoRelease = - OBSRef; -using OBSServiceAutoRelease = - OBSRef; +using OBSSourceAutoRelease = OBSRef; +using OBSSceneAutoRelease = OBSRef; +using OBSSceneItemAutoRelease = OBSRef; +using OBSDataAutoRelease = OBSRef; +using OBSDataArrayAutoRelease = OBSRef; +using OBSOutputAutoRelease = OBSRef; +using OBSEncoderAutoRelease = OBSRef; +using OBSServiceAutoRelease = OBSRef; -using OBSWeakSourceAutoRelease = - OBSRef; -using OBSWeakOutputAutoRelease = - OBSRef; -using OBSWeakEncoderAutoRelease = - OBSRef; -using OBSWeakServiceAutoRelease = - OBSRef; +using OBSWeakSourceAutoRelease = OBSRef; +using OBSWeakOutputAutoRelease = OBSRef; +using OBSWeakEncoderAutoRelease = OBSRef; +using OBSWeakServiceAutoRelease = OBSRef; #endif -template -T *GetCalldataPointer(const calldata_t *data, const char *name) +template T *GetCalldataPointer(const calldata_t *data, const char *name) { void *ptr = nullptr; calldata_get_ptr(data, name, &ptr); @@ -211,8 +190,7 @@ std::vector GetSceneList(); std::vector GetGroupList(); std::vector GetSceneItemList(obs_scene_t *scene, bool basic = false); std::vector GetInputList(std::string inputKind = ""); -std::vector GetInputKindList(bool unversioned = false, - bool includeDisabled = false); +std::vector GetInputKindList(bool unversioned = false, bool includeDisabled = false); std::vector GetListPropertyItems(obs_property_t *property); std::vector GetTransitionKindList(); std::vector GetSceneTransitionList(); @@ -227,31 +205,20 @@ json GetSceneItemTransform(obs_sceneitem_t *item); namespace SearchHelper { obs_hotkey_t *GetHotkeyByName(std::string name); -obs_source_t *GetSceneTransitionByName( - std::string name); // Increments source ref. Use OBSSourceAutoRelease -obs_sceneitem_t *GetSceneItemByName( - obs_scene_t *scene, std::string name, - int offset = 0); // Increments ref. Use OBSSceneItemAutoRelease +obs_source_t *GetSceneTransitionByName(std::string name); // Increments source ref. Use OBSSourceAutoRelease +obs_sceneitem_t *GetSceneItemByName(obs_scene_t *scene, std::string name, + int offset = 0); // Increments ref. Use OBSSceneItemAutoRelease } namespace ActionHelper { -obs_sceneitem_t * -CreateSceneItem(obs_source_t *source, obs_scene_t *scene, - bool sceneItemEnabled = true, - obs_transform_info *sceneItemTransform = nullptr, - obs_sceneitem_crop *sceneItemCrop = - nullptr); // Increments ref. Use OBSSceneItemAutoRelease -obs_sceneitem_t * -CreateInput(std::string inputName, std::string inputKind, - obs_data_t *inputSettings, obs_scene_t *scene, - bool sceneItemEnabled = - true); // Increments ref. Use OBSSceneItemAutoRelease -obs_source_t *CreateSourceFilter( - obs_source_t *source, std::string filterName, std::string filterKind, - obs_data_t * - filterSettings); // Increments source ref. Use OBSSourceAutoRelease -void SetSourceFilterIndex(obs_source_t *source, obs_source_t *filter, - size_t index); +obs_sceneitem_t *CreateSceneItem(obs_source_t *source, obs_scene_t *scene, bool sceneItemEnabled = true, + obs_transform_info *sceneItemTransform = nullptr, + obs_sceneitem_crop *sceneItemCrop = nullptr); // Increments ref. Use OBSSceneItemAutoRelease +obs_sceneitem_t *CreateInput(std::string inputName, std::string inputKind, obs_data_t *inputSettings, obs_scene_t *scene, + bool sceneItemEnabled = true); // Increments ref. Use OBSSceneItemAutoRelease +obs_source_t *CreateSourceFilter(obs_source_t *source, std::string filterName, std::string filterKind, + obs_data_t *filterSettings); // Increments source ref. Use OBSSourceAutoRelease +void SetSourceFilterIndex(obs_source_t *source, obs_source_t *filter, size_t index); } } } diff --git a/src/utils/Obs_ActionHelper.cpp b/src/utils/Obs_ActionHelper.cpp index bd0d1444..bc60dc45 100644 --- a/src/utils/Obs_ActionHelper.cpp +++ b/src/utils/Obs_ActionHelper.cpp @@ -33,8 +33,7 @@ void CreateSceneItemHelper(void *_data, obs_scene_t *scene) data->sceneItem = obs_scene_add(scene, data->source); if (data->sceneItemTransform) - obs_sceneitem_set_info(data->sceneItem, - data->sceneItemTransform); + obs_sceneitem_set_info(data->sceneItem, data->sceneItemTransform); if (data->sceneItemCrop) obs_sceneitem_set_crop(data->sceneItem, data->sceneItemCrop); @@ -42,10 +41,9 @@ void CreateSceneItemHelper(void *_data, obs_scene_t *scene) obs_sceneitem_set_visible(data->sceneItem, data->sceneItemEnabled); } -obs_sceneitem_t *Utils::Obs::ActionHelper::CreateSceneItem( - obs_source_t *source, obs_scene_t *scene, bool sceneItemEnabled, - obs_transform_info *sceneItemTransform, - obs_sceneitem_crop *sceneItemCrop) +obs_sceneitem_t *Utils::Obs::ActionHelper::CreateSceneItem(obs_source_t *source, obs_scene_t *scene, bool sceneItemEnabled, + obs_transform_info *sceneItemTransform, + obs_sceneitem_crop *sceneItemCrop) { // Sanity check for valid scene if (!(source && scene)) @@ -68,13 +66,11 @@ obs_sceneitem_t *Utils::Obs::ActionHelper::CreateSceneItem( return data.sceneItem; } -obs_sceneitem_t *Utils::Obs::ActionHelper::CreateInput( - std::string inputName, std::string inputKind, obs_data_t *inputSettings, - obs_scene_t *scene, bool sceneItemEnabled) +obs_sceneitem_t *Utils::Obs::ActionHelper::CreateInput(std::string inputName, std::string inputKind, obs_data_t *inputSettings, + obs_scene_t *scene, bool sceneItemEnabled) { // Create the input - OBSSourceAutoRelease input = obs_source_create( - inputKind.c_str(), inputName.c_str(), inputSettings, nullptr); + OBSSourceAutoRelease input = obs_source_create(inputKind.c_str(), inputName.c_str(), inputSettings, nullptr); // Check that everything was created properly if (!input) @@ -83,8 +79,7 @@ obs_sceneitem_t *Utils::Obs::ActionHelper::CreateInput( // Apparently not all default input properties actually get applied on creation (smh) uint32_t flags = obs_source_get_output_flags(input); if ((flags & OBS_SOURCE_MONITOR_BY_DEFAULT) != 0) - obs_source_set_monitoring_type( - input, OBS_MONITORING_TYPE_MONITOR_ONLY); + obs_source_set_monitoring_type(input, OBS_MONITORING_TYPE_MONITOR_ONLY); // Create a scene item for the input obs_sceneitem_t *ret = CreateSceneItem(input, scene, sceneItemEnabled); @@ -96,12 +91,10 @@ obs_sceneitem_t *Utils::Obs::ActionHelper::CreateInput( return ret; } -obs_source_t *Utils::Obs::ActionHelper::CreateSourceFilter( - obs_source_t *source, std::string filterName, std::string filterKind, - obs_data_t *filterSettings) +obs_source_t *Utils::Obs::ActionHelper::CreateSourceFilter(obs_source_t *source, std::string filterName, std::string filterKind, + obs_data_t *filterSettings) { - obs_source_t *filter = obs_source_create_private( - filterKind.c_str(), filterName.c_str(), filterSettings); + obs_source_t *filter = obs_source_create_private(filterKind.c_str(), filterName.c_str(), filterSettings); if (!filter) return nullptr; @@ -111,14 +104,10 @@ obs_source_t *Utils::Obs::ActionHelper::CreateSourceFilter( return filter; } -void Utils::Obs::ActionHelper::SetSourceFilterIndex(obs_source_t *source, - obs_source_t *filter, - size_t index) +void Utils::Obs::ActionHelper::SetSourceFilterIndex(obs_source_t *source, obs_source_t *filter, size_t index) { - size_t currentIndex = - Utils::Obs::NumberHelper::GetSourceFilterIndex(source, filter); - obs_order_movement direction = - index > currentIndex ? OBS_ORDER_MOVE_DOWN : OBS_ORDER_MOVE_UP; + size_t currentIndex = Utils::Obs::NumberHelper::GetSourceFilterIndex(source, filter); + obs_order_movement direction = index > currentIndex ? OBS_ORDER_MOVE_DOWN : OBS_ORDER_MOVE_UP; while (currentIndex != index) { obs_source_filter_set_order(source, filter, direction); diff --git a/src/utils/Obs_ArrayHelper.cpp b/src/utils/Obs_ArrayHelper.cpp index eb70aac7..6c958c8c 100644 --- a/src/utils/Obs_ArrayHelper.cpp +++ b/src/utils/Obs_ArrayHelper.cpp @@ -62,8 +62,7 @@ std::vector Utils::Obs::ArrayHelper::GetHotkeyList() obs_enum_hotkeys( [](void *data, obs_hotkey_id, obs_hotkey_t *hotkey) { - auto ret = static_cast *>( - data); + auto ret = static_cast *>(data); ret->push_back(hotkey); @@ -130,8 +129,7 @@ std::vector Utils::Obs::ArrayHelper::GetGroupList() return ret; } -std::vector Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene, - bool basic) +std::vector Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene, bool basic) { std::pair, bool> enumData; enumData.second = basic; @@ -139,30 +137,22 @@ std::vector Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene, obs_scene_enum_items( scene, [](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) { - auto enumData = static_cast< - std::pair, bool> *>(param); + auto enumData = static_cast, bool> *>(param); json item; item["sceneItemId"] = obs_sceneitem_get_id(sceneItem); // Should be slightly faster than calling obs_sceneitem_get_order_position() item["sceneItemIndex"] = enumData->first.size(); if (!enumData->second) { - OBSSource itemSource = - obs_sceneitem_get_source(sceneItem); - item["sourceName"] = - obs_source_get_name(itemSource); - item["sourceType"] = - StringHelper::GetSourceType(itemSource); - if (obs_source_get_type(itemSource) == - OBS_SOURCE_TYPE_INPUT) - item["inputKind"] = - obs_source_get_id(itemSource); + OBSSource itemSource = obs_sceneitem_get_source(sceneItem); + item["sourceName"] = obs_source_get_name(itemSource); + item["sourceType"] = StringHelper::GetSourceType(itemSource); + if (obs_source_get_type(itemSource) == OBS_SOURCE_TYPE_INPUT) + item["inputKind"] = obs_source_get_id(itemSource); else item["inputKind"] = nullptr; - if (obs_source_get_type(itemSource) == - OBS_SOURCE_TYPE_SCENE) - item["isGroup"] = - obs_source_is_group(itemSource); + if (obs_source_get_type(itemSource) == OBS_SOURCE_TYPE_SCENE) + item["isGroup"] = obs_source_is_group(itemSource); else item["isGroup"] = nullptr; } @@ -195,15 +185,13 @@ std::vector Utils::Obs::ArrayHelper::GetInputList(std::string inputKind) std::string inputKind = obs_source_get_id(input); - if (!inputInfo->inputKind.empty() && - inputInfo->inputKind != inputKind) + 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); + inputJson["unversionedInputKind"] = obs_source_get_unversioned_id(input); inputInfo->inputs.push_back(inputJson); return true; @@ -214,9 +202,7 @@ std::vector Utils::Obs::ArrayHelper::GetInputList(std::string inputKind) return inputInfo.inputs; } -std::vector -Utils::Obs::ArrayHelper::GetInputKindList(bool unversioned, - bool includeDisabled) +std::vector Utils::Obs::ArrayHelper::GetInputKindList(bool unversioned, bool includeDisabled) { std::vector ret; @@ -238,8 +224,7 @@ Utils::Obs::ArrayHelper::GetInputKindList(bool unversioned, return ret; } -std::vector -Utils::Obs::ArrayHelper::GetListPropertyItems(obs_property_t *property) +std::vector Utils::Obs::ArrayHelper::GetListPropertyItems(obs_property_t *property) { std::vector ret; @@ -251,17 +236,13 @@ Utils::Obs::ArrayHelper::GetListPropertyItems(obs_property_t *property) for (size_t i = 0; i < itemCount; i++) { json itemData; itemData["itemName"] = obs_property_list_item_name(property, i); - itemData["itemEnabled"] = - !obs_property_list_item_disabled(property, i); + itemData["itemEnabled"] = !obs_property_list_item_disabled(property, i); if (itemFormat == OBS_COMBO_FORMAT_INT) { - itemData["itemValue"] = - obs_property_list_item_int(property, i); + itemData["itemValue"] = obs_property_list_item_int(property, i); } else if (itemFormat == OBS_COMBO_FORMAT_FLOAT) { - itemData["itemValue"] = - obs_property_list_item_float(property, i); + itemData["itemValue"] = obs_property_list_item_float(property, i); } else if (itemFormat == OBS_COMBO_FORMAT_STRING) { - itemData["itemValue"] = - obs_property_list_item_string(property, i); + itemData["itemValue"] = obs_property_list_item_string(property, i); } else { itemData["itemValue"] = nullptr; } @@ -293,14 +274,10 @@ std::vector Utils::Obs::ArrayHelper::GetSceneTransitionList() for (size_t i = 0; i < transitionList.sources.num; i++) { obs_source_t *transition = transitionList.sources.array[i]; json transitionJson; - transitionJson["transitionName"] = - obs_source_get_name(transition); - transitionJson["transitionKind"] = - obs_source_get_id(transition); - transitionJson["transitionFixed"] = - obs_transition_fixed(transition); - transitionJson["transitionConfigurable"] = - obs_source_configurable(transition); + transitionJson["transitionName"] = obs_source_get_name(transition); + transitionJson["transitionKind"] = obs_source_get_id(transition); + transitionJson["transitionFixed"] = obs_transition_fixed(transition); + transitionJson["transitionConfigurable"] = obs_source_configurable(transition); ret.push_back(transitionJson); } @@ -321,13 +298,11 @@ std::vector Utils::Obs::ArrayHelper::GetFilterKindList() return ret; } -std::vector -Utils::Obs::ArrayHelper::GetSourceFilterList(obs_source_t *source) +std::vector Utils::Obs::ArrayHelper::GetSourceFilterList(obs_source_t *source) { std::vector filters; - auto enumFilters = [](obs_source_t *, obs_source_t *filter, - void *param) { + auto enumFilters = [](obs_source_t *, obs_source_t *filter, void *param) { auto filters = reinterpret_cast *>(param); json filterJson; @@ -336,10 +311,8 @@ Utils::Obs::ArrayHelper::GetSourceFilterList(obs_source_t *source) filterJson["filterKind"] = obs_source_get_id(filter); filterJson["filterName"] = obs_source_get_name(filter); - OBSDataAutoRelease filterSettings = - obs_source_get_settings(filter); - filterJson["filterSettings"] = - Utils::Json::ObsDataToJson(filterSettings); + OBSDataAutoRelease filterSettings = obs_source_get_settings(filter); + filterJson["filterSettings"] = Utils::Json::ObsDataToJson(filterSettings); filters->push_back(filterJson); }; diff --git a/src/utils/Obs_EnumHelper.cpp b/src/utils/Obs_EnumHelper.cpp index b36e0eaa..db7301b2 100644 --- a/src/utils/Obs_EnumHelper.cpp +++ b/src/utils/Obs_EnumHelper.cpp @@ -23,8 +23,7 @@ with this program. If not, see if (str == #x) \ return x; -enum obs_bounds_type -Utils::Obs::EnumHelper::GetSceneItemBoundsType(std::string boundsType) +enum obs_bounds_type Utils::Obs::EnumHelper::GetSceneItemBoundsType(std::string boundsType) { RET_COMPARE(boundsType, OBS_BOUNDS_NONE) RET_COMPARE(boundsType, OBS_BOUNDS_STRETCH) @@ -37,8 +36,7 @@ Utils::Obs::EnumHelper::GetSceneItemBoundsType(std::string boundsType) return OBS_BOUNDS_NONE; } -enum ObsMediaInputAction -Utils::Obs::EnumHelper::GetMediaInputAction(std::string mediaAction) +enum ObsMediaInputAction Utils::Obs::EnumHelper::GetMediaInputAction(std::string mediaAction) { RET_COMPARE(mediaAction, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PLAY) RET_COMPARE(mediaAction, OBS_WEBSOCKET_MEDIA_INPUT_ACTION_PAUSE) @@ -50,8 +48,7 @@ Utils::Obs::EnumHelper::GetMediaInputAction(std::string mediaAction) return OBS_WEBSOCKET_MEDIA_INPUT_ACTION_NONE; } -enum obs_blending_type -Utils::Obs::EnumHelper::GetSceneItemBlendMode(std::string mode) +enum obs_blending_type Utils::Obs::EnumHelper::GetSceneItemBlendMode(std::string mode) { RET_COMPARE(mode, OBS_BLEND_NORMAL) RET_COMPARE(mode, OBS_BLEND_ADDITIVE) diff --git a/src/utils/Obs_NumberHelper.cpp b/src/utils/Obs_NumberHelper.cpp index 4198c5a6..2246707e 100644 --- a/src/utils/Obs_NumberHelper.cpp +++ b/src/utils/Obs_NumberHelper.cpp @@ -53,8 +53,7 @@ size_t Utils::Obs::NumberHelper::GetSceneCount() return ret; } -size_t Utils::Obs::NumberHelper::GetSourceFilterIndex(obs_source_t *source, - obs_source_t *filter) +size_t Utils::Obs::NumberHelper::GetSourceFilterIndex(obs_source_t *source, obs_source_t *filter) { struct FilterSearch { obs_source_t *filter; @@ -62,8 +61,7 @@ size_t Utils::Obs::NumberHelper::GetSourceFilterIndex(obs_source_t *source, size_t index; }; - auto search = [](obs_source_t *, obs_source_t *filter, - void *priv_data) { + auto search = [](obs_source_t *, obs_source_t *filter, void *priv_data) { auto filterSearch = static_cast(priv_data); if (filter == filterSearch->filter) diff --git a/src/utils/Obs_ObjectHelper.cpp b/src/utils/Obs_ObjectHelper.cpp index ddf99001..c20fe545 100644 --- a/src/utils/Obs_ObjectHelper.cpp +++ b/src/utils/Obs_ObjectHelper.cpp @@ -27,20 +27,15 @@ json Utils::Obs::ObjectHelper::GetStats() { json ret; - std::string outputPath = - Utils::Obs::StringHelper::GetCurrentRecordOutputPath(); + std::string outputPath = Utils::Obs::StringHelper::GetCurrentRecordOutputPath(); video_t *video = obs_get_video(); ret["cpuUsage"] = os_cpu_usage_info_query(GetCpuUsageInfo()); - ret["memoryUsage"] = - (double)os_get_proc_resident_size() / (1024.0 * 1024.0); - ret["availableDiskSpace"] = - (double)os_get_free_disk_space(outputPath.c_str()) / - (1024.0 * 1024.0); + ret["memoryUsage"] = (double)os_get_proc_resident_size() / (1024.0 * 1024.0); + ret["availableDiskSpace"] = (double)os_get_free_disk_space(outputPath.c_str()) / (1024.0 * 1024.0); ret["activeFps"] = obs_get_active_fps(); - ret["averageFrameRenderTime"] = - (double)obs_get_average_frame_time_ns() / 1000000.0; + ret["averageFrameRenderTime"] = (double)obs_get_average_frame_time_ns() / 1000000.0; ret["renderSkippedFrames"] = obs_get_lagged_frames(); ret["renderTotalFrames"] = obs_get_total_frames(); ret["outputSkippedFrames"] = video_output_get_skipped_frames(video); @@ -78,8 +73,7 @@ json Utils::Obs::ObjectHelper::GetSceneItemTransform(obs_sceneitem_t *item) ret["alignment"] = osi.alignment; - ret["boundsType"] = - StringHelper::GetSceneItemBoundsType(osi.bounds_type); + ret["boundsType"] = StringHelper::GetSceneItemBoundsType(osi.bounds_type); ret["boundsAlignment"] = osi.bounds_alignment; ret["boundsWidth"] = osi.bounds.x; ret["boundsHeight"] = osi.bounds.y; diff --git a/src/utils/Obs_SearchHelper.cpp b/src/utils/Obs_SearchHelper.cpp index a6808505..713b4f7d 100644 --- a/src/utils/Obs_SearchHelper.cpp +++ b/src/utils/Obs_SearchHelper.cpp @@ -35,8 +35,7 @@ obs_hotkey_t *Utils::Obs::SearchHelper::GetHotkeyByName(std::string name) } // Increments source ref. Use OBSSourceAutoRelease -obs_source_t * -Utils::Obs::SearchHelper::GetSceneTransitionByName(std::string name) +obs_source_t *Utils::Obs::SearchHelper::GetSceneTransitionByName(std::string name) { obs_frontend_source_list transitionList = {}; obs_frontend_get_transitions(&transitionList); @@ -62,9 +61,7 @@ struct SceneItemSearchData { }; // Increments item ref. Use OBSSceneItemAutoRelease -obs_sceneitem_t * -Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene, - std::string name, int offset) +obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene, std::string name, int offset) { if (name.empty()) return nullptr; @@ -76,24 +73,19 @@ Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene, obs_scene_enum_items( scene, [](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) { - auto enumData = - static_cast(param); + auto enumData = static_cast(param); - OBSSource itemSource = - obs_sceneitem_get_source(sceneItem); - std::string sourceName = - obs_source_get_name(itemSource); + OBSSource itemSource = obs_sceneitem_get_source(sceneItem); + std::string sourceName = obs_source_get_name(itemSource); if (sourceName == enumData->name) { if (enumData->offset > 0) { enumData->offset--; } else { if (enumData->ret) // Release existing selection in the case of last match selection - obs_sceneitem_release( - enumData->ret); + obs_sceneitem_release(enumData->ret); obs_sceneitem_addref(sceneItem); enumData->ret = sceneItem; - if (enumData->offset == - 0) // Only break if in normal selection mode (not offset == -1) + if (enumData->offset == 0) // Only break if in normal selection mode (not offset == -1) return false; } } diff --git a/src/utils/Obs_StringHelper.cpp b/src/utils/Obs_StringHelper.cpp index a0e8ca65..62a543cf 100644 --- a/src/utils/Obs_StringHelper.cpp +++ b/src/utils/Obs_StringHelper.cpp @@ -85,8 +85,7 @@ std::string Utils::Obs::StringHelper::GetSourceType(obs_source_t *source) } } -std::string Utils::Obs::StringHelper::GetInputMonitorType( - enum obs_monitoring_type monitorType) +std::string Utils::Obs::StringHelper::GetInputMonitorType(enum obs_monitoring_type monitorType) { switch (monitorType) { default: @@ -138,8 +137,7 @@ std::string Utils::Obs::StringHelper::GetLastReplayBufferFilePath() return savedReplayPath; } -std::string -Utils::Obs::StringHelper::GetSceneItemBoundsType(enum obs_bounds_type type) +std::string Utils::Obs::StringHelper::GetSceneItemBoundsType(enum obs_bounds_type type) { switch (type) { default: @@ -153,8 +151,7 @@ Utils::Obs::StringHelper::GetSceneItemBoundsType(enum obs_bounds_type type) } } -std::string -Utils::Obs::StringHelper::GetSceneItemBlendMode(enum obs_blending_type mode) +std::string Utils::Obs::StringHelper::GetSceneItemBlendMode(enum obs_blending_type mode) { switch (mode) { default: @@ -178,10 +175,8 @@ std::string Utils::Obs::StringHelper::DurationToTimecode(uint64_t ms) uint64_t secsPart = secs % 60ULL; uint64_t msPart = ms % 1000ULL; - QString formatted = QString::asprintf("%02" PRIu64 ":%02" PRIu64 - ":%02" PRIu64 ".%03" PRIu64, - hoursPart, minutesPart, secsPart, - msPart); + QString formatted = + QString::asprintf("%02" PRIu64 ":%02" PRIu64 ":%02" PRIu64 ".%03" PRIu64, hoursPart, minutesPart, secsPart, msPart); return formatted.toStdString(); } diff --git a/src/utils/Obs_VolumeMeter.cpp b/src/utils/Obs_VolumeMeter.cpp index 7f927225..52eae667 100644 --- a/src/utils/Obs_VolumeMeter.cpp +++ b/src/utils/Obs_VolumeMeter.cpp @@ -36,12 +36,9 @@ Utils::Obs::VolumeMeter::Meter::Meter(obs_source_t *input) signal_handler_t *sh = obs_source_get_signal_handler(input); signal_handler_connect(sh, "volume", Meter::InputVolumeCallback, this); - obs_source_add_audio_capture_callback( - input, Meter::InputAudioCaptureCallback, this); + obs_source_add_audio_capture_callback(input, Meter::InputAudioCaptureCallback, this); - blog_debug( - "[Utils::Obs::VolumeMeter::Meter::Meter] Meter created for input: %s", - obs_source_get_name(input)); + blog_debug("[Utils::Obs::VolumeMeter::Meter::Meter] Meter created for input: %s", obs_source_get_name(input)); } Utils::Obs::VolumeMeter::Meter::~Meter() @@ -54,15 +51,11 @@ Utils::Obs::VolumeMeter::Meter::~Meter() } signal_handler_t *sh = obs_source_get_signal_handler(input); - signal_handler_disconnect(sh, "volume", Meter::InputVolumeCallback, - this); + signal_handler_disconnect(sh, "volume", Meter::InputVolumeCallback, this); - obs_source_remove_audio_capture_callback( - input, Meter::InputAudioCaptureCallback, this); + obs_source_remove_audio_capture_callback(input, Meter::InputAudioCaptureCallback, this); - blog_debug( - "[Utils::Obs::VolumeMeter::Meter::~Meter] Meter destroyed for input: %s", - obs_source_get_name(input)); + blog_debug("[Utils::Obs::VolumeMeter::Meter::~Meter] Meter destroyed for input: %s", obs_source_get_name(input)); } bool Utils::Obs::VolumeMeter::Meter::InputValid() @@ -86,8 +79,7 @@ json Utils::Obs::VolumeMeter::Meter::GetMeterData() std::unique_lock l(_mutex); - if (_lastUpdate != 0 && - (os_gettime_ns() - _lastUpdate) * 0.000000001 > 0.3) + if (_lastUpdate != 0 && (os_gettime_ns() - _lastUpdate) * 0.000000001 > 0.3) ResetAudioLevels(); for (int channel = 0; channel < _channels; channel++) { @@ -110,16 +102,14 @@ json Utils::Obs::VolumeMeter::Meter::GetMeterData() void Utils::Obs::VolumeMeter::Meter::ResetAudioLevels() { _lastUpdate = 0; - for (int channelNumber = 0; channelNumber < MAX_AUDIO_CHANNELS; - channelNumber++) { + for (int channelNumber = 0; channelNumber < MAX_AUDIO_CHANNELS; channelNumber++) { _magnitude[channelNumber] = 0; _peak[channelNumber] = 0; } } // MUST HOLD LOCK -void Utils::Obs::VolumeMeter::Meter::ProcessAudioChannels( - const struct audio_data *data) +void Utils::Obs::VolumeMeter::Meter::ProcessAudioChannels(const struct audio_data *data) { int channels = 0; for (int i = 0; i < MAX_AV_PLANES; i++) { @@ -151,19 +141,16 @@ void Utils::Obs::VolumeMeter::Meter::ProcessPeak(const struct audio_data *data) continue; } - __m128 previousSamples = - _mm_loadu_ps(_previousSamples[channelNumber]); + __m128 previousSamples = _mm_loadu_ps(_previousSamples[channelNumber]); float peak; switch (PeakMeterType) { default: case SAMPLE_PEAK_METER: - peak = GetSamplePeak(previousSamples, samples, - sampleCount); + peak = GetSamplePeak(previousSamples, samples, sampleCount); break; case TRUE_PEAK_METER: - peak = GetTruePeak(previousSamples, samples, - sampleCount); + peak = GetTruePeak(previousSamples, samples, sampleCount); break; } @@ -171,44 +158,28 @@ void Utils::Obs::VolumeMeter::Meter::ProcessPeak(const struct audio_data *data) case 0: break; case 1: - _previousSamples[channelNumber][0] = - _previousSamples[channelNumber][1]; - _previousSamples[channelNumber][1] = - _previousSamples[channelNumber][2]; - _previousSamples[channelNumber][2] = - _previousSamples[channelNumber][3]; - _previousSamples[channelNumber][3] = - samples[sampleCount - 1]; + _previousSamples[channelNumber][0] = _previousSamples[channelNumber][1]; + _previousSamples[channelNumber][1] = _previousSamples[channelNumber][2]; + _previousSamples[channelNumber][2] = _previousSamples[channelNumber][3]; + _previousSamples[channelNumber][3] = samples[sampleCount - 1]; break; case 2: - _previousSamples[channelNumber][0] = - _previousSamples[channelNumber][2]; - _previousSamples[channelNumber][1] = - _previousSamples[channelNumber][3]; - _previousSamples[channelNumber][2] = - samples[sampleCount - 2]; - _previousSamples[channelNumber][3] = - samples[sampleCount - 1]; + _previousSamples[channelNumber][0] = _previousSamples[channelNumber][2]; + _previousSamples[channelNumber][1] = _previousSamples[channelNumber][3]; + _previousSamples[channelNumber][2] = samples[sampleCount - 2]; + _previousSamples[channelNumber][3] = samples[sampleCount - 1]; break; case 3: - _previousSamples[channelNumber][0] = - _previousSamples[channelNumber][3]; - _previousSamples[channelNumber][1] = - samples[sampleCount - 3]; - _previousSamples[channelNumber][2] = - samples[sampleCount - 2]; - _previousSamples[channelNumber][3] = - samples[sampleCount - 1]; + _previousSamples[channelNumber][0] = _previousSamples[channelNumber][3]; + _previousSamples[channelNumber][1] = samples[sampleCount - 3]; + _previousSamples[channelNumber][2] = samples[sampleCount - 2]; + _previousSamples[channelNumber][3] = samples[sampleCount - 1]; break; default: - _previousSamples[channelNumber][0] = - samples[sampleCount - 4]; - _previousSamples[channelNumber][1] = - samples[sampleCount - 3]; - _previousSamples[channelNumber][2] = - samples[sampleCount - 2]; - _previousSamples[channelNumber][3] = - samples[sampleCount - 1]; + _previousSamples[channelNumber][0] = samples[sampleCount - 4]; + _previousSamples[channelNumber][1] = samples[sampleCount - 3]; + _previousSamples[channelNumber][2] = samples[sampleCount - 2]; + _previousSamples[channelNumber][3] = samples[sampleCount - 1]; } _peak[channelNumber] = peak; @@ -221,8 +192,7 @@ void Utils::Obs::VolumeMeter::Meter::ProcessPeak(const struct audio_data *data) } // MUST HOLD LOCK -void Utils::Obs::VolumeMeter::Meter::ProcessMagnitude( - const struct audio_data *data) +void Utils::Obs::VolumeMeter::Meter::ProcessMagnitude(const struct audio_data *data) { size_t sampleCount = data->frames; @@ -244,9 +214,8 @@ void Utils::Obs::VolumeMeter::Meter::ProcessMagnitude( } } -void Utils::Obs::VolumeMeter::Meter::InputAudioCaptureCallback( - void *priv_data, obs_source_t *, const struct audio_data *data, - bool muted) +void Utils::Obs::VolumeMeter::Meter::InputAudioCaptureCallback(void *priv_data, obs_source_t *, const struct audio_data *data, + bool muted) { auto c = static_cast(priv_data); @@ -260,16 +229,14 @@ void Utils::Obs::VolumeMeter::Meter::InputAudioCaptureCallback( c->_lastUpdate = os_gettime_ns(); } -void Utils::Obs::VolumeMeter::Meter::InputVolumeCallback(void *priv_data, - calldata_t *cd) +void Utils::Obs::VolumeMeter::Meter::InputVolumeCallback(void *priv_data, calldata_t *cd) { auto c = static_cast(priv_data); c->_volume = (float)calldata_float(cd, "volume"); } -Utils::Obs::VolumeMeter::Handler::Handler(UpdateCallback cb, - uint64_t updatePeriod) +Utils::Obs::VolumeMeter::Handler::Handler(UpdateCallback cb, uint64_t updatePeriod) : _updateCallback(cb), _updatePeriod(updatePeriod), _running(false) { signal_handler_t *sh = obs_get_signal_handler(); @@ -292,16 +259,13 @@ Utils::Obs::VolumeMeter::Handler::Handler(UpdateCallback cb, }; obs_enum_sources(enumProc, this); - signal_handler_connect(sh, "source_activate", - Handler::InputActivateCallback, this); - signal_handler_connect(sh, "source_deactivate", - Handler::InputDeactivateCallback, this); + signal_handler_connect(sh, "source_activate", Handler::InputActivateCallback, this); + signal_handler_connect(sh, "source_deactivate", Handler::InputDeactivateCallback, this); _running = true; _updateThread = std::thread(&Handler::UpdateThread, this); - blog_debug( - "[Utils::Obs::VolumeMeter::Handler::Handler] Handler created."); + blog_debug("[Utils::Obs::VolumeMeter::Handler::Handler] Handler created."); } Utils::Obs::VolumeMeter::Handler::~Handler() @@ -310,10 +274,8 @@ Utils::Obs::VolumeMeter::Handler::~Handler() if (!sh) return; - signal_handler_disconnect(sh, "source_activate", - Handler::InputActivateCallback, this); - signal_handler_disconnect(sh, "source_deactivate", - Handler::InputDeactivateCallback, this); + signal_handler_disconnect(sh, "source_activate", Handler::InputActivateCallback, this); + signal_handler_disconnect(sh, "source_deactivate", Handler::InputDeactivateCallback, this); if (_running) { _running = false; @@ -323,20 +285,16 @@ Utils::Obs::VolumeMeter::Handler::~Handler() if (_updateThread.joinable()) _updateThread.join(); - blog_debug( - "[Utils::Obs::VolumeMeter::Handler::~Handler] Handler destroyed."); + blog_debug("[Utils::Obs::VolumeMeter::Handler::~Handler] Handler destroyed."); } void Utils::Obs::VolumeMeter::Handler::UpdateThread() { - blog_debug( - "[Utils::Obs::VolumeMeter::Handler::UpdateThread] Thread started."); + blog_debug("[Utils::Obs::VolumeMeter::Handler::UpdateThread] Thread started."); while (_running) { { std::unique_lock l(_mutex); - if (_cond.wait_for( - l, std::chrono::milliseconds(_updatePeriod), - [this] { return !_running; })) + if (_cond.wait_for(l, std::chrono::milliseconds(_updatePeriod), [this] { return !_running; })) break; } @@ -351,12 +309,10 @@ void Utils::Obs::VolumeMeter::Handler::UpdateThread() if (_updateCallback) _updateCallback(inputs); } - blog_debug( - "[Utils::Obs::VolumeMeter::Handler::UpdateThread] Thread stopped."); + blog_debug("[Utils::Obs::VolumeMeter::Handler::UpdateThread] Thread stopped."); } -void Utils::Obs::VolumeMeter::Handler::InputActivateCallback(void *priv_data, - calldata_t *cd) +void Utils::Obs::VolumeMeter::Handler::InputActivateCallback(void *priv_data, calldata_t *cd) { auto c = static_cast(priv_data); @@ -375,8 +331,7 @@ void Utils::Obs::VolumeMeter::Handler::InputActivateCallback(void *priv_data, c->_meters.emplace_back(std::move(new Meter(input))); } -void Utils::Obs::VolumeMeter::Handler::InputDeactivateCallback(void *priv_data, - calldata_t *cd) +void Utils::Obs::VolumeMeter::Handler::InputDeactivateCallback(void *priv_data, calldata_t *cd) { auto c = static_cast(priv_data); @@ -391,8 +346,7 @@ void Utils::Obs::VolumeMeter::Handler::InputDeactivateCallback(void *priv_data, std::unique_lock l(c->_meterMutex); std::vector::iterator iter; for (iter = c->_meters.begin(); iter != c->_meters.end();) { - if (obs_weak_source_references_source( - iter->get()->GetWeakInput(), input)) + if (obs_weak_source_references_source(iter->get()->GetWeakInput(), input)) iter = c->_meters.erase(iter); else ++iter; diff --git a/src/utils/Obs_VolumeMeter.h b/src/utils/Obs_VolumeMeter.h index 9ab1670c..ee10e715 100644 --- a/src/utils/Obs_VolumeMeter.h +++ b/src/utils/Obs_VolumeMeter.h @@ -65,10 +65,7 @@ private: void ProcessPeak(const struct audio_data *data); void ProcessMagnitude(const struct audio_data *data); - static void InputAudioCaptureCallback(void *priv_data, - obs_source_t *source, - const struct audio_data *data, - bool muted); + static void InputAudioCaptureCallback(void *priv_data, obs_source_t *source, const struct audio_data *data, bool muted); static void InputVolumeCallback(void *priv_data, calldata_t *cd); }; diff --git a/src/utils/Obs_VolumeMeter_Helpers.h b/src/utils/Obs_VolumeMeter_Helpers.h index 2e3192e3..069e0e28 100644 --- a/src/utils/Obs_VolumeMeter_Helpers.h +++ b/src/utils/Obs_VolumeMeter_Helpers.h @@ -22,12 +22,11 @@ with this program. If not, see // It should probably be imported as a libobs util someday though. -#define SHIFT_RIGHT_2PS(msb, lsb) \ - { \ - __m128 tmp = \ - _mm_shuffle_ps(lsb, msb, _MM_SHUFFLE(0, 0, 3, 3)); \ - lsb = _mm_shuffle_ps(lsb, tmp, _MM_SHUFFLE(2, 1, 2, 1)); \ - msb = _mm_shuffle_ps(msb, msb, _MM_SHUFFLE(3, 3, 2, 1)); \ +#define SHIFT_RIGHT_2PS(msb, lsb) \ + { \ + __m128 tmp = _mm_shuffle_ps(lsb, msb, _MM_SHUFFLE(0, 0, 3, 3)); \ + lsb = _mm_shuffle_ps(lsb, tmp, _MM_SHUFFLE(2, 1, 2, 1)); \ + msb = _mm_shuffle_ps(msb, msb, _MM_SHUFFLE(3, 3, 2, 1)); \ } #define abs_ps(v) _mm_andnot_ps(_mm_set1_ps(-0.f), v) @@ -56,8 +55,7 @@ with this program. If not, see r = fmaxf(r, x4_mem[3]); \ } while (false) -static float GetSamplePeak(__m128 previousSamples, const float *samples, - size_t sampleCount) +static float GetSamplePeak(__m128 previousSamples, const float *samples, size_t sampleCount) { __m128 peak = previousSamples; for (size_t i = 0; (i + 3) < sampleCount; i += 4) { @@ -70,17 +68,12 @@ static float GetSamplePeak(__m128 previousSamples, const float *samples, return ret; } -static float GetTruePeak(__m128 previousSamples, const float *samples, - size_t sampleCount) +static float GetTruePeak(__m128 previousSamples, const float *samples, size_t sampleCount) { - const __m128 m3 = - _mm_set_ps(-0.155915f, 0.935489f, 0.233872f, -0.103943f); - const __m128 m1 = - _mm_set_ps(-0.216236f, 0.756827f, 0.504551f, -0.189207f); - const __m128 p1 = - _mm_set_ps(-0.189207f, 0.504551f, 0.756827f, -0.216236f); - const __m128 p3 = - _mm_set_ps(-0.103943f, 0.233872f, 0.935489f, -0.155915f); + const __m128 m3 = _mm_set_ps(-0.155915f, 0.935489f, 0.233872f, -0.103943f); + const __m128 m1 = _mm_set_ps(-0.216236f, 0.756827f, 0.504551f, -0.189207f); + const __m128 p1 = _mm_set_ps(-0.189207f, 0.504551f, 0.756827f, -0.216236f); + const __m128 p3 = _mm_set_ps(-0.103943f, 0.233872f, 0.935489f, -0.155915f); __m128 work = previousSamples; __m128 peak = previousSamples; diff --git a/src/utils/Platform.cpp b/src/utils/Platform.cpp index f337d9ab..b4a00cb8 100644 --- a/src/utils/Platform.cpp +++ b/src/utils/Platform.cpp @@ -54,35 +54,24 @@ std::string Utils::Platform::GetLocalAddress() for (auto address : validAddresses) { // Attribute a priority (0 is best) to the address to choose the best picks if (address.startsWith("192.168.1.") || - address.startsWith( - "192.168.0.")) { // Prefer common consumer router network prefixes + address.startsWith("192.168.0.")) { // Prefer common consumer router network prefixes if (address.startsWith("192.168.56.")) - preferredAddresses.push_back(std::make_pair( - address, - 255)); // Ignore virtualbox default + preferredAddresses.push_back(std::make_pair(address, + 255)); // Ignore virtualbox default else - preferredAddresses.push_back( - std::make_pair(address, 0)); - } else if (address.startsWith( - "172.16.")) { // Slightly less common consumer router network prefixes - preferredAddresses.push_back( - std::make_pair(address, 1)); - } else if (address.startsWith( - "10.")) { // Even less common consumer router network prefixes - preferredAddresses.push_back( - std::make_pair(address, 2)); + preferredAddresses.push_back(std::make_pair(address, 0)); + } else if (address.startsWith("172.16.")) { // Slightly less common consumer router network prefixes + preferredAddresses.push_back(std::make_pair(address, 1)); + } else if (address.startsWith("10.")) { // Even less common consumer router network prefixes + preferredAddresses.push_back(std::make_pair(address, 2)); } else { // Set all other addresses to equal priority - preferredAddresses.push_back( - std::make_pair(address, 255)); + preferredAddresses.push_back(std::make_pair(address, 255)); } } // Sort by priority std::sort(preferredAddresses.begin(), preferredAddresses.end(), - [=](std::pair a, - std::pair b) { - return a.second < b.second; - }); + [=](std::pair a, std::pair b) { return a.second < b.second; }); // Return highest priority address return preferredAddresses[0].first.toStdString(); @@ -132,35 +121,27 @@ struct SystemTrayNotification { QString body; }; -void Utils::Platform::SendTrayNotification(QSystemTrayIcon::MessageIcon icon, - QString title, QString body) +void Utils::Platform::SendTrayNotification(QSystemTrayIcon::MessageIcon icon, QString title, QString body) { - if (!QSystemTrayIcon::isSystemTrayAvailable() || - !QSystemTrayIcon::supportsMessages()) + if (!QSystemTrayIcon::isSystemTrayAvailable() || !QSystemTrayIcon::supportsMessages()) return; - SystemTrayNotification *notification = - new SystemTrayNotification{icon, title, body}; + SystemTrayNotification *notification = new SystemTrayNotification{icon, title, body}; obs_queue_task( OBS_TASK_UI, [](void *param) { void *systemTrayPtr = obs_frontend_get_system_tray(); - auto systemTray = - static_cast(systemTrayPtr); + auto systemTray = static_cast(systemTrayPtr); - auto notification = - static_cast(param); - systemTray->showMessage(notification->title, - notification->body, - notification->icon); + auto notification = static_cast(param); + systemTray->showMessage(notification->title, notification->body, notification->icon); delete notification; }, (void *)notification, false); } -bool Utils::Platform::GetTextFileContent(std::string fileName, - std::string &content) +bool Utils::Platform::GetTextFileContent(std::string fileName, std::string &content) { QFile f(QString::fromStdString(fileName)); if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) @@ -170,8 +151,7 @@ bool Utils::Platform::GetTextFileContent(std::string fileName, return true; } -bool Utils::Platform::SetTextFileContent(std::string fileName, - std::string content, bool createNew) +bool Utils::Platform::SetTextFileContent(std::string fileName, std::string content, bool createNew) { if (!createNew && !QFile::exists(QString::fromStdString(fileName))) return false; diff --git a/src/utils/Platform.h b/src/utils/Platform.h index 27da5a6d..2f4ef18e 100644 --- a/src/utils/Platform.h +++ b/src/utils/Platform.h @@ -29,10 +29,8 @@ std::string GetLocalAddress(); std::string GetLoopbackAddress(bool allowIpv6 = true); QString GetCommandLineArgument(QString arg); bool GetCommandLineFlagSet(QString arg); -void SendTrayNotification(QSystemTrayIcon::MessageIcon icon, QString title, - QString body); +void SendTrayNotification(QSystemTrayIcon::MessageIcon icon, QString title, QString body); bool GetTextFileContent(std::string fileName, std::string &content); -bool SetTextFileContent(std::string filePath, std::string content, - bool createNew = true); +bool SetTextFileContent(std::string filePath, std::string content, bool createNew = true); } } diff --git a/src/websocketserver/WebSocketServer.cpp b/src/websocketserver/WebSocketServer.cpp index 17f0a93a..5965556d 100644 --- a/src/websocketserver/WebSocketServer.cpp +++ b/src/websocketserver/WebSocketServer.cpp @@ -42,27 +42,17 @@ WebSocketServer::WebSocketServer() : QObject(nullptr), _sessions() #endif _server.set_validate_handler( - websocketpp::lib::bind(&WebSocketServer::onValidate, this, - websocketpp::lib::placeholders::_1)); - _server.set_open_handler( - websocketpp::lib::bind(&WebSocketServer::onOpen, this, - websocketpp::lib::placeholders::_1)); - _server.set_close_handler( - websocketpp::lib::bind(&WebSocketServer::onClose, this, - websocketpp::lib::placeholders::_1)); - _server.set_message_handler( - websocketpp::lib::bind(&WebSocketServer::onMessage, this, - websocketpp::lib::placeholders::_1, - websocketpp::lib::placeholders::_2)); + websocketpp::lib::bind(&WebSocketServer::onValidate, this, websocketpp::lib::placeholders::_1)); + _server.set_open_handler(websocketpp::lib::bind(&WebSocketServer::onOpen, this, websocketpp::lib::placeholders::_1)); + _server.set_close_handler(websocketpp::lib::bind(&WebSocketServer::onClose, this, websocketpp::lib::placeholders::_1)); + _server.set_message_handler(websocketpp::lib::bind(&WebSocketServer::onMessage, this, websocketpp::lib::placeholders::_1, + websocketpp::lib::placeholders::_2)); auto eventHandler = GetEventHandler(); - eventHandler->SetBroadcastCallback( - std::bind(&WebSocketServer::BroadcastEvent, this, - std::placeholders::_1, std::placeholders::_2, - std::placeholders::_3, std::placeholders::_4)); + eventHandler->SetBroadcastCallback(std::bind(&WebSocketServer::BroadcastEvent, this, std::placeholders::_1, + std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); - eventHandler->SetObsLoadedCallback( - std::bind(&WebSocketServer::onObsLoaded, this)); + eventHandler->SetObsLoadedCallback(std::bind(&WebSocketServer::onObsLoaded, this)); } WebSocketServer::~WebSocketServer() @@ -77,16 +67,11 @@ void WebSocketServer::ServerRunner() try { _server.run(); } catch (websocketpp::exception const &e) { - blog(LOG_ERROR, - "[WebSocketServer::ServerRunner] websocketpp instance returned an error: %s", - e.what()); + blog(LOG_ERROR, "[WebSocketServer::ServerRunner] websocketpp instance returned an error: %s", e.what()); } catch (const std::exception &e) { - blog(LOG_ERROR, - "[WebSocketServer::ServerRunner] websocketpp instance returned an error: %s", - e.what()); + blog(LOG_ERROR, "[WebSocketServer::ServerRunner] websocketpp instance returned an error: %s", e.what()); } catch (...) { - blog(LOG_ERROR, - "[WebSocketServer::ServerRunner] websocketpp instance returned an error"); + blog(LOG_ERROR, "[WebSocketServer::ServerRunner] websocketpp instance returned an error"); } blog(LOG_INFO, "[WebSocketServer::ServerRunner] IO thread exited."); } @@ -94,70 +79,53 @@ void WebSocketServer::ServerRunner() void WebSocketServer::Start() { if (_server.is_listening()) { - blog(LOG_WARNING, - "[WebSocketServer::Start] Call to Start() but the server is already listening."); + blog(LOG_WARNING, "[WebSocketServer::Start] Call to Start() but the server is already listening."); return; } auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[WebSocketServer::Start] Unable to retreive config!"); + blog(LOG_ERROR, "[WebSocketServer::Start] Unable to retreive config!"); return; } _authenticationSalt = Utils::Crypto::GenerateSalt(); - _authenticationSecret = Utils::Crypto::GenerateSecret( - conf->ServerPassword.toStdString(), _authenticationSalt); + _authenticationSecret = Utils::Crypto::GenerateSecret(conf->ServerPassword.toStdString(), _authenticationSalt); // Set log levels if debug is enabled if (IsDebugEnabled()) { _server.get_alog().set_channels(websocketpp::log::alevel::all); - _server.get_alog().clear_channels( - websocketpp::log::alevel::frame_header | - websocketpp::log::alevel::frame_payload | - websocketpp::log::alevel::control); + _server.get_alog().clear_channels(websocketpp::log::alevel::frame_header | websocketpp::log::alevel::frame_payload | + websocketpp::log::alevel::control); _server.get_elog().set_channels(websocketpp::log::elevel::all); - _server.get_alog().clear_channels( - websocketpp::log::elevel::devel | - websocketpp::log::elevel::library); + _server.get_alog().clear_channels(websocketpp::log::elevel::devel | websocketpp::log::elevel::library); } else { - _server.get_alog().clear_channels( - websocketpp::log::alevel::all); - _server.get_elog().clear_channels( - websocketpp::log::elevel::all); + _server.get_alog().clear_channels(websocketpp::log::alevel::all); + _server.get_elog().clear_channels(websocketpp::log::elevel::all); } _server.reset(); websocketpp::lib::error_code errorCode; if (conf->BindLoopback) { - std::string addr = - Utils::Platform::GetLoopbackAddress(!conf->Ipv4Only); + std::string addr = Utils::Platform::GetLoopbackAddress(!conf->Ipv4Only); if (addr.empty()) { - blog(LOG_ERROR, - "[WebSocketServer::Start] Failed to find loopback interface. Server not started."); + blog(LOG_ERROR, "[WebSocketServer::Start] Failed to find loopback interface. Server not started."); return; } - _server.listen(addr, std::to_string(conf->ServerPort), - errorCode); - blog(LOG_INFO, - "[WebSocketServer::Start] Locked to loopback interface."); + _server.listen(addr, std::to_string(conf->ServerPort), errorCode); + blog(LOG_INFO, "[WebSocketServer::Start] Locked to loopback interface."); } else if (conf->Ipv4Only) { - _server.listen(websocketpp::lib::asio::ip::tcp::v4(), - conf->ServerPort, errorCode); - blog(LOG_INFO, - "[WebSocketServer::Start] Locked to IPv4 bindings."); + _server.listen(websocketpp::lib::asio::ip::tcp::v4(), conf->ServerPort, errorCode); + blog(LOG_INFO, "[WebSocketServer::Start] Locked to IPv4 bindings."); } else { _server.listen(conf->ServerPort, errorCode); - blog(LOG_INFO, - "[WebSocketServer::Start] Bound to all interfaces."); + blog(LOG_INFO, "[WebSocketServer::Start] Bound to all interfaces."); } if (errorCode) { std::string errorCodeMessage = errorCode.message(); - blog(LOG_ERROR, "[WebSocketServer::Start] Listen failed: %s", - errorCodeMessage.c_str()); + blog(LOG_ERROR, "[WebSocketServer::Start] Listen failed: %s", errorCodeMessage.c_str()); return; } @@ -165,17 +133,14 @@ void WebSocketServer::Start() _serverThread = std::thread(&WebSocketServer::ServerRunner, this); - blog(LOG_INFO, - "[WebSocketServer::Start] Server started successfully on port %d. Possible connect address: %s", - conf->ServerPort.load(), - Utils::Platform::GetLocalAddress().c_str()); + blog(LOG_INFO, "[WebSocketServer::Start] Server started successfully on port %d. Possible connect address: %s", + conf->ServerPort.load(), Utils::Platform::GetLocalAddress().c_str()); } void WebSocketServer::Stop() { if (!_server.is_listening()) { - blog(LOG_WARNING, - "[WebSocketServer::Stop] Call to Stop() but the server is not listening."); + blog(LOG_WARNING, "[WebSocketServer::Stop] Call to Stop() but the server is not listening."); return; } @@ -186,16 +151,13 @@ void WebSocketServer::Stop() websocketpp::lib::error_code errorCode; _server.pause_reading(hdl, errorCode); if (errorCode) { - blog(LOG_INFO, "[WebSocketServer::Stop] Error: %s", - errorCode.message().c_str()); + blog(LOG_INFO, "[WebSocketServer::Stop] Error: %s", errorCode.message().c_str()); continue; } - _server.close(hdl, websocketpp::close::status::going_away, - "Server stopping.", errorCode); + _server.close(hdl, websocketpp::close::status::going_away, "Server stopping.", errorCode); if (errorCode) { - blog(LOG_INFO, "[WebSocketServer::Stop] Error: %s", - errorCode.message().c_str()); + blog(LOG_INFO, "[WebSocketServer::Stop] Error: %s", errorCode.message().c_str()); continue; } } @@ -215,28 +177,23 @@ void WebSocketServer::Stop() void WebSocketServer::InvalidateSession(websocketpp::connection_hdl hdl) { - blog(LOG_INFO, - "[WebSocketServer::InvalidateSession] Invalidating a session."); + blog(LOG_INFO, "[WebSocketServer::InvalidateSession] Invalidating a session."); websocketpp::lib::error_code errorCode; _server.pause_reading(hdl, errorCode); if (errorCode) { - blog(LOG_INFO, "[WebSocketServer::InvalidateSession] Error: %s", - errorCode.message().c_str()); + blog(LOG_INFO, "[WebSocketServer::InvalidateSession] Error: %s", errorCode.message().c_str()); return; } - _server.close(hdl, WebSocketCloseCode::SessionInvalidated, - "Your session has been invalidated.", errorCode); + _server.close(hdl, WebSocketCloseCode::SessionInvalidated, "Your session has been invalidated.", errorCode); if (errorCode) { - blog(LOG_INFO, "[WebSocketServer::InvalidateSession] Error: %s", - errorCode.message().c_str()); + blog(LOG_INFO, "[WebSocketServer::InvalidateSession] Error: %s", errorCode.message().c_str()); return; } } -std::vector -WebSocketServer::GetWebSocketSessions() +std::vector WebSocketServer::GetWebSocketSessions() { std::vector webSocketSessions; @@ -248,9 +205,8 @@ WebSocketServer::GetWebSocketSessions() std::string remoteAddress = session->RemoteAddress(); bool isIdentified = session->IsIdentified(); - webSocketSessions.emplace_back(WebSocketSessionState{ - hdl, remoteAddress, connectedAt, incomingMessages, - outgoingMessages, isIdentified}); + webSocketSessions.emplace_back( + WebSocketSessionState{hdl, remoteAddress, connectedAt, incomingMessages, outgoingMessages, isIdentified}); } lock.unlock(); @@ -261,14 +217,12 @@ void WebSocketServer::onObsLoaded() { auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[WebSocketServer::onObsLoaded] Unable to retreive config!"); + blog(LOG_ERROR, "[WebSocketServer::onObsLoaded] Unable to retreive config!"); return; } if (conf->ServerEnabled) { - blog(LOG_INFO, - "[WebSocketServer::onObsLoaded] WebSocket server is enabled, starting..."); + blog(LOG_INFO, "[WebSocketServer::onObsLoaded] WebSocket server is enabled, starting..."); Start(); } } @@ -277,11 +231,9 @@ bool WebSocketServer::onValidate(websocketpp::connection_hdl hdl) { auto conn = _server.get_con_from_hdl(hdl); - std::vector requestedSubprotocols = - conn->get_requested_subprotocols(); + std::vector requestedSubprotocols = conn->get_requested_subprotocols(); for (auto subprotocol : requestedSubprotocols) { - if (subprotocol == "obswebsocket.json" || - subprotocol == "obswebsocket.msgpack") { + if (subprotocol == "obswebsocket.json" || subprotocol == "obswebsocket.msgpack") { conn->select_subprotocol(subprotocol); break; } @@ -296,15 +248,13 @@ void WebSocketServer::onOpen(websocketpp::connection_hdl hdl) auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[WebSocketServer::onOpen] Unable to retreive config!"); + blog(LOG_ERROR, "[WebSocketServer::onOpen] Unable to retreive config!"); return; } // Build new session std::unique_lock lock(_sessionMutex); - SessionPtr session = _sessions[hdl] = - std::make_shared(); + SessionPtr session = _sessions[hdl] = std::make_shared(); std::unique_lock sessionLock(session->OperationMutex); lock.unlock(); @@ -329,10 +279,8 @@ void WebSocketServer::onOpen(websocketpp::connection_hdl hdl) std::string sessionChallenge = Utils::Crypto::GenerateSalt(); session->SetChallenge(sessionChallenge); helloMessageData["authentication"] = json::object(); - helloMessageData["authentication"]["challenge"] = - sessionChallenge; - helloMessageData["authentication"]["salt"] = - _authenticationSalt; + helloMessageData["authentication"]["challenge"] = sessionChallenge; + helloMessageData["authentication"]["salt"] = _authenticationSalt; } json helloMessage; helloMessage["op"] = 0; @@ -352,27 +300,20 @@ void WebSocketServer::onOpen(websocketpp::connection_hdl hdl) emit ClientConnected(state); // Log connection - blog(LOG_INFO, - "[WebSocketServer::onOpen] New WebSocket client has connected from %s", - session->RemoteAddress().c_str()); + blog(LOG_INFO, "[WebSocketServer::onOpen] New WebSocket client has connected from %s", session->RemoteAddress().c_str()); - blog_debug( - "[WebSocketServer::onOpen] Sending Op 0 (Hello) message:\n%s", - helloMessage.dump(2).c_str()); + blog_debug("[WebSocketServer::onOpen] Sending Op 0 (Hello) message:\n%s", helloMessage.dump(2).c_str()); // Send object to client websocketpp::lib::error_code errorCode; auto sessionEncoding = session->Encoding(); if (sessionEncoding == WebSocketEncoding::Json) { std::string helloMessageJson = helloMessage.dump(); - _server.send(hdl, helloMessageJson, - websocketpp::frame::opcode::text, errorCode); + _server.send(hdl, helloMessageJson, websocketpp::frame::opcode::text, errorCode); } else if (sessionEncoding == WebSocketEncoding::MsgPack) { auto msgPackData = json::to_msgpack(helloMessage); - std::string messageMsgPack(msgPackData.begin(), - msgPackData.end()); - _server.send(hdl, messageMsgPack, - websocketpp::frame::opcode::binary, errorCode); + std::string messageMsgPack(msgPackData.begin(), msgPackData.end()); + _server.send(hdl, messageMsgPack, websocketpp::frame::opcode::binary, errorCode); } session->IncrementOutgoingMessages(); } @@ -411,37 +352,26 @@ void WebSocketServer::onClose(websocketpp::connection_hdl hdl) emit ClientDisconnected(state, conn->get_local_close_code()); // Log disconnection - blog(LOG_INFO, - "[WebSocketServer::onClose] WebSocket client %s has disconnected", - remoteAddress.c_str()); + blog(LOG_INFO, "[WebSocketServer::onClose] WebSocket client %s has disconnected", remoteAddress.c_str()); // Get config for tray notification auto conf = GetConfig(); if (!conf) { - blog(LOG_ERROR, - "[WebSocketServer::onClose] Unable to retreive config!"); + blog(LOG_ERROR, "[WebSocketServer::onClose] Unable to retreive config!"); return; } // If previously identified, not going away, and notifications enabled, send a tray notification - if (isIdentified && - (conn->get_local_close_code() != - websocketpp::close::status::going_away) && - conf->AlertsEnabled) { - QString title = obs_module_text( - "OBSWebSocket.TrayNotification.Disconnected.Title"); - QString body = - QString(obs_module_text( - "OBSWebSocket.TrayNotification.Disconnected.Body")) - .arg(QString::fromStdString(remoteAddress)); - Utils::Platform::SendTrayNotification( - QSystemTrayIcon::Information, title, body); + if (isIdentified && (conn->get_local_close_code() != websocketpp::close::status::going_away) && conf->AlertsEnabled) { + QString title = obs_module_text("OBSWebSocket.TrayNotification.Disconnected.Title"); + QString body = QString(obs_module_text("OBSWebSocket.TrayNotification.Disconnected.Body")) + .arg(QString::fromStdString(remoteAddress)); + Utils::Platform::SendTrayNotification(QSystemTrayIcon::Information, title, body); } } -void WebSocketServer::onMessage( - websocketpp::connection_hdl hdl, - websocketpp::server::message_ptr message) +void WebSocketServer::onMessage(websocketpp::connection_hdl hdl, + websocketpp::server::message_ptr message) { auto opCode = message->get_opcode(); std::string payload = message->get_payload(); @@ -464,52 +394,37 @@ void WebSocketServer::onMessage( uint8_t sessionEncoding = session->Encoding(); if (sessionEncoding == WebSocketEncoding::Json) { if (opCode != websocketpp::frame::opcode::text) { - _server.close( - hdl, - WebSocketCloseCode::MessageDecodeError, - "Your session encoding is set to Json, but a binary message was received.", - errorCode); + _server.close(hdl, WebSocketCloseCode::MessageDecodeError, + "Your session encoding is set to Json, but a binary message was received.", + errorCode); return; } try { incomingMessage = json::parse(payload); } catch (json::parse_error &e) { - _server.close( - hdl, - WebSocketCloseCode::MessageDecodeError, - std::string("Unable to decode Json: ") + - e.what(), - errorCode); + _server.close(hdl, WebSocketCloseCode::MessageDecodeError, + std::string("Unable to decode Json: ") + e.what(), errorCode); return; } } else if (sessionEncoding == WebSocketEncoding::MsgPack) { if (opCode != websocketpp::frame::opcode::binary) { - _server.close( - hdl, - WebSocketCloseCode::MessageDecodeError, - "Your session encoding is set to MsgPack, but a text message was received.", - errorCode); + _server.close(hdl, WebSocketCloseCode::MessageDecodeError, + "Your session encoding is set to MsgPack, but a text message was received.", + errorCode); return; } try { incomingMessage = json::from_msgpack(payload); } catch (json::parse_error &e) { - _server.close( - hdl, - WebSocketCloseCode::MessageDecodeError, - std::string( - "Unable to decode MsgPack: ") + - e.what(), - errorCode); + _server.close(hdl, WebSocketCloseCode::MessageDecodeError, + std::string("Unable to decode MsgPack: ") + e.what(), errorCode); return; } } - blog_debug( - "[WebSocketServer::onMessage] Incoming message (decoded):\n%s", - incomingMessage.dump(2).c_str()); + blog_debug("[WebSocketServer::onMessage] Incoming message (decoded):\n%s", incomingMessage.dump(2).c_str()); ProcessResult ret; @@ -521,13 +436,10 @@ void WebSocketServer::onMessage( } // Disconnect client if 4.x protocol is detected - if (!session->IsIdentified() && - incomingMessage.contains("request-type")) { - blog(LOG_WARNING, - "[WebSocketServer::onMessage] Client %s appears to be running a pre-5.0.0 protocol.", + if (!session->IsIdentified() && incomingMessage.contains("request-type")) { + blog(LOG_WARNING, "[WebSocketServer::onMessage] Client %s appears to be running a pre-5.0.0 protocol.", session->RemoteAddress().c_str()); - ret.closeCode = - WebSocketCloseCode::UnsupportedRpcVersion; + ret.closeCode = WebSocketCloseCode::UnsupportedRpcVersion; ret.closeReason = "You appear to be attempting to connect with the pre-5.0.0 plugin protocol. Check to make sure your client is updated."; goto skipProcessing; @@ -540,43 +452,31 @@ void WebSocketServer::onMessage( goto skipProcessing; } - ProcessMessage(session, ret, incomingMessage["op"], - incomingMessage["d"]); + ProcessMessage(session, ret, incomingMessage["op"], incomingMessage["d"]); skipProcessing: if (ret.closeCode != WebSocketCloseCode::DontClose) { websocketpp::lib::error_code errorCode; - _server.close(hdl, ret.closeCode, ret.closeReason, - errorCode); + _server.close(hdl, ret.closeCode, ret.closeReason, errorCode); return; } if (!ret.result.is_null()) { websocketpp::lib::error_code errorCode; if (sessionEncoding == WebSocketEncoding::Json) { - std::string helloMessageJson = - ret.result.dump(); - _server.send(hdl, helloMessageJson, - websocketpp::frame::opcode::text, - errorCode); - } else if (sessionEncoding == - WebSocketEncoding::MsgPack) { + std::string helloMessageJson = ret.result.dump(); + _server.send(hdl, helloMessageJson, websocketpp::frame::opcode::text, errorCode); + } else if (sessionEncoding == WebSocketEncoding::MsgPack) { auto msgPackData = json::to_msgpack(ret.result); - std::string messageMsgPack(msgPackData.begin(), - msgPackData.end()); - _server.send(hdl, messageMsgPack, - websocketpp::frame::opcode::binary, - errorCode); + std::string messageMsgPack(msgPackData.begin(), msgPackData.end()); + _server.send(hdl, messageMsgPack, websocketpp::frame::opcode::binary, errorCode); } session->IncrementOutgoingMessages(); - blog_debug( - "[WebSocketServer::onMessage] Outgoing message:\n%s", - ret.result.dump(2).c_str()); + blog_debug("[WebSocketServer::onMessage] Outgoing message:\n%s", ret.result.dump(2).c_str()); if (errorCode) - blog(LOG_WARNING, - "[WebSocketServer::onMessage] Sending message to client failed: %s", + blog(LOG_WARNING, "[WebSocketServer::onMessage] Sending message to client failed: %s", errorCode.message().c_str()); } })); diff --git a/src/websocketserver/WebSocketServer.h b/src/websocketserver/WebSocketServer.h index baaafaef..651ee9b3 100644 --- a/src/websocketserver/WebSocketServer.h +++ b/src/websocketserver/WebSocketServer.h @@ -55,9 +55,7 @@ public: void Start(); void Stop(); void InvalidateSession(websocketpp::connection_hdl hdl); - void BroadcastEvent(uint64_t requiredIntent, - const std::string &eventType, - const json &eventData = nullptr, + void BroadcastEvent(uint64_t requiredIntent, const std::string &eventType, const json &eventData = nullptr, uint8_t rpcVersion = 0); bool IsListening() { return _server.is_listening(); } @@ -68,13 +66,11 @@ public: signals: void ClientConnected(WebSocketSessionState state); - void ClientDisconnected(WebSocketSessionState state, - uint16_t closeCode); + void ClientDisconnected(WebSocketSessionState state, uint16_t closeCode); private: struct ProcessResult { - WebSocketCloseCode::WebSocketCloseCode closeCode = - WebSocketCloseCode::DontClose; + WebSocketCloseCode::WebSocketCloseCode closeCode = WebSocketCloseCode::DontClose; std::string closeReason; json result; }; @@ -85,17 +81,10 @@ private: bool onValidate(websocketpp::connection_hdl hdl); void onOpen(websocketpp::connection_hdl hdl); void onClose(websocketpp::connection_hdl hdl); - void - onMessage(websocketpp::connection_hdl hdl, - websocketpp::server::message_ptr - message); + void onMessage(websocketpp::connection_hdl hdl, websocketpp::server::message_ptr message); - static void SetSessionParameters(SessionPtr session, - WebSocketServer::ProcessResult &ret, - const json &payloadData); - void ProcessMessage(SessionPtr session, ProcessResult &ret, - WebSocketOpCode::WebSocketOpCode opCode, - json &payloadData); + static void SetSessionParameters(SessionPtr session, WebSocketServer::ProcessResult &ret, const json &payloadData); + void ProcessMessage(SessionPtr session, ProcessResult &ret, WebSocketOpCode::WebSocketOpCode opCode, json &payloadData); QThreadPool _threadPool; @@ -106,7 +95,5 @@ private: std::string _authenticationSalt; std::mutex _sessionMutex; - std::map> - _sessions; + std::map> _sessions; }; diff --git a/src/websocketserver/WebSocketServer_Protocol.cpp b/src/websocketserver/WebSocketServer_Protocol.cpp index c7b92723..2b59b268 100644 --- a/src/websocketserver/WebSocketServer_Protocol.cpp +++ b/src/websocketserver/WebSocketServer_Protocol.cpp @@ -35,20 +35,16 @@ static bool IsSupportedRpcVersion(uint8_t requestedVersion) return (requestedVersion == 1); } -static json ConstructRequestResult(RequestResult requestResult, - const json &requestJson) +static json ConstructRequestResult(RequestResult requestResult, const json &requestJson) { json ret; ret["requestType"] = requestJson["requestType"]; - if (requestJson.contains("requestId") && - !requestJson["requestId"].is_null()) + if (requestJson.contains("requestId") && !requestJson["requestId"].is_null()) ret["requestId"] = requestJson["requestId"]; - ret["requestStatus"] = {{"result", requestResult.StatusCode == - RequestStatus::Success}, - {"code", requestResult.StatusCode}}; + ret["requestStatus"] = {{"result", requestResult.StatusCode == RequestStatus::Success}, {"code", requestResult.StatusCode}}; if (!requestResult.Comment.empty()) ret["requestStatus"]["comment"] = requestResult.Comment; @@ -59,37 +55,28 @@ static json ConstructRequestResult(RequestResult requestResult, return ret; } -void WebSocketServer::SetSessionParameters(SessionPtr session, - ProcessResult &ret, - const json &payloadData) +void WebSocketServer::SetSessionParameters(SessionPtr session, ProcessResult &ret, const json &payloadData) { if (payloadData.contains("eventSubscriptions")) { if (!payloadData["eventSubscriptions"].is_number_unsigned()) { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldType; - ret.closeReason = - "Your `eventSubscriptions` is not an unsigned number."; + ret.closeCode = WebSocketCloseCode::InvalidDataFieldType; + ret.closeReason = "Your `eventSubscriptions` is not an unsigned number."; return; } - session->SetEventSubscriptions( - payloadData["eventSubscriptions"]); + session->SetEventSubscriptions(payloadData["eventSubscriptions"]); } } -void WebSocketServer::ProcessMessage(SessionPtr session, - WebSocketServer::ProcessResult &ret, - WebSocketOpCode::WebSocketOpCode opCode, - json &payloadData) +void WebSocketServer::ProcessMessage(SessionPtr session, WebSocketServer::ProcessResult &ret, + WebSocketOpCode::WebSocketOpCode opCode, json &payloadData) { if (!payloadData.is_object()) { if (payloadData.is_null()) { ret.closeCode = WebSocketCloseCode::MissingDataField; ret.closeReason = "Your payload is missing data (`d`)."; } else { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldType; - ret.closeReason = - "Your payload's data (`d`) is not an object."; + ret.closeCode = WebSocketCloseCode::InvalidDataFieldType; + ret.closeReason = "Your payload's data (`d`) is not an object."; } return; } @@ -97,48 +84,37 @@ void WebSocketServer::ProcessMessage(SessionPtr session, // Only `Identify` is allowed when not identified if (!session->IsIdentified() && opCode != 1) { ret.closeCode = WebSocketCloseCode::NotIdentified; - ret.closeReason = - "You attempted to send a non-Identify message while not identified."; + ret.closeReason = "You attempted to send a non-Identify message while not identified."; return; } switch (opCode) { case WebSocketOpCode::Identify: { // Identify - std::unique_lock sessionLock( - session->OperationMutex); + std::unique_lock sessionLock(session->OperationMutex); if (session->IsIdentified()) { ret.closeCode = WebSocketCloseCode::AlreadyIdentified; - ret.closeReason = - "You are already Identified with the obs-websocket server."; + ret.closeReason = "You are already Identified with the obs-websocket server."; return; } if (session->AuthenticationRequired()) { if (!payloadData.contains("authentication")) { - ret.closeCode = - WebSocketCloseCode::AuthenticationFailed; + ret.closeCode = WebSocketCloseCode::AuthenticationFailed; ret.closeReason = "Your payload's data is missing an `authentication` string, however authentication is required."; return; } - if (!Utils::Crypto::CheckAuthenticationString( - session->Secret(), session->Challenge(), - payloadData["authentication"])) { + if (!Utils::Crypto::CheckAuthenticationString(session->Secret(), session->Challenge(), + payloadData["authentication"])) { auto conf = GetConfig(); if (conf && conf->AlertsEnabled) { - QString title = obs_module_text( - "OBSWebSocket.TrayNotification.AuthenticationFailed.Title"); + QString title = obs_module_text("OBSWebSocket.TrayNotification.AuthenticationFailed.Title"); QString body = - QString(obs_module_text( - "OBSWebSocket.TrayNotification.AuthenticationFailed.Body")) - .arg(QString::fromStdString( - session->RemoteAddress())); - Utils::Platform::SendTrayNotification( - QSystemTrayIcon::Warning, title, - body); + QString(obs_module_text("OBSWebSocket.TrayNotification.AuthenticationFailed.Body")) + .arg(QString::fromStdString(session->RemoteAddress())); + Utils::Platform::SendTrayNotification(QSystemTrayIcon::Warning, title, body); } - ret.closeCode = - WebSocketCloseCode::AuthenticationFailed; + ret.closeCode = WebSocketCloseCode::AuthenticationFailed; ret.closeReason = "Authentication failed."; return; } @@ -146,24 +122,19 @@ void WebSocketServer::ProcessMessage(SessionPtr session, if (!payloadData.contains("rpcVersion")) { ret.closeCode = WebSocketCloseCode::MissingDataField; - ret.closeReason = - "Your payload's data is missing an `rpcVersion`."; + ret.closeReason = "Your payload's data is missing an `rpcVersion`."; return; } if (!payloadData["rpcVersion"].is_number_unsigned()) { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldType; - ret.closeReason = - "Your `rpcVersion` is not an unsigned number."; + ret.closeCode = WebSocketCloseCode::InvalidDataFieldType; + ret.closeReason = "Your `rpcVersion` is not an unsigned number."; } uint8_t requestedRpcVersion = payloadData["rpcVersion"]; if (!IsSupportedRpcVersion(requestedRpcVersion)) { - ret.closeCode = - WebSocketCloseCode::UnsupportedRpcVersion; - ret.closeReason = - "Your requested RPC version is not supported by this server."; + ret.closeCode = WebSocketCloseCode::UnsupportedRpcVersion; + ret.closeReason = "Your requested RPC version is not supported by this server."; return; } session->SetRpcVersion(requestedRpcVersion); @@ -175,8 +146,7 @@ void WebSocketServer::ProcessMessage(SessionPtr session, // Increment refs for event subscriptions auto eventHandler = GetEventHandler(); - eventHandler->ProcessSubscription( - session->EventSubscriptions()); + eventHandler->ProcessSubscription(session->EventSubscriptions()); // Mark session as identified session->SetIsIdentified(true); @@ -184,15 +154,10 @@ void WebSocketServer::ProcessMessage(SessionPtr session, // Send desktop notification. TODO: Move to UI code auto conf = GetConfig(); if (conf && conf->AlertsEnabled) { - QString title = obs_module_text( - "OBSWebSocket.TrayNotification.Identified.Title"); - QString body = - QString(obs_module_text( - "OBSWebSocket.TrayNotification.Identified.Body")) - .arg(QString::fromStdString( - session->RemoteAddress())); - Utils::Platform::SendTrayNotification( - QSystemTrayIcon::Information, title, body); + QString title = obs_module_text("OBSWebSocket.TrayNotification.Identified.Title"); + QString body = QString(obs_module_text("OBSWebSocket.TrayNotification.Identified.Body")) + .arg(QString::fromStdString(session->RemoteAddress())); + Utils::Platform::SendTrayNotification(QSystemTrayIcon::Information, title, body); } ret.result["op"] = WebSocketOpCode::Identified; @@ -200,13 +165,11 @@ void WebSocketServer::ProcessMessage(SessionPtr session, } return; case WebSocketOpCode::Reidentify: { // Reidentify - std::unique_lock sessionLock( - session->OperationMutex); + std::unique_lock sessionLock(session->OperationMutex); // Decrement refs for current subscriptions auto eventHandler = GetEventHandler(); - eventHandler->ProcessUnsubscription( - session->EventSubscriptions()); + eventHandler->ProcessUnsubscription(session->EventSubscriptions()); SetSessionParameters(session, ret, payloadData); if (ret.closeCode != WebSocketCloseCode::DontClose) { @@ -214,8 +177,7 @@ void WebSocketServer::ProcessMessage(SessionPtr session, } // Increment refs for new subscriptions - eventHandler->ProcessSubscription( - session->EventSubscriptions()); + eventHandler->ProcessSubscription(session->EventSubscriptions()); ret.result["op"] = WebSocketOpCode::Identified; ret.result["d"]["negotiatedRpcVersion"] = session->RpcVersion(); @@ -225,31 +187,24 @@ void WebSocketServer::ProcessMessage(SessionPtr session, // RequestID checking has to be done here where we are able to close the connection. if (!payloadData.contains("requestId")) { ret.closeCode = WebSocketCloseCode::MissingDataField; - ret.closeReason = - "Your payload data is missing a `requestId`."; + ret.closeReason = "Your payload data is missing a `requestId`."; return; } RequestHandler requestHandler(session); - Request request(payloadData["requestType"], - payloadData["requestData"]); + Request request(payloadData["requestType"], payloadData["requestData"]); - RequestResult requestResult = - requestHandler.ProcessRequest(request); + RequestResult requestResult = requestHandler.ProcessRequest(request); json resultPayloadData; resultPayloadData["requestType"] = payloadData["requestType"]; resultPayloadData["requestId"] = payloadData["requestId"]; - resultPayloadData["requestStatus"] = { - {"result", - requestResult.StatusCode == RequestStatus::Success}, - {"code", requestResult.StatusCode}}; + resultPayloadData["requestStatus"] = {{"result", requestResult.StatusCode == RequestStatus::Success}, + {"code", requestResult.StatusCode}}; if (!requestResult.Comment.empty()) - resultPayloadData["requestStatus"]["comment"] = - requestResult.Comment; + resultPayloadData["requestStatus"]["comment"] = requestResult.Comment; if (requestResult.ResponseData.is_object()) - resultPayloadData["responseData"] = - requestResult.ResponseData; + resultPayloadData["responseData"] = requestResult.ResponseData; ret.result["op"] = WebSocketOpCode::RequestResponse; ret.result["d"] = resultPayloadData; } @@ -258,95 +213,68 @@ void WebSocketServer::ProcessMessage(SessionPtr session, // RequestID checking has to be done here where we are able to close the connection. if (!payloadData.contains("requestId")) { ret.closeCode = WebSocketCloseCode::MissingDataField; - ret.closeReason = - "Your payload data is missing a `requestId`."; + ret.closeReason = "Your payload data is missing a `requestId`."; return; } if (!payloadData.contains("requests")) { ret.closeCode = WebSocketCloseCode::MissingDataField; - ret.closeReason = - "Your payload data is missing a `requests`."; + ret.closeReason = "Your payload data is missing a `requests`."; return; } if (!payloadData["requests"].is_array()) { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldType; + ret.closeCode = WebSocketCloseCode::InvalidDataFieldType; ret.closeReason = "Your `requests` is not an array."; return; } - RequestBatchExecutionType::RequestBatchExecutionType - executionType = - RequestBatchExecutionType::SerialRealtime; - if (payloadData.contains("executionType") && - !payloadData["executionType"].is_null()) { + RequestBatchExecutionType::RequestBatchExecutionType executionType = RequestBatchExecutionType::SerialRealtime; + if (payloadData.contains("executionType") && !payloadData["executionType"].is_null()) { if (!payloadData["executionType"].is_number_unsigned()) { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldType; - ret.closeReason = - "Your `executionType` is not a number."; + ret.closeCode = WebSocketCloseCode::InvalidDataFieldType; + ret.closeReason = "Your `executionType` is not a number."; return; } - int8_t requestedExecutionType = - payloadData["executionType"]; - if (!RequestBatchExecutionType::IsValid( - requestedExecutionType) || - requestedExecutionType == - RequestBatchExecutionType::None) { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldValue; - ret.closeReason = - "Your `executionType` has an invalid value."; + int8_t requestedExecutionType = payloadData["executionType"]; + if (!RequestBatchExecutionType::IsValid(requestedExecutionType) || + requestedExecutionType == RequestBatchExecutionType::None) { + ret.closeCode = WebSocketCloseCode::InvalidDataFieldValue; + ret.closeReason = "Your `executionType` has an invalid value."; return; } // The thread pool must support 2 or more threads else parallel requests will deadlock. - if (requestedExecutionType == - RequestBatchExecutionType::Parallel && - _threadPool.maxThreadCount() < 2) { - ret.closeCode = - WebSocketCloseCode::UnsupportedFeature; + if (requestedExecutionType == RequestBatchExecutionType::Parallel && _threadPool.maxThreadCount() < 2) { + ret.closeCode = WebSocketCloseCode::UnsupportedFeature; ret.closeReason = "Parallel request batch processing is not available on this system due to limited core count."; return; } - executionType = (RequestBatchExecutionType:: - RequestBatchExecutionType) - requestedExecutionType; + executionType = (RequestBatchExecutionType::RequestBatchExecutionType)requestedExecutionType; } - if (payloadData.contains("variables") && - !payloadData["variables"].is_null()) { + if (payloadData.contains("variables") && !payloadData["variables"].is_null()) { if (!payloadData.is_object()) { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldType; - ret.closeReason = - "Your `variables` is not an object."; + ret.closeCode = WebSocketCloseCode::InvalidDataFieldType; + ret.closeReason = "Your `variables` is not an object."; return; } - if (executionType == - RequestBatchExecutionType::Parallel) { - ret.closeCode = - WebSocketCloseCode::UnsupportedFeature; - ret.closeReason = - "Variables are not supported in Parallel mode."; + if (executionType == RequestBatchExecutionType::Parallel) { + ret.closeCode = WebSocketCloseCode::UnsupportedFeature; + ret.closeReason = "Variables are not supported in Parallel mode."; return; } } bool haltOnFailure = false; - if (payloadData.contains("haltOnFailure") && - !payloadData["haltOnFailure"].is_null()) { + if (payloadData.contains("haltOnFailure") && !payloadData["haltOnFailure"].is_null()) { if (!payloadData["haltOnFailure"].is_boolean()) { - ret.closeCode = - WebSocketCloseCode::InvalidDataFieldType; - ret.closeReason = - "Your `haltOnFailure` is not a boolean."; + ret.closeCode = WebSocketCloseCode::InvalidDataFieldType; + ret.closeReason = "Your `haltOnFailure` is not a boolean."; return; } @@ -357,21 +285,16 @@ void WebSocketServer::ProcessMessage(SessionPtr session, std::vector requestsVector; for (auto &requestJson : requests) - requestsVector.emplace_back( - requestJson["requestType"], - requestJson["requestData"], executionType, - requestJson["inputVariables"], - requestJson["outputVariables"]); + requestsVector.emplace_back(requestJson["requestType"], requestJson["requestData"], executionType, + requestJson["inputVariables"], requestJson["outputVariables"]); - auto resultsVector = RequestBatchHandler::ProcessRequestBatch( - _threadPool, session, executionType, requestsVector, - payloadData["variables"], haltOnFailure); + auto resultsVector = RequestBatchHandler::ProcessRequestBatch(_threadPool, session, executionType, requestsVector, + payloadData["variables"], haltOnFailure); size_t i = 0; std::vector results; for (auto &requestResult : resultsVector) { - results.push_back(ConstructRequestResult(requestResult, - requests[i])); + results.push_back(ConstructRequestResult(requestResult, requests[i])); i++; } @@ -382,16 +305,14 @@ void WebSocketServer::ProcessMessage(SessionPtr session, return; default: ret.closeCode = WebSocketCloseCode::UnknownOpCode; - ret.closeReason = std::string("Unknown OpCode: ") + - std::to_string(opCode); + ret.closeReason = std::string("Unknown OpCode: ") + std::to_string(opCode); return; } } // It isn't consistent to directly call the WebSocketServer from the events system, but it would also be dumb to make it unnecessarily complicated. -void WebSocketServer::BroadcastEvent(uint64_t requiredIntent, - const std::string &eventType, - const json &eventData, uint8_t rpcVersion) +void WebSocketServer::BroadcastEvent(uint64_t requiredIntent, const std::string &eventType, const json &eventData, + uint8_t rpcVersion) { if (!_server.is_listening()) return; @@ -415,57 +336,37 @@ void WebSocketServer::BroadcastEvent(uint64_t requiredIntent, if (!it.second->IsIdentified()) { continue; } - if (rpcVersion && - it.second->RpcVersion() != rpcVersion) { + if (rpcVersion && it.second->RpcVersion() != rpcVersion) { continue; } - if ((it.second->EventSubscriptions() & - requiredIntent) != 0) { + if ((it.second->EventSubscriptions() & requiredIntent) != 0) { websocketpp::lib::error_code errorCode; switch (it.second->Encoding()) { case WebSocketEncoding::Json: if (messageJson.empty()) { - messageJson = - eventMessage.dump(); + messageJson = eventMessage.dump(); } - _server.send( - (websocketpp::connection_hdl) - it.first, - messageJson, - websocketpp::frame::opcode::text, - errorCode); + _server.send((websocketpp::connection_hdl)it.first, messageJson, + websocketpp::frame::opcode::text, errorCode); it.second->IncrementOutgoingMessages(); break; case WebSocketEncoding::MsgPack: if (messageMsgPack.empty()) { - auto msgPackData = - json::to_msgpack( - eventMessage); - messageMsgPack = std::string( - msgPackData.begin(), - msgPackData.end()); + auto msgPackData = json::to_msgpack(eventMessage); + messageMsgPack = std::string(msgPackData.begin(), msgPackData.end()); } - _server.send( - (websocketpp::connection_hdl) - it.first, - messageMsgPack, - websocketpp::frame::opcode::binary, - errorCode); + _server.send((websocketpp::connection_hdl)it.first, messageMsgPack, + websocketpp::frame::opcode::binary, errorCode); it.second->IncrementOutgoingMessages(); break; } if (errorCode) - blog(LOG_ERROR, - "[WebSocketServer::BroadcastEvent] Error sending event message: %s", + blog(LOG_ERROR, "[WebSocketServer::BroadcastEvent] Error sending event message: %s", errorCode.message().c_str()); } } lock.unlock(); - if (IsDebugEnabled() && - (EventSubscription::All & requiredIntent) != - 0) // Don't log high volume events - blog(LOG_INFO, - "[WebSocketServer::BroadcastEvent] Outgoing event:\n%s", - eventMessage.dump(2).c_str()); + if (IsDebugEnabled() && (EventSubscription::All & requiredIntent) != 0) // Don't log high volume events + blog(LOG_INFO, "[WebSocketServer::BroadcastEvent] Outgoing event:\n%s", eventMessage.dump(2).c_str()); })); }