From 85a52ab01f74169b75343733a0b8626547d6c0d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Fri, 19 Oct 2018 18:22:34 +0200 Subject: [PATCH] general: convert indents to tabs --- .editorconfig | 9 + CI/build-macos.sh | 12 +- CI/generate-docs.sh | 8 +- CI/install-build-obs-macos.sh | 4 +- CI/install-build-obs.cmd | 128 +-- CI/macos/qt.rb | 294 ++--- installer/installer.iss | 14 +- src/Config.cpp | 216 ++-- src/Config.h | 50 +- src/Utils.cpp | 646 +++++------ src/Utils.h | 70 +- src/WSEvents.cpp | 708 ++++++------ src/WSEvents.h | 110 +- src/WSRequestHandler.cpp | 262 ++--- src/WSRequestHandler.h | 166 +-- src/WSRequestHandler_General.cpp | 130 +-- src/WSRequestHandler_Profiles.cpp | 46 +- src/WSRequestHandler_Recording.cpp | 62 +- src/WSRequestHandler_ReplayBuffer.cpp | 64 +- src/WSRequestHandler_SceneCollections.cpp | 46 +- src/WSRequestHandler_Scenes.cpp | 50 +- src/WSRequestHandler_Sources.cpp | 1212 ++++++++++----------- src/WSRequestHandler_Streaming.cpp | 272 ++--- src/WSRequestHandler_StudioMode.cpp | 130 +-- src/WSRequestHandler_Transitions.cpp | 88 +- src/WSServer.cpp | 180 +-- src/WSServer.h | 34 +- src/forms/settings-dialog.cpp | 94 +- src/forms/settings-dialog.h | 16 +- src/forms/settings-dialog.ui | 284 ++--- src/obs-websocket.cpp | 50 +- src/obs-websocket.h | 2 +- 32 files changed, 2733 insertions(+), 2724 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..9d1d51a1 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +[*] +insert_final_newline = true + +[*.{c,cpp,h,hpp}] +indent_style = tab + +[*.{yml,yaml}] +indent_style = space +indent_size = 2 diff --git a/CI/build-macos.sh b/CI/build-macos.sh index 8419995d..91d2b48f 100755 --- a/CI/build-macos.sh +++ b/CI/build-macos.sh @@ -5,10 +5,10 @@ set -ex mkdir -p build && cd build cmake .. \ - -DQTDIR=/usr/local/opt/qt \ - -DLIBOBS_INCLUDE_DIR=../../obs-studio/libobs \ - -DLIBOBS_LIB=../../obs-studio/libobs \ - -DOBS_FRONTEND_LIB="$(pwd)/../../obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_INSTALL_PREFIX=/usr \ + -DQTDIR=/usr/local/opt/qt \ + -DLIBOBS_INCLUDE_DIR=../../obs-studio/libobs \ + -DLIBOBS_LIB=../../obs-studio/libobs \ + -DOBS_FRONTEND_LIB="$(pwd)/../../obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_PREFIX=/usr \ && make -j4 diff --git a/CI/generate-docs.sh b/CI/generate-docs.sh index 4d4fa530..e7840c90 100755 --- a/CI/generate-docs.sh +++ b/CI/generate-docs.sh @@ -11,13 +11,13 @@ npm run build echo "-- Documentation successfully generated." if git diff --quiet; then - echo "-- No documentation changes to commit." - exit 0 + echo "-- No documentation changes to commit." + exit 0 fi if [ "$TRAVIS_PULL_REQUEST" != "false" -o "$TRAVIS_BRANCH" != "4.3-maintenance" ]; then - echo "-- Skipping documentation deployment because this is either a pull request or a non-master branch." - exit 0 + echo "-- Skipping documentation deployment because this is either a pull request or a non-master branch." + exit 0 fi REMOTE_URL="$(git config remote.origin.url)" diff --git a/CI/install-build-obs-macos.sh b/CI/install-build-obs-macos.sh index f1ef3be1..387b9a4b 100755 --- a/CI/install-build-obs-macos.sh +++ b/CI/install-build-obs-macos.sh @@ -9,6 +9,6 @@ OBSLatestTag=$(git describe --tags --abbrev=0) git checkout $OBSLatestTag mkdir build && cd build cmake .. \ - -DDISABLE_PLUGINS=true \ - -DCMAKE_PREFIX_PATH=/usr/local/opt/qt/lib/cmake \ + -DDISABLE_PLUGINS=true \ + -DCMAKE_PREFIX_PATH=/usr/local/opt/qt/lib/cmake \ && make -j4 diff --git a/CI/install-build-obs.cmd b/CI/install-build-obs.cmd index a0748a85..865ef352 100644 --- a/CI/install-build-obs.cmd +++ b/CI/install-build-obs.cmd @@ -19,63 +19,63 @@ set "BuildOBS=" REM Check the last tag successfully built by CI. if exist C:\projects\obs-studio-last-tag-built.txt ( - set /p OBSLastTagBuilt= C:\projects\latest-obs-studio-tag-pre-pull.txt - set /p OBSLatestTagPrePull= C:\projects\latest-obs-studio-tag-post-pull.txt - set /p OBSLatestTagPostPull= C:\projects\latest-obs-studio-tag.txt + echo obs-studio directory exists + echo Updating tag info + cd C:\projects\obs-studio\ + git describe --tags --abbrev=0 > C:\projects\latest-obs-studio-tag-pre-pull.txt + set /p OBSLatestTagPrePull= C:\projects\latest-obs-studio-tag-post-pull.txt + set /p OBSLatestTagPostPull= C:\projects\latest-obs-studio-tag.txt ) REM Check the obs-studio tags for mismatches. REM If a new tag was pulled, set the build flag. if not %OBSLatestTagPrePull%==%OBSLatestTagPostPull% ( - echo Latest tag pre-pull: %OBSLatestTagPrePull% - echo Latest tag post-pull: %OBSLatestTagPostPull% - echo Tags do not match. Need to rebuild OBS. - set BuildOBS=true + echo Latest tag pre-pull: %OBSLatestTagPrePull% + echo Latest tag post-pull: %OBSLatestTagPostPull% + echo Tags do not match. Need to rebuild OBS. + set BuildOBS=true ) REM If the latest git tag doesn't match the last built tag, set the build flag. if not %OBSLatestTagPostPull%==%OBSLastTagBuilt% ( - echo Last built OBS tag: %OBSLastTagBuilt% - echo Latest tag post-pull: %OBSLatestTagPostPull% - echo Tags do not match. Need to rebuild OBS. - set BuildOBS=true + echo Last built OBS tag: %OBSLastTagBuilt% + echo Latest tag post-pull: %OBSLatestTagPostPull% + echo Tags do not match. Need to rebuild OBS. + set BuildOBS=true ) REM If obs-studio directory does not exist, clone the git repo, get the latest REM tag number, and set the build flag. if not exist C:\projects\obs-studio ( - echo obs-studio directory does not exist - git clone https://github.com/obsproject/obs-studio - cd C:\projects\obs-studio\ - git describe --tags --abbrev=0 > C:\projects\obs-studio-latest-tag.txt - set /p OBSLatestTag= C:\projects\obs-studio-latest-tag.txt + set /p OBSLatestTag= C:\projects\obs-studio-last-tag-built.txt - set /p OBSLastTagBuilt= C:\projects\obs-studio-last-tag-built.txt + set /p OBSLastTagBuilt= "5.10", :shallow => false + desc "Cross-platform application and UI framework" + homepage "https://www.qt.io/" + url "https://download.qt.io/official_releases/qt/5.10/5.10.0/single/qt-everywhere-src-5.10.0.tar.xz" + mirror "https://www.mirrorservice.org/sites/download.qt-project.org/official_releases/qt/5.10/5.10.0/single/qt-everywhere-opensource-src-5.10.0.tar.xz" + sha256 "936d4cf5d577298f4f9fdb220e85b008ae321554a5fcd38072dc327a7296230e" + head "https://code.qt.io/qt/qt5.git", :branch => "5.10", :shallow => false - bottle do - sha256 "332ab2f3eb7c13510f460c13d28a562db03297149a3615feb9e3d467fafde56c" => :high_sierra - sha256 "c93cf6ead1774cfa7a369c92c7d6a69154bc0dd5b48a0e7ddf3a78202c4a3dc5" => :sierra - sha256 "44425e23d8b9c2b8b2f50d850ca94dcd411cd89e20e057c8d6505c9056d06328" => :el_capitan - end + bottle do + sha256 "332ab2f3eb7c13510f460c13d28a562db03297149a3615feb9e3d467fafde56c" => :high_sierra + sha256 "c93cf6ead1774cfa7a369c92c7d6a69154bc0dd5b48a0e7ddf3a78202c4a3dc5" => :sierra + sha256 "44425e23d8b9c2b8b2f50d850ca94dcd411cd89e20e057c8d6505c9056d06328" => :el_capitan + end - keg_only "Qt 5 has CMake issues when linked" + keg_only "Qt 5 has CMake issues when linked" - option "with-docs", "Build documentation" - option "with-examples", "Build examples" + option "with-docs", "Build documentation" + option "with-examples", "Build examples" - deprecated_option "with-mysql" => "with-mysql-client" + deprecated_option "with-mysql" => "with-mysql-client" - # OS X 10.7 Lion is still supported in Qt 5.5, but is no longer a reference - # configuration and thus untested in practice. Builds on OS X 10.7 have been - # reported to fail: . - depends_on :macos => :mountain_lion + # OS X 10.7 Lion is still supported in Qt 5.5, but is no longer a reference + # configuration and thus untested in practice. Builds on OS X 10.7 have been + # reported to fail: . + depends_on :macos => :mountain_lion - depends_on "pkg-config" => :build - depends_on :xcode => :build - depends_on "mysql-client" => :optional - depends_on "postgresql" => :optional + depends_on "pkg-config" => :build + depends_on :xcode => :build + depends_on "mysql-client" => :optional + depends_on "postgresql" => :optional - # Restore `.pc` files for framework-based build of Qt 5 on OS X. This - # partially reverts merged - # between the 5.5.1 and 5.6.0 releases. (Remove this as soon as feasible!) - # - # Core formulae known to fail without this patch (as of 2016-10-15): - # * gnuplot (with `--with-qt` option) - # * mkvtoolnix (with `--with-qt` option, silent build failure) - # * poppler (with `--with-qt` option) - patch do - url "https://raw.githubusercontent.com/Homebrew/formula-patches/e8fe6567/qt5/restore-pc-files.patch" - sha256 "48ff18be2f4050de7288bddbae7f47e949512ac4bcd126c2f504be2ac701158b" - end + # Restore `.pc` files for framework-based build of Qt 5 on OS X. This + # partially reverts merged + # between the 5.5.1 and 5.6.0 releases. (Remove this as soon as feasible!) + # + # Core formulae known to fail without this patch (as of 2016-10-15): + # * gnuplot (with `--with-qt` option) + # * mkvtoolnix (with `--with-qt` option, silent build failure) + # * poppler (with `--with-qt` option) + patch do + url "https://raw.githubusercontent.com/Homebrew/formula-patches/e8fe6567/qt5/restore-pc-files.patch" + sha256 "48ff18be2f4050de7288bddbae7f47e949512ac4bcd126c2f504be2ac701158b" + end - # Fix compile error on macOS 10.13 around QFixed: - # https://github.com/Homebrew/homebrew-core/issues/27095 - # https://bugreports.qt.io/browse/QTBUG-67545 - patch do - url "https://raw.githubusercontent.com/z00m1n/formula-patches/0de0e229/qt/QTBUG-67545.patch" - sha256 "4a115097c7582c7dce4207f5500d13feb8c990eb8a05a43f41953985976ebe6c" - end + # Fix compile error on macOS 10.13 around QFixed: + # https://github.com/Homebrew/homebrew-core/issues/27095 + # https://bugreports.qt.io/browse/QTBUG-67545 + patch do + url "https://raw.githubusercontent.com/z00m1n/formula-patches/0de0e229/qt/QTBUG-67545.patch" + sha256 "4a115097c7582c7dce4207f5500d13feb8c990eb8a05a43f41953985976ebe6c" + end - # Fix compile error on macOS 10.13 caused by qtlocation dependency - # mapbox-gl-native using Boost 1.62.0 does not build with C++ 17: - # https://github.com/Homebrew/homebrew-core/issues/27095 - # https://bugreports.qt.io/browse/QTBUG-67810 - patch do - url "https://raw.githubusercontent.com/z00m1n/formula-patches/a1a1f0dd/qt/QTBUG-67810.patch" - sha256 "8ee0bf71df1043f08ebae3aa35036be29c4d9ebff8a27e3b0411a6bd635e9382" - end + # Fix compile error on macOS 10.13 caused by qtlocation dependency + # mapbox-gl-native using Boost 1.62.0 does not build with C++ 17: + # https://github.com/Homebrew/homebrew-core/issues/27095 + # https://bugreports.qt.io/browse/QTBUG-67810 + patch do + url "https://raw.githubusercontent.com/z00m1n/formula-patches/a1a1f0dd/qt/QTBUG-67810.patch" + sha256 "8ee0bf71df1043f08ebae3aa35036be29c4d9ebff8a27e3b0411a6bd635e9382" + end - # Remove for > 5.10.0 - # Fix "error: 'loadFileURL:allowingReadAccessToURL:' is only available on - # macOS 10.11 or newer [-Werror,-Wunguarded-availability]" - # Reported 8 Dec 2017 https://bugreports.qt.io/browse/QTBUG-65075 - # Equivalent to upstream fix from 8 Dec 2017 https://codereview.qt-project.org/#/c/213993/ - if MacOS::Xcode.version >= "9.0" - patch do - url "https://raw.githubusercontent.com/Homebrew/formula-patches/9c97726e2b153099049326ade23fe24b52b778fe/qt/QTBUG-65075.diff" - sha256 "a51595868c6173ab53463107e0ee3355576002c32ab80897587c3607589cfd22" - end - end + # Remove for > 5.10.0 + # Fix "error: 'loadFileURL:allowingReadAccessToURL:' is only available on + # macOS 10.11 or newer [-Werror,-Wunguarded-availability]" + # Reported 8 Dec 2017 https://bugreports.qt.io/browse/QTBUG-65075 + # Equivalent to upstream fix from 8 Dec 2017 https://codereview.qt-project.org/#/c/213993/ + if MacOS::Xcode.version >= "9.0" + patch do + url "https://raw.githubusercontent.com/Homebrew/formula-patches/9c97726e2b153099049326ade23fe24b52b778fe/qt/QTBUG-65075.diff" + sha256 "a51595868c6173ab53463107e0ee3355576002c32ab80897587c3607589cfd22" + end + end - def install - args = %W[ - -verbose - -prefix #{prefix} - -release - -opensource -confirm-license - -system-zlib - -qt-libpng - -qt-libjpeg - -qt-freetype - -qt-pcre - -nomake tests - -no-rpath - -pkg-config - -dbus-runtime - -no-assimp - ] + def install + args = %W[ + -verbose + -prefix #{prefix} + -release + -opensource -confirm-license + -system-zlib + -qt-libpng + -qt-libjpeg + -qt-freetype + -qt-pcre + -nomake tests + -no-rpath + -pkg-config + -dbus-runtime + -no-assimp + ] - args << "-nomake" << "examples" if build.without? "examples" + args << "-nomake" << "examples" if build.without? "examples" - if build.with? "mysql-client" - args << "-plugin-sql-mysql" - (buildpath/"brew_shim/mysql_config").write <<~EOS - #!/bin/sh - if [ x"$1" = x"--libs" ]; then - mysql_config --libs | sed "s/-lssl -lcrypto//" - else - exec mysql_config "$@" - fi - EOS - chmod 0755, "brew_shim/mysql_config" - args << "-mysql_config" << buildpath/"brew_shim/mysql_config" - end + if build.with? "mysql-client" + args << "-plugin-sql-mysql" + (buildpath/"brew_shim/mysql_config").write <<~EOS + #!/bin/sh + if [ x"$1" = x"--libs" ]; then + mysql_config --libs | sed "s/-lssl -lcrypto//" + else + exec mysql_config "$@" + fi + EOS + chmod 0755, "brew_shim/mysql_config" + args << "-mysql_config" << buildpath/"brew_shim/mysql_config" + end - args << "-plugin-sql-psql" if build.with? "postgresql" + args << "-plugin-sql-psql" if build.with? "postgresql" - system "./configure", *args - system "make" - ENV.deparallelize - system "make", "install" + system "./configure", *args + system "make" + ENV.deparallelize + system "make", "install" - if build.with? "docs" - system "make", "docs" - system "make", "install_docs" - end + if build.with? "docs" + system "make", "docs" + system "make", "install_docs" + end - # Some config scripts will only find Qt in a "Frameworks" folder - frameworks.install_symlink Dir["#{lib}/*.framework"] + # Some config scripts will only find Qt in a "Frameworks" folder + frameworks.install_symlink Dir["#{lib}/*.framework"] - # The pkg-config files installed suggest that headers can be found in the - # `include` directory. Make this so by creating symlinks from `include` to - # the Frameworks' Headers folders. - Pathname.glob("#{lib}/*.framework/Headers") do |path| - include.install_symlink path => path.parent.basename(".framework") - end + # The pkg-config files installed suggest that headers can be found in the + # `include` directory. Make this so by creating symlinks from `include` to + # the Frameworks' Headers folders. + Pathname.glob("#{lib}/*.framework/Headers") do |path| + include.install_symlink path => path.parent.basename(".framework") + end - # Move `*.app` bundles into `libexec` to expose them to `brew linkapps` and - # because we don't like having them in `bin`. - # (Note: This move breaks invocation of Assistant via the Help menu - # of both Designer and Linguist as that relies on Assistant being in `bin`.) - libexec.mkpath - Pathname.glob("#{bin}/*.app") { |app| mv app, libexec } - end + # Move `*.app` bundles into `libexec` to expose them to `brew linkapps` and + # because we don't like having them in `bin`. + # (Note: This move breaks invocation of Assistant via the Help menu + # of both Designer and Linguist as that relies on Assistant being in `bin`.) + libexec.mkpath + Pathname.glob("#{bin}/*.app") { |app| mv app, libexec } + end - def caveats; <<~EOS - We agreed to the Qt opensource license for you. - If this is unacceptable you should uninstall. - EOS - end + def caveats; <<~EOS + We agreed to the Qt opensource license for you. + If this is unacceptable you should uninstall. + EOS + end - test do - (testpath/"hello.pro").write <<~EOS - QT += core - QT -= gui - TARGET = hello - CONFIG += console - CONFIG -= app_bundle - TEMPLATE = app - SOURCES += main.cpp - EOS + test do + (testpath/"hello.pro").write <<~EOS + QT += core + QT -= gui + TARGET = hello + CONFIG += console + CONFIG -= app_bundle + TEMPLATE = app + SOURCES += main.cpp + EOS - (testpath/"main.cpp").write <<~EOS - #include - #include + (testpath/"main.cpp").write <<~EOS + #include + #include - int main(int argc, char *argv[]) - { - QCoreApplication a(argc, argv); - qDebug() << "Hello World!"; - return 0; - } - EOS + int main(int argc, char *argv[]) + { + QCoreApplication a(argc, argv); + qDebug() << "Hello World!"; + return 0; + } + EOS - system bin/"qmake", testpath/"hello.pro" - system "make" - assert_predicate testpath/"hello", :exist? - assert_predicate testpath/"main.o", :exist? - system "./hello" - end + system bin/"qmake", testpath/"hello.pro" + system "make" + assert_predicate testpath/"hello", :exist? + assert_predicate testpath/"main.o", :exist? + system "./hello" + end end diff --git a/installer/installer.iss b/installer/installer.iss index c42af50f..e5a6d3f5 100644 --- a/installer/installer.iss +++ b/installer/installer.iss @@ -42,13 +42,13 @@ Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" // following function come from https://github.com/Xaymar/obs-studio_amf-encoder-plugin/blob/master/%23Resources/Installer.in.iss#L45 function GetDirName(Value: string): string; var - InstallPath: string; + InstallPath: string; begin - // initialize default path, which will be returned when the following registry - // key queries fail due to missing keys or for some different reason - Result := '{pf}\obs-studio'; - // query the first registry value; if this succeeds, return the obtained value - if RegQueryStringValue(HKLM32, 'SOFTWARE\OBS Studio', '', InstallPath) then - Result := InstallPath + // initialize default path, which will be returned when the following registry + // key queries fail due to missing keys or for some different reason + Result := '{pf}\obs-studio'; + // query the first registry value; if this succeeds, return the obtained value + if RegQueryStringValue(HKLM32, 'SOFTWARE\OBS Studio', '', InstallPath) then + Result := InstallPath end; diff --git a/src/Config.cpp b/src/Config.cpp index b5e1b7a1..e9ba8487 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -39,158 +39,158 @@ with this program. If not, see Config* Config::_instance = new Config(); Config::Config() : - ServerEnabled(true), - ServerPort(4444), - DebugEnabled(false), - AlertsEnabled(true), - AuthRequired(false), - Secret(""), - Salt(""), - SettingsLoaded(false) + ServerEnabled(true), + ServerPort(4444), + DebugEnabled(false), + AlertsEnabled(true), + AuthRequired(false), + Secret(""), + Salt(""), + SettingsLoaded(false) { - // OBS Config defaults - config_t* obsConfig = obs_frontend_get_global_config(); - if (obsConfig) { - config_set_default_bool(obsConfig, - SECTION_NAME, PARAM_ENABLE, ServerEnabled); - config_set_default_uint(obsConfig, - SECTION_NAME, PARAM_PORT, ServerPort); + // OBS Config defaults + config_t* obsConfig = obs_frontend_get_global_config(); + if (obsConfig) { + config_set_default_bool(obsConfig, + SECTION_NAME, PARAM_ENABLE, ServerEnabled); + config_set_default_uint(obsConfig, + SECTION_NAME, PARAM_PORT, ServerPort); - config_set_default_bool(obsConfig, - SECTION_NAME, PARAM_DEBUG, DebugEnabled); - config_set_default_bool(obsConfig, - SECTION_NAME, PARAM_ALERT, AlertsEnabled); + config_set_default_bool(obsConfig, + SECTION_NAME, PARAM_DEBUG, DebugEnabled); + config_set_default_bool(obsConfig, + SECTION_NAME, PARAM_ALERT, AlertsEnabled); - config_set_default_bool(obsConfig, - SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired); - config_set_default_string(obsConfig, - SECTION_NAME, PARAM_SECRET, QT_TO_UTF8(Secret)); - config_set_default_string(obsConfig, - SECTION_NAME, PARAM_SALT, QT_TO_UTF8(Salt)); - } + config_set_default_bool(obsConfig, + SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired); + config_set_default_string(obsConfig, + SECTION_NAME, PARAM_SECRET, QT_TO_UTF8(Secret)); + config_set_default_string(obsConfig, + SECTION_NAME, PARAM_SALT, QT_TO_UTF8(Salt)); + } - mbedtls_entropy_init(&entropy); - mbedtls_ctr_drbg_init(&rng); - mbedtls_ctr_drbg_seed(&rng, mbedtls_entropy_func, &entropy, nullptr, 0); + mbedtls_entropy_init(&entropy); + mbedtls_ctr_drbg_init(&rng); + mbedtls_ctr_drbg_seed(&rng, mbedtls_entropy_func, &entropy, nullptr, 0); - SessionChallenge = GenerateSalt(); + SessionChallenge = GenerateSalt(); } Config::~Config() { - mbedtls_ctr_drbg_free(&rng); - mbedtls_entropy_free(&entropy); + mbedtls_ctr_drbg_free(&rng); + mbedtls_entropy_free(&entropy); } void Config::Load() { - config_t* obsConfig = obs_frontend_get_global_config(); + config_t* obsConfig = obs_frontend_get_global_config(); - ServerEnabled = config_get_bool(obsConfig, SECTION_NAME, PARAM_ENABLE); - ServerPort = config_get_uint(obsConfig, SECTION_NAME, PARAM_PORT); + ServerEnabled = config_get_bool(obsConfig, SECTION_NAME, PARAM_ENABLE); + ServerPort = config_get_uint(obsConfig, SECTION_NAME, PARAM_PORT); - DebugEnabled = config_get_bool(obsConfig, SECTION_NAME, PARAM_DEBUG); - AlertsEnabled = config_get_bool(obsConfig, SECTION_NAME, PARAM_ALERT); + DebugEnabled = config_get_bool(obsConfig, SECTION_NAME, PARAM_DEBUG); + AlertsEnabled = config_get_bool(obsConfig, SECTION_NAME, PARAM_ALERT); - AuthRequired = config_get_bool(obsConfig, SECTION_NAME, PARAM_AUTHREQUIRED); - Secret = config_get_string(obsConfig, SECTION_NAME, PARAM_SECRET); - Salt = config_get_string(obsConfig, SECTION_NAME, PARAM_SALT); + AuthRequired = config_get_bool(obsConfig, SECTION_NAME, PARAM_AUTHREQUIRED); + Secret = config_get_string(obsConfig, SECTION_NAME, PARAM_SECRET); + Salt = config_get_string(obsConfig, SECTION_NAME, PARAM_SALT); } void Config::Save() { - config_t* obsConfig = obs_frontend_get_global_config(); + config_t* obsConfig = obs_frontend_get_global_config(); - config_set_bool(obsConfig, SECTION_NAME, PARAM_ENABLE, ServerEnabled); - config_set_uint(obsConfig, SECTION_NAME, PARAM_PORT, ServerPort); + config_set_bool(obsConfig, SECTION_NAME, PARAM_ENABLE, ServerEnabled); + config_set_uint(obsConfig, SECTION_NAME, PARAM_PORT, ServerPort); - config_set_bool(obsConfig, SECTION_NAME, PARAM_DEBUG, DebugEnabled); - config_set_bool(obsConfig, SECTION_NAME, PARAM_ALERT, AlertsEnabled); + config_set_bool(obsConfig, SECTION_NAME, PARAM_DEBUG, DebugEnabled); + config_set_bool(obsConfig, SECTION_NAME, PARAM_ALERT, AlertsEnabled); - config_set_bool(obsConfig, SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired); - config_set_string(obsConfig, SECTION_NAME, PARAM_SECRET, - QT_TO_UTF8(Secret)); - config_set_string(obsConfig, SECTION_NAME, PARAM_SALT, - QT_TO_UTF8(Salt)); + config_set_bool(obsConfig, SECTION_NAME, PARAM_AUTHREQUIRED, AuthRequired); + config_set_string(obsConfig, SECTION_NAME, PARAM_SECRET, + QT_TO_UTF8(Secret)); + config_set_string(obsConfig, SECTION_NAME, PARAM_SALT, + QT_TO_UTF8(Salt)); - config_save(obsConfig); + config_save(obsConfig); } QString Config::GenerateSalt() { - // Generate 32 random chars - unsigned char* randomChars = (unsigned char*)bzalloc(32); - mbedtls_ctr_drbg_random(&rng, randomChars, 32); + // Generate 32 random chars + unsigned char* randomChars = (unsigned char*)bzalloc(32); + mbedtls_ctr_drbg_random(&rng, randomChars, 32); - // Convert the 32 random chars to a base64 string - char* salt = (char*)bzalloc(64); - size_t saltBytes; - mbedtls_base64_encode( - (unsigned char*)salt, 64, &saltBytes, - randomChars, 32); + // Convert the 32 random chars to a base64 string + char* salt = (char*)bzalloc(64); + size_t saltBytes; + mbedtls_base64_encode( + (unsigned char*)salt, 64, &saltBytes, + randomChars, 32); - bfree(randomChars); - return salt; + bfree(randomChars); + return salt; } QString Config::GenerateSecret(QString password, QString salt) { - // Concatenate the password and the salt - QString passAndSalt = ""; - passAndSalt += password; - passAndSalt += salt; + // Concatenate the password and the salt + QString passAndSalt = ""; + passAndSalt += password; + passAndSalt += salt; - // Generate a SHA256 hash of the password - unsigned char* challengeHash = (unsigned char*)bzalloc(32); - mbedtls_sha256( - (unsigned char*)passAndSalt.toUtf8().constData(), passAndSalt.length(), - challengeHash, 0); + // Generate a SHA256 hash of the password + unsigned char* challengeHash = (unsigned char*)bzalloc(32); + mbedtls_sha256( + (unsigned char*)passAndSalt.toUtf8().constData(), passAndSalt.length(), + challengeHash, 0); - // Encode SHA256 hash to Base64 - char* challenge = (char*)bzalloc(64); - size_t challengeBytes = 0; - mbedtls_base64_encode( - (unsigned char*)challenge, 64, &challengeBytes, - challengeHash, 32); + // Encode SHA256 hash to Base64 + char* challenge = (char*)bzalloc(64); + size_t challengeBytes = 0; + mbedtls_base64_encode( + (unsigned char*)challenge, 64, &challengeBytes, + challengeHash, 32); - bfree(challengeHash); - return challenge; + bfree(challengeHash); + return challenge; } void Config::SetPassword(QString password) { - QString newSalt = GenerateSalt(); - QString newChallenge = GenerateSecret(password, newSalt); + QString newSalt = GenerateSalt(); + QString newChallenge = GenerateSecret(password, newSalt); - this->Salt = newSalt; - this->Secret = newChallenge; + this->Salt = newSalt; + this->Secret = newChallenge; } bool Config::CheckAuth(QString response) { - // Concatenate auth secret with the challenge sent to the user - QString challengeAndResponse = ""; - challengeAndResponse += Secret; - challengeAndResponse += SessionChallenge; + // Concatenate auth secret with the challenge sent to the user + QString challengeAndResponse = ""; + challengeAndResponse += Secret; + challengeAndResponse += SessionChallenge; - // Generate a SHA256 hash of challengeAndResponse - unsigned char* hash = (unsigned char*)bzalloc(32); - mbedtls_sha256( - (unsigned char*)challengeAndResponse.toUtf8().constData(), - challengeAndResponse.length(), - hash, 0); + // Generate a SHA256 hash of challengeAndResponse + unsigned char* hash = (unsigned char*)bzalloc(32); + mbedtls_sha256( + (unsigned char*)challengeAndResponse.toUtf8().constData(), + challengeAndResponse.length(), + hash, 0); - // Encode the SHA256 hash to Base64 - char* expectedResponse = (char*)bzalloc(64); - size_t base64_size = 0; - mbedtls_base64_encode( - (unsigned char*)expectedResponse, 64, &base64_size, - hash, 32); + // Encode the SHA256 hash to Base64 + char* expectedResponse = (char*)bzalloc(64); + size_t base64_size = 0; + mbedtls_base64_encode( + (unsigned char*)expectedResponse, 64, &base64_size, + hash, 32); - bool authSuccess = false; - if (response == QString(expectedResponse)) { - SessionChallenge = GenerateSalt(); - authSuccess = true; - } + bool authSuccess = false; + if (response == QString(expectedResponse)) { + SessionChallenge = GenerateSalt(); + authSuccess = true; + } - bfree(hash); - bfree(expectedResponse); - return authSuccess; + bfree(hash); + bfree(expectedResponse); + return authSuccess; } Config* Config::Current() { - return _instance; + return _instance; } diff --git a/src/Config.h b/src/Config.h index 66e4a25d..02f4fb2f 100644 --- a/src/Config.h +++ b/src/Config.h @@ -25,36 +25,36 @@ with this program. If not, see #include class Config { - public: - Config(); - ~Config(); - void Load(); - void Save(); + public: + Config(); + ~Config(); + void Load(); + void Save(); - void SetPassword(QString password); - bool CheckAuth(QString userChallenge); - QString GenerateSalt(); - static QString GenerateSecret( - QString password, QString salt); + void SetPassword(QString password); + bool CheckAuth(QString userChallenge); + QString GenerateSalt(); + static QString GenerateSecret( + QString password, QString salt); - bool ServerEnabled; - uint64_t ServerPort; + bool ServerEnabled; + uint64_t ServerPort; - bool DebugEnabled; - bool AlertsEnabled; + bool DebugEnabled; + bool AlertsEnabled; - bool AuthRequired; - QString Secret; - QString Salt; - QString SessionChallenge; - bool SettingsLoaded; + bool AuthRequired; + QString Secret; + QString Salt; + QString SessionChallenge; + bool SettingsLoaded; - static Config* Current(); + static Config* Current(); - private: - static Config* _instance; - mbedtls_entropy_context entropy; - mbedtls_ctr_drbg_context rng; + private: + static Config* _instance; + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context rng; }; -#endif // CONFIG_H \ No newline at end of file +#endif // CONFIG_H diff --git a/src/Utils.cpp b/src/Utils.cpp index 2c66db3c..86930b39 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -29,487 +29,487 @@ with this program. If not, see Q_DECLARE_METATYPE(OBSScene); obs_data_array_t* Utils::StringListToArray(char** strings, char* key) { - if (!strings) - return obs_data_array_create(); + if (!strings) + return obs_data_array_create(); - obs_data_array_t* list = obs_data_array_create(); + obs_data_array_t* list = obs_data_array_create(); - char* value = ""; - for (int i = 0; value != nullptr; i++) { - value = strings[i]; + char* value = ""; + for (int i = 0; value != nullptr; i++) { + value = strings[i]; - OBSDataAutoRelease item = obs_data_create(); - obs_data_set_string(item, key, value); + OBSDataAutoRelease item = obs_data_create(); + obs_data_set_string(item, key, value); - if (value) - obs_data_array_push_back(list, item); - } + if (value) + obs_data_array_push_back(list, item); + } - return list; + return list; } obs_data_array_t* Utils::GetSceneItems(obs_source_t* source) { - obs_data_array_t* items = obs_data_array_create(); - OBSScene scene = obs_scene_from_source(source); + obs_data_array_t* items = obs_data_array_create(); + OBSScene scene = obs_scene_from_source(source); - if (!scene) - return nullptr; + if (!scene) + return nullptr; - obs_scene_enum_items(scene, []( - obs_scene_t* scene, - obs_sceneitem_t* currentItem, - void* param) - { - obs_data_array_t* data = static_cast(param); + obs_scene_enum_items(scene, []( + obs_scene_t* scene, + obs_sceneitem_t* currentItem, + void* param) + { + obs_data_array_t* data = static_cast(param); - OBSDataAutoRelease itemData = GetSceneItemData(currentItem); - obs_data_array_insert(data, 0, itemData); - return true; - }, items); + OBSDataAutoRelease itemData = GetSceneItemData(currentItem); + obs_data_array_insert(data, 0, itemData); + return true; + }, items); - return items; + return items; } obs_data_t* Utils::GetSceneItemData(obs_sceneitem_t* item) { - if (!item) - return nullptr; + if (!item) + return nullptr; - vec2 pos; - obs_sceneitem_get_pos(item, &pos); + vec2 pos; + obs_sceneitem_get_pos(item, &pos); - vec2 scale; - obs_sceneitem_get_scale(item, &scale); + vec2 scale; + obs_sceneitem_get_scale(item, &scale); - // obs_sceneitem_get_source doesn't increase the refcount - OBSSource itemSource = obs_sceneitem_get_source(item); - float item_width = float(obs_source_get_width(itemSource)); - float item_height = float(obs_source_get_height(itemSource)); + // obs_sceneitem_get_source doesn't increase the refcount + OBSSource itemSource = obs_sceneitem_get_source(item); + float item_width = float(obs_source_get_width(itemSource)); + float item_height = float(obs_source_get_height(itemSource)); - obs_data_t* data = obs_data_create(); - obs_data_set_string(data, "name", - obs_source_get_name(obs_sceneitem_get_source(item))); - obs_data_set_string(data, "type", - obs_source_get_id(obs_sceneitem_get_source(item))); - obs_data_set_double(data, "volume", - obs_source_get_volume(obs_sceneitem_get_source(item))); - obs_data_set_double(data, "x", pos.x); - obs_data_set_double(data, "y", pos.y); - obs_data_set_int(data, "source_cx", (int)item_width); - obs_data_set_int(data, "source_cy", (int)item_height); - obs_data_set_double(data, "cx", item_width* scale.x); - obs_data_set_double(data, "cy", item_height* scale.y); - obs_data_set_bool(data, "render", obs_sceneitem_visible(item)); + obs_data_t* data = obs_data_create(); + obs_data_set_string(data, "name", + obs_source_get_name(obs_sceneitem_get_source(item))); + obs_data_set_string(data, "type", + obs_source_get_id(obs_sceneitem_get_source(item))); + obs_data_set_double(data, "volume", + obs_source_get_volume(obs_sceneitem_get_source(item))); + obs_data_set_double(data, "x", pos.x); + obs_data_set_double(data, "y", pos.y); + obs_data_set_int(data, "source_cx", (int)item_width); + obs_data_set_int(data, "source_cy", (int)item_height); + obs_data_set_double(data, "cx", item_width* scale.x); + obs_data_set_double(data, "cy", item_height* scale.y); + obs_data_set_bool(data, "render", obs_sceneitem_visible(item)); - return data; + return data; } obs_sceneitem_t* Utils::GetSceneItemFromName(obs_source_t* source, QString name) { - struct current_search { - QString query; - obs_sceneitem_t* result; - }; + struct current_search { + QString query; + obs_sceneitem_t* result; + }; - current_search search; - search.query = name; - search.result = nullptr; + current_search search; + search.query = name; + search.result = nullptr; - OBSScene scene = obs_scene_from_source(source); - if (!scene) - return nullptr; + OBSScene scene = obs_scene_from_source(source); + if (!scene) + return nullptr; - obs_scene_enum_items(scene, []( - obs_scene_t* scene, - obs_sceneitem_t* currentItem, - void* param) - { - current_search* search = static_cast(param); + obs_scene_enum_items(scene, []( + obs_scene_t* scene, + obs_sceneitem_t* currentItem, + void* param) + { + current_search* search = static_cast(param); - QString currentItemName = - obs_source_get_name(obs_sceneitem_get_source(currentItem)); + QString currentItemName = + obs_source_get_name(obs_sceneitem_get_source(currentItem)); - if (currentItemName == search->query) { - search->result = currentItem; - obs_sceneitem_addref(search->result); - return false; - } + if (currentItemName == search->query) { + search->result = currentItem; + obs_sceneitem_addref(search->result); + return false; + } - return true; - }, &search); + return true; + }, &search); - return search.result; + return search.result; } bool Utils::IsValidAlignment(const uint32_t alignment) { - switch (alignment) { - case OBS_ALIGN_CENTER: - case OBS_ALIGN_LEFT: - case OBS_ALIGN_RIGHT: - case OBS_ALIGN_TOP: - case OBS_ALIGN_BOTTOM: - case OBS_ALIGN_TOP | OBS_ALIGN_LEFT: - case OBS_ALIGN_TOP | OBS_ALIGN_RIGHT: - case OBS_ALIGN_BOTTOM | OBS_ALIGN_LEFT: - case OBS_ALIGN_BOTTOM | OBS_ALIGN_RIGHT: { - return true; - } - } - return false; + switch (alignment) { + case OBS_ALIGN_CENTER: + case OBS_ALIGN_LEFT: + case OBS_ALIGN_RIGHT: + case OBS_ALIGN_TOP: + case OBS_ALIGN_BOTTOM: + case OBS_ALIGN_TOP | OBS_ALIGN_LEFT: + case OBS_ALIGN_TOP | OBS_ALIGN_RIGHT: + case OBS_ALIGN_BOTTOM | OBS_ALIGN_LEFT: + case OBS_ALIGN_BOTTOM | OBS_ALIGN_RIGHT: { + return true; + } + } + return false; } obs_source_t* Utils::GetTransitionFromName(QString searchName) { - obs_source_t* foundTransition = nullptr; + obs_source_t* foundTransition = nullptr; - obs_frontend_source_list transition_list = {}; - obs_frontend_get_transitions(&transition_list); + obs_frontend_source_list transition_list = {}; + obs_frontend_get_transitions(&transition_list); - for (size_t i = 0; i < transition_list.sources.num; i++) { - obs_source_t* transition = transition_list.sources.array[i]; - QString transitionName = obs_source_get_name(transition); + for (size_t i = 0; i < transition_list.sources.num; i++) { + obs_source_t* transition = transition_list.sources.array[i]; + QString transitionName = obs_source_get_name(transition); - if (transitionName == searchName) { - foundTransition = transition; - obs_source_addref(foundTransition); - break; - } - } + if (transitionName == searchName) { + foundTransition = transition; + obs_source_addref(foundTransition); + break; + } + } - obs_frontend_source_list_free(&transition_list); - return foundTransition; + obs_frontend_source_list_free(&transition_list); + return foundTransition; } obs_source_t* Utils::GetSceneFromNameOrCurrent(QString sceneName) { - // Both obs_frontend_get_current_scene() and obs_get_source_by_name() - // do addref on the return source, so no need to use an OBSSource helper - obs_source_t* scene = nullptr; + // Both obs_frontend_get_current_scene() and obs_get_source_by_name() + // do addref on the return source, so no need to use an OBSSource helper + obs_source_t* scene = nullptr; - if (sceneName.isEmpty() || sceneName.isNull()) - scene = obs_frontend_get_current_scene(); - else - scene = obs_get_source_by_name(sceneName.toUtf8()); + if (sceneName.isEmpty() || sceneName.isNull()) + scene = obs_frontend_get_current_scene(); + else + scene = obs_get_source_by_name(sceneName.toUtf8()); - return scene; + return scene; } obs_data_array_t* Utils::GetScenes() { - obs_frontend_source_list sceneList = {}; - obs_frontend_get_scenes(&sceneList); + obs_frontend_source_list sceneList = {}; + obs_frontend_get_scenes(&sceneList); - obs_data_array_t* scenes = obs_data_array_create(); - for (size_t i = 0; i < sceneList.sources.num; i++) { - obs_source_t* scene = sceneList.sources.array[i]; - OBSDataAutoRelease sceneData = GetSceneData(scene); - obs_data_array_push_back(scenes, sceneData); - } + obs_data_array_t* scenes = obs_data_array_create(); + for (size_t i = 0; i < sceneList.sources.num; i++) { + obs_source_t* scene = sceneList.sources.array[i]; + OBSDataAutoRelease sceneData = GetSceneData(scene); + obs_data_array_push_back(scenes, sceneData); + } - obs_frontend_source_list_free(&sceneList); - return scenes; + obs_frontend_source_list_free(&sceneList); + return scenes; } obs_data_t* Utils::GetSceneData(obs_source_t* source) { - OBSDataArrayAutoRelease sceneItems = GetSceneItems(source); + OBSDataArrayAutoRelease sceneItems = GetSceneItems(source); - obs_data_t* sceneData = obs_data_create(); - obs_data_set_string(sceneData, "name", obs_source_get_name(source)); - obs_data_set_array(sceneData, "sources", sceneItems); + obs_data_t* sceneData = obs_data_create(); + obs_data_set_string(sceneData, "name", obs_source_get_name(source)); + obs_data_set_array(sceneData, "sources", sceneItems); - return sceneData; + return sceneData; } QSpinBox* Utils::GetTransitionDurationControl() { - QMainWindow* window = (QMainWindow*)obs_frontend_get_main_window(); - return window->findChild("transitionDuration"); + QMainWindow* window = (QMainWindow*)obs_frontend_get_main_window(); + return window->findChild("transitionDuration"); } int Utils::GetTransitionDuration() { - QSpinBox* control = GetTransitionDurationControl(); - if (control) - return control->value(); - else - return -1; + QSpinBox* control = GetTransitionDurationControl(); + if (control) + return control->value(); + else + return -1; } void Utils::SetTransitionDuration(int ms) { - QSpinBox* control = GetTransitionDurationControl(); - if (control && ms >= 0) - control->setValue(ms); + QSpinBox* control = GetTransitionDurationControl(); + if (control && ms >= 0) + control->setValue(ms); } bool Utils::SetTransitionByName(QString transitionName) { - OBSSourceAutoRelease transition = GetTransitionFromName(transitionName); + OBSSourceAutoRelease transition = GetTransitionFromName(transitionName); - if (transition) { - obs_frontend_set_current_transition(transition); - return true; - } else { - return false; - } + if (transition) { + obs_frontend_set_current_transition(transition); + return true; + } else { + return false; + } } QPushButton* Utils::GetPreviewModeButtonControl() { - QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); - return main->findChild("modeSwitch"); + QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); + return main->findChild("modeSwitch"); } QListWidget* Utils::GetSceneListControl() { - QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); - return main->findChild("scenes"); + QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); + return main->findChild("scenes"); } obs_scene_t* Utils::SceneListItemToScene(QListWidgetItem* item) { - if (!item) - return nullptr; + if (!item) + return nullptr; - QVariant itemData = item->data(static_cast(Qt::UserRole)); - return itemData.value(); + QVariant itemData = item->data(static_cast(Qt::UserRole)); + return itemData.value(); } QLayout* Utils::GetPreviewLayout() { - QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); - return main->findChild("previewLayout"); + QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); + return main->findChild("previewLayout"); } void Utils::TransitionToProgram() { - if (!obs_frontend_preview_program_mode_active()) - return; + if (!obs_frontend_preview_program_mode_active()) + return; - // WARNING : if the layout created in OBS' CreateProgramOptions() changes - // then this won't work as expected + // WARNING : if the layout created in OBS' CreateProgramOptions() changes + // then this won't work as expected - QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); + QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); - // The program options widget is the second item in the left-to-right layout - QWidget* programOptions = GetPreviewLayout()->itemAt(1)->widget(); + // The program options widget is the second item in the left-to-right layout + QWidget* programOptions = GetPreviewLayout()->itemAt(1)->widget(); - // The "Transition" button lies in the mainButtonLayout - // which is the first itemin the program options' layout - QLayout* mainButtonLayout = programOptions->layout()->itemAt(1)->layout(); - QWidget* transitionBtnWidget = mainButtonLayout->itemAt(0)->widget(); + // The "Transition" button lies in the mainButtonLayout + // which is the first itemin the program options' layout + QLayout* mainButtonLayout = programOptions->layout()->itemAt(1)->layout(); + QWidget* transitionBtnWidget = mainButtonLayout->itemAt(0)->widget(); - // Try to cast that widget into a button - QPushButton* transitionBtn = qobject_cast(transitionBtnWidget); + // Try to cast that widget into a button + QPushButton* transitionBtn = qobject_cast(transitionBtnWidget); - // Perform a click on that button - transitionBtn->click(); + // Perform a click on that button + transitionBtn->click(); } QString Utils::OBSVersionString() { - uint32_t version = obs_get_version(); + uint32_t version = obs_get_version(); - uint8_t major, minor, patch; - major = (version >> 24) & 0xFF; - minor = (version >> 16) & 0xFF; - patch = version & 0xFF; + uint8_t major, minor, patch; + major = (version >> 24) & 0xFF; + minor = (version >> 16) & 0xFF; + patch = version & 0xFF; - QString result = QString("%1.%2.%3") - .arg(major).arg(minor).arg(patch); + QString result = QString("%1.%2.%3") + .arg(major).arg(minor).arg(patch); - return result; + return result; } QSystemTrayIcon* Utils::GetTrayIcon() { - QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); - if (!main) return nullptr; + QMainWindow* main = (QMainWindow*)obs_frontend_get_main_window(); + if (!main) return nullptr; - return main->findChildren().first(); + return main->findChildren().first(); } void Utils::SysTrayNotify(QString &text, - QSystemTrayIcon::MessageIcon icon, QString title) { - if (!Config::Current()->AlertsEnabled || - !QSystemTrayIcon::isSystemTrayAvailable() || - !QSystemTrayIcon::supportsMessages()) - { - return; - } + QSystemTrayIcon::MessageIcon icon, QString title) { + if (!Config::Current()->AlertsEnabled || + !QSystemTrayIcon::isSystemTrayAvailable() || + !QSystemTrayIcon::supportsMessages()) + { + return; + } - QSystemTrayIcon* trayIcon = GetTrayIcon(); - if (trayIcon) - trayIcon->showMessage(title, text, icon); + QSystemTrayIcon* trayIcon = GetTrayIcon(); + if (trayIcon) + trayIcon->showMessage(title, text, icon); } QString Utils::FormatIPAddress(QHostAddress &addr) { - QRegExp v4regex("(::ffff:)(((\\d).){3})", Qt::CaseInsensitive); - QString addrString = addr.toString(); - if (addrString.contains(v4regex)) { - addrString = QHostAddress(addr.toIPv4Address()).toString(); - } - return addrString; + QRegExp v4regex("(::ffff:)(((\\d).){3})", Qt::CaseInsensitive); + QString addrString = addr.toString(); + if (addrString.contains(v4regex)) { + addrString = QHostAddress(addr.toIPv4Address()).toString(); + } + return addrString; } const char* Utils::GetRecordingFolder() { - config_t* profile = obs_frontend_get_profile_config(); - QString outputMode = config_get_string(profile, "Output", "Mode"); + config_t* profile = obs_frontend_get_profile_config(); + QString outputMode = config_get_string(profile, "Output", "Mode"); - if (outputMode == "Advanced") { - // Advanced mode - return config_get_string(profile, "AdvOut", "RecFilePath"); - } else { - // Simple mode - return config_get_string(profile, "SimpleOutput", "FilePath"); - } + if (outputMode == "Advanced") { + // Advanced mode + return config_get_string(profile, "AdvOut", "RecFilePath"); + } else { + // Simple mode + return config_get_string(profile, "SimpleOutput", "FilePath"); + } } bool Utils::SetRecordingFolder(const char* path) { - QDir dir(path); - if (!dir.exists()) - dir.mkpath("."); + QDir dir(path); + if (!dir.exists()) + dir.mkpath("."); - config_t* profile = obs_frontend_get_profile_config(); - QString outputMode = config_get_string(profile, "Output", "Mode"); + config_t* profile = obs_frontend_get_profile_config(); + QString outputMode = config_get_string(profile, "Output", "Mode"); - if (outputMode == "Advanced") { - config_set_string(profile, "AdvOut", "RecFilePath", path); - } else { - config_set_string(profile, "SimpleOutput", "FilePath", path); - } + if (outputMode == "Advanced") { + config_set_string(profile, "AdvOut", "RecFilePath", path); + } else { + config_set_string(profile, "SimpleOutput", "FilePath", path); + } - config_save(profile); - return true; + config_save(profile); + return true; } QString Utils::ParseDataToQueryString(obs_data_t* data) { - if (!data) - return QString(); + if (!data) + return QString(); - QString query; + QString query; - obs_data_item_t* item = obs_data_first(data); - if (item) { - bool isFirst = true; - do { - if (!obs_data_item_has_user_value(item)) - continue; + obs_data_item_t* item = obs_data_first(data); + if (item) { + bool isFirst = true; + do { + if (!obs_data_item_has_user_value(item)) + continue; - if (!isFirst) - query += "&"; - else - isFirst = false; + if (!isFirst) + query += "&"; + else + isFirst = false; - QString attrName = obs_data_item_get_name(item); - query += (attrName + "="); + QString attrName = obs_data_item_get_name(item); + query += (attrName + "="); - switch (obs_data_item_gettype(item)) { - case OBS_DATA_BOOLEAN: - query += (obs_data_item_get_bool(item) ? "true" : "false"); - break; + switch (obs_data_item_gettype(item)) { + case OBS_DATA_BOOLEAN: + query += (obs_data_item_get_bool(item) ? "true" : "false"); + break; - case OBS_DATA_NUMBER: - switch (obs_data_item_numtype(item)) { - case OBS_DATA_NUM_DOUBLE: - query += - QString::number(obs_data_item_get_double(item)); - break; - case OBS_DATA_NUM_INT: - query += - QString::number(obs_data_item_get_int(item)); - break; - case OBS_DATA_NUM_INVALID: - break; - } - break; + case OBS_DATA_NUMBER: + switch (obs_data_item_numtype(item)) { + case OBS_DATA_NUM_DOUBLE: + query += + QString::number(obs_data_item_get_double(item)); + break; + case OBS_DATA_NUM_INT: + query += + QString::number(obs_data_item_get_int(item)); + break; + case OBS_DATA_NUM_INVALID: + break; + } + break; - case OBS_DATA_STRING: - query += - QUrl::toPercentEncoding( - QString(obs_data_item_get_string(item))); - break; + case OBS_DATA_STRING: + query += + QUrl::toPercentEncoding( + QString(obs_data_item_get_string(item))); + break; - default: - //other types are not supported - break; - } - } while (obs_data_item_next(&item)); - } + default: + //other types are not supported + break; + } + } while (obs_data_item_next(&item)); + } - return query; + return query; } obs_hotkey_t* Utils::FindHotkeyByName(QString name) { - struct current_search { - QString query; - obs_hotkey_t* result; - }; + struct current_search { + QString query; + obs_hotkey_t* result; + }; - current_search search; - search.query = name; - search.result = nullptr; + current_search search; + search.query = name; + search.result = nullptr; - obs_enum_hotkeys([](void* data, obs_hotkey_id id, obs_hotkey_t* hotkey) { - current_search* search = static_cast(data); + obs_enum_hotkeys([](void* data, obs_hotkey_id id, obs_hotkey_t* hotkey) { + current_search* search = static_cast(data); - const char* hk_name = obs_hotkey_get_name(hotkey); - if (hk_name == search->query) { - search->result = hotkey; - return false; - } + const char* hk_name = obs_hotkey_get_name(hotkey); + if (hk_name == search->query) { + search->result = hotkey; + return false; + } - return true; - }, &search); + return true; + }, &search); - return search.result; + return search.result; } bool Utils::ReplayBufferEnabled() { - config_t* profile = obs_frontend_get_profile_config(); - QString outputMode = config_get_string(profile, "Output", "Mode"); + config_t* profile = obs_frontend_get_profile_config(); + QString outputMode = config_get_string(profile, "Output", "Mode"); - if (outputMode == "Simple") { - return config_get_bool(profile, "SimpleOutput", "RecRB"); - } - else if (outputMode == "Advanced") { - return config_get_bool(profile, "AdvOut", "RecRB"); - } + if (outputMode == "Simple") { + return config_get_bool(profile, "SimpleOutput", "RecRB"); + } + else if (outputMode == "Advanced") { + return config_get_bool(profile, "AdvOut", "RecRB"); + } - return false; + return false; } void Utils::StartReplayBuffer() { - if (obs_frontend_replay_buffer_active()) - return; + if (obs_frontend_replay_buffer_active()) + return; - if (!IsRPHotkeySet()) { - obs_output_t* rpOutput = obs_frontend_get_replay_buffer_output(); - OBSData outputHotkeys = obs_hotkeys_save_output(rpOutput); + if (!IsRPHotkeySet()) { + obs_output_t* rpOutput = obs_frontend_get_replay_buffer_output(); + OBSData outputHotkeys = obs_hotkeys_save_output(rpOutput); - OBSData dummyBinding = obs_data_create(); - obs_data_set_bool(dummyBinding, "control", true); - obs_data_set_bool(dummyBinding, "alt", true); - obs_data_set_bool(dummyBinding, "shift", true); - obs_data_set_bool(dummyBinding, "command", true); - obs_data_set_string(dummyBinding, "key", "OBS_KEY_0"); + OBSData dummyBinding = obs_data_create(); + obs_data_set_bool(dummyBinding, "control", true); + obs_data_set_bool(dummyBinding, "alt", true); + obs_data_set_bool(dummyBinding, "shift", true); + obs_data_set_bool(dummyBinding, "command", true); + obs_data_set_string(dummyBinding, "key", "OBS_KEY_0"); - OBSDataArray rpSaveHotkey = obs_data_get_array( - outputHotkeys, "ReplayBuffer.Save"); - obs_data_array_push_back(rpSaveHotkey, dummyBinding); + OBSDataArray rpSaveHotkey = obs_data_get_array( + outputHotkeys, "ReplayBuffer.Save"); + obs_data_array_push_back(rpSaveHotkey, dummyBinding); - obs_hotkeys_load_output(rpOutput, outputHotkeys); - obs_frontend_replay_buffer_start(); + obs_hotkeys_load_output(rpOutput, outputHotkeys); + obs_frontend_replay_buffer_start(); - obs_output_release(rpOutput); - } - else { - obs_frontend_replay_buffer_start(); - } + obs_output_release(rpOutput); + } + else { + obs_frontend_replay_buffer_start(); + } } bool Utils::IsRPHotkeySet() { - OBSOutputAutoRelease rpOutput = obs_frontend_get_replay_buffer_output(); - OBSDataAutoRelease hotkeys = obs_hotkeys_save_output(rpOutput); - OBSDataArrayAutoRelease bindings = obs_data_get_array(hotkeys, - "ReplayBuffer.Save"); + OBSOutputAutoRelease rpOutput = obs_frontend_get_replay_buffer_output(); + OBSDataAutoRelease hotkeys = obs_hotkeys_save_output(rpOutput); + OBSDataArrayAutoRelease bindings = obs_data_get_array(hotkeys, + "ReplayBuffer.Save"); - size_t count = obs_data_array_count(bindings); - return (count > 0); + size_t count = obs_data_array_count(bindings); + return (count > 0); } const char* Utils::GetFilenameFormatting() { - config_t* profile = obs_frontend_get_profile_config(); - return config_get_string(profile, "Output", "FilenameFormatting"); + config_t* profile = obs_frontend_get_profile_config(); + return config_get_string(profile, "Output", "FilenameFormatting"); } bool Utils::SetFilenameFormatting(const char* filenameFormatting) { - config_t* profile = obs_frontend_get_profile_config(); - config_set_string(profile, "Output", "FilenameFormatting", filenameFormatting); - config_save(profile); - return true; + config_t* profile = obs_frontend_get_profile_config(); + config_set_string(profile, "Output", "FilenameFormatting", filenameFormatting); + config_save(profile); + return true; } diff --git a/src/Utils.h b/src/Utils.h index c494efba..24139f71 100644 --- a/src/Utils.h +++ b/src/Utils.h @@ -34,52 +34,52 @@ with this program. If not, see class Utils { public: - static obs_data_array_t* StringListToArray(char** strings, char* key); - static obs_data_array_t* GetSceneItems(obs_source_t* source); - static obs_data_t* GetSceneItemData(obs_sceneitem_t* item); - static obs_sceneitem_t* GetSceneItemFromName( - obs_source_t* source, QString name); - static obs_source_t* GetTransitionFromName(QString transitionName); - static obs_source_t* GetSceneFromNameOrCurrent(QString sceneName); + static obs_data_array_t* StringListToArray(char** strings, char* key); + static obs_data_array_t* GetSceneItems(obs_source_t* source); + static obs_data_t* GetSceneItemData(obs_sceneitem_t* item); + static obs_sceneitem_t* GetSceneItemFromName( + obs_source_t* source, QString name); + static obs_source_t* GetTransitionFromName(QString transitionName); + static obs_source_t* GetSceneFromNameOrCurrent(QString sceneName); - static bool IsValidAlignment(const uint32_t alignment); + static bool IsValidAlignment(const uint32_t alignment); - static obs_data_array_t* GetScenes(); - static obs_data_t* GetSceneData(obs_source_t* source); + static obs_data_array_t* GetScenes(); + static obs_data_t* GetSceneData(obs_source_t* source); - static QSpinBox* GetTransitionDurationControl(); - static int GetTransitionDuration(); - static void SetTransitionDuration(int ms); + static QSpinBox* GetTransitionDurationControl(); + static int GetTransitionDuration(); + static void SetTransitionDuration(int ms); - static bool SetTransitionByName(QString transitionName); + static bool SetTransitionByName(QString transitionName); - static QPushButton* GetPreviewModeButtonControl(); - static QLayout* GetPreviewLayout(); - static QListWidget* GetSceneListControl(); - static obs_scene_t* SceneListItemToScene(QListWidgetItem* item); + static QPushButton* GetPreviewModeButtonControl(); + static QLayout* GetPreviewLayout(); + static QListWidget* GetSceneListControl(); + static obs_scene_t* SceneListItemToScene(QListWidgetItem* item); - static void TransitionToProgram(); + static void TransitionToProgram(); - static QString OBSVersionString(); + static QString OBSVersionString(); - static QSystemTrayIcon* GetTrayIcon(); - static void SysTrayNotify( - QString &text, - QSystemTrayIcon::MessageIcon n, - QString title = QString("obs-websocket")); + static QSystemTrayIcon* GetTrayIcon(); + static void SysTrayNotify( + QString &text, + QSystemTrayIcon::MessageIcon n, + QString title = QString("obs-websocket")); - static QString FormatIPAddress(QHostAddress &addr); + static QString FormatIPAddress(QHostAddress &addr); - static const char* GetRecordingFolder(); - static bool SetRecordingFolder(const char* path); + static const char* GetRecordingFolder(); + static bool SetRecordingFolder(const char* path); - static QString ParseDataToQueryString(obs_data_t* data); - static obs_hotkey_t* FindHotkeyByName(QString name); - static bool ReplayBufferEnabled(); - static void StartReplayBuffer(); - static bool IsRPHotkeySet(); - static const char* GetFilenameFormatting(); - static bool SetFilenameFormatting(const char* filenameFormatting); + static QString ParseDataToQueryString(obs_data_t* data); + static obs_hotkey_t* FindHotkeyByName(QString name); + static bool ReplayBufferEnabled(); + static void StartReplayBuffer(); + static bool IsRPHotkeySet(); + static const char* GetFilenameFormatting(); + static bool SetFilenameFormatting(const char* filenameFormatting); }; #endif // UTILS_H diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index f683a4a3..7670e0c7 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -29,195 +29,195 @@ #include "obs-websocket.h" bool transitionIsCut(obs_source_t* transition) { - if (!transition) - return false; + if (!transition) + return false; - if (obs_source_get_type(transition) == OBS_SOURCE_TYPE_TRANSITION - && QString(obs_source_get_id(transition)) == "cut_transition") { - return true; - } - return false; + if (obs_source_get_type(transition) == OBS_SOURCE_TYPE_TRANSITION + && QString(obs_source_get_id(transition)) == "cut_transition") { + return true; + } + return false; } const char* nsToTimestamp(uint64_t ns) { - uint64_t ms = ns / (1000 * 1000); - uint64_t secs = ms / 1000; - uint64_t minutes = secs / 60; + uint64_t ms = ns / (1000 * 1000); + uint64_t secs = ms / 1000; + uint64_t minutes = secs / 60; - uint64_t hoursPart = minutes / 60; - uint64_t minutesPart = minutes % 60; - uint64_t secsPart = secs % 60; - uint64_t msPart = ms % 1000; + uint64_t hoursPart = minutes / 60; + uint64_t minutesPart = minutes % 60; + uint64_t secsPart = secs % 60; + uint64_t msPart = ms % 1000; - char* ts = (char*)bmalloc(64); - sprintf(ts, "%02d:%02d:%02d.%03d", - hoursPart, minutesPart, secsPart, msPart); + char* ts = (char*)bmalloc(64); + sprintf(ts, "%02d:%02d:%02d.%03d", + hoursPart, minutesPart, secsPart, msPart); - return ts; + return ts; } void* calldata_get_ptr(const calldata_t* data, const char* name) { - void* ptr = nullptr; - calldata_get_ptr(data, name, &ptr); - return ptr; + void* ptr = nullptr; + calldata_get_ptr(data, name, &ptr); + return ptr; } WSEvents* WSEvents::Instance = nullptr; WSEvents::WSEvents(WSServer* srv) { - _srv = srv; - obs_frontend_add_event_callback(WSEvents::FrontendEventHandler, this); + _srv = srv; + obs_frontend_add_event_callback(WSEvents::FrontendEventHandler, this); - QSpinBox* durationControl = Utils::GetTransitionDurationControl(); - connect(durationControl, SIGNAL(valueChanged(int)), - this, SLOT(TransitionDurationChanged(int))); + QSpinBox* durationControl = Utils::GetTransitionDurationControl(); + connect(durationControl, SIGNAL(valueChanged(int)), + this, SLOT(TransitionDurationChanged(int))); - QTimer* statusTimer = new QTimer(); - connect(statusTimer, SIGNAL(timeout()), - this, SLOT(StreamStatus())); - pulse = false; - connect(statusTimer, SIGNAL(timeout()), - this, SLOT(Heartbeat())); - statusTimer->start(2000); // equal to frontend's constant BITRATE_UPDATE_SECONDS + QTimer* statusTimer = new QTimer(); + connect(statusTimer, SIGNAL(timeout()), + this, SLOT(StreamStatus())); + pulse = false; + connect(statusTimer, SIGNAL(timeout()), + this, SLOT(Heartbeat())); + statusTimer->start(2000); // equal to frontend's constant BITRATE_UPDATE_SECONDS - currentScene = nullptr; + currentScene = nullptr; - QTimer::singleShot(1000, this, SLOT(deferredInitOperations())); + QTimer::singleShot(1000, this, SLOT(deferredInitOperations())); - HeartbeatIsActive = false; + HeartbeatIsActive = false; - _streamingActive = false; - _recordingActive = false; + _streamingActive = false; + _recordingActive = false; - _streamStarttime = 0; - _recStarttime = 0; + _streamStarttime = 0; + _recStarttime = 0; } WSEvents::~WSEvents() { - obs_frontend_remove_event_callback(WSEvents::FrontendEventHandler, this); + obs_frontend_remove_event_callback(WSEvents::FrontendEventHandler, this); } void WSEvents::deferredInitOperations() { - OBSSourceAutoRelease transition = obs_frontend_get_current_transition(); + OBSSourceAutoRelease transition = obs_frontend_get_current_transition(); hookTransitionBeginEvent(); - OBSSourceAutoRelease scene = obs_frontend_get_current_scene(); - connectSceneSignals(scene); + OBSSourceAutoRelease scene = obs_frontend_get_current_scene(); + connectSceneSignals(scene); } void WSEvents::FrontendEventHandler(enum obs_frontend_event event, void* private_data) { - WSEvents* owner = static_cast(private_data); + WSEvents* owner = static_cast(private_data); - if (!owner->_srv) - return; + if (!owner->_srv) + return; - if (event == OBS_FRONTEND_EVENT_SCENE_CHANGED) { - owner->OnSceneChange(); - } - else if (event == OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED) { - owner->OnSceneListChange(); - } - else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED) { - owner->OnSceneCollectionChange(); - } - else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED) { - owner->OnSceneCollectionListChange(); - } - else if (event == OBS_FRONTEND_EVENT_TRANSITION_CHANGED) { - owner->OnTransitionChange(); - } - else if (event == OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED) { + if (event == OBS_FRONTEND_EVENT_SCENE_CHANGED) { + owner->OnSceneChange(); + } + else if (event == OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED) { + owner->OnSceneListChange(); + } + else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED) { + owner->OnSceneCollectionChange(); + } + else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED) { + owner->OnSceneCollectionListChange(); + } + else if (event == OBS_FRONTEND_EVENT_TRANSITION_CHANGED) { + owner->OnTransitionChange(); + } + else if (event == OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED) { owner->hookTransitionBeginEvent(); - owner->OnTransitionListChange(); - } - else if (event == OBS_FRONTEND_EVENT_PROFILE_CHANGED) { - owner->OnProfileChange(); - } - else if (event == OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED) { - owner->OnProfileListChange(); - } - else if (event == OBS_FRONTEND_EVENT_STREAMING_STARTING) { - owner->OnStreamStarting(); - } - else if (event == OBS_FRONTEND_EVENT_STREAMING_STARTED) { - owner->_streamingActive = true; - owner->OnStreamStarted(); - } - else if (event == OBS_FRONTEND_EVENT_STREAMING_STOPPING) { - owner->OnStreamStopping(); - } - else if (event == OBS_FRONTEND_EVENT_STREAMING_STOPPED) { - owner->_streamingActive = false; - owner->OnStreamStopped(); - } - else if (event == OBS_FRONTEND_EVENT_RECORDING_STARTING) { - owner->OnRecordingStarting(); - } - else if (event == OBS_FRONTEND_EVENT_RECORDING_STARTED) { - owner->_recordingActive = true; - owner->OnRecordingStarted(); - } - else if (event == OBS_FRONTEND_EVENT_RECORDING_STOPPING) { - owner->OnRecordingStopping(); - } - else if (event == OBS_FRONTEND_EVENT_RECORDING_STOPPED) { - owner->_recordingActive = false; - owner->OnRecordingStopped(); - } - else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING) { - owner->OnReplayStarting(); - } - else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED) { - owner->OnReplayStarted(); - } - else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING) { - owner->OnReplayStopping(); - } - else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED) { - owner->OnReplayStopped(); - } - else if (event == OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED) { - owner->OnStudioModeSwitched(true); - } - else if (event == OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED) { - owner->OnStudioModeSwitched(false); - } - else if (event == OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED) { - owner->OnPreviewSceneChanged(); - } - else if (event == OBS_FRONTEND_EVENT_EXIT) { - owner->connectSceneSignals(nullptr); - owner->OnExit(); - } + owner->OnTransitionListChange(); + } + else if (event == OBS_FRONTEND_EVENT_PROFILE_CHANGED) { + owner->OnProfileChange(); + } + else if (event == OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED) { + owner->OnProfileListChange(); + } + else if (event == OBS_FRONTEND_EVENT_STREAMING_STARTING) { + owner->OnStreamStarting(); + } + else if (event == OBS_FRONTEND_EVENT_STREAMING_STARTED) { + owner->_streamingActive = true; + owner->OnStreamStarted(); + } + else if (event == OBS_FRONTEND_EVENT_STREAMING_STOPPING) { + owner->OnStreamStopping(); + } + else if (event == OBS_FRONTEND_EVENT_STREAMING_STOPPED) { + owner->_streamingActive = false; + owner->OnStreamStopped(); + } + else if (event == OBS_FRONTEND_EVENT_RECORDING_STARTING) { + owner->OnRecordingStarting(); + } + else if (event == OBS_FRONTEND_EVENT_RECORDING_STARTED) { + owner->_recordingActive = true; + owner->OnRecordingStarted(); + } + else if (event == OBS_FRONTEND_EVENT_RECORDING_STOPPING) { + owner->OnRecordingStopping(); + } + else if (event == OBS_FRONTEND_EVENT_RECORDING_STOPPED) { + owner->_recordingActive = false; + owner->OnRecordingStopped(); + } + else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING) { + owner->OnReplayStarting(); + } + else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED) { + owner->OnReplayStarted(); + } + else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING) { + owner->OnReplayStopping(); + } + else if (event == OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED) { + owner->OnReplayStopped(); + } + else if (event == OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED) { + owner->OnStudioModeSwitched(true); + } + else if (event == OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED) { + owner->OnStudioModeSwitched(false); + } + else if (event == OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED) { + owner->OnPreviewSceneChanged(); + } + else if (event == OBS_FRONTEND_EVENT_EXIT) { + owner->connectSceneSignals(nullptr); + owner->OnExit(); + } } void WSEvents::broadcastUpdate(const char* updateType, - obs_data_t* additionalFields = nullptr) + obs_data_t* additionalFields = nullptr) { - OBSDataAutoRelease update = obs_data_create(); - obs_data_set_string(update, "update-type", updateType); + OBSDataAutoRelease update = obs_data_create(); + obs_data_set_string(update, "update-type", updateType); - const char* ts = nullptr; - if (_streamingActive) { - ts = nsToTimestamp(os_gettime_ns() - _streamStarttime); - obs_data_set_string(update, "stream-timecode", ts); - bfree((void*)ts); - } + const char* ts = nullptr; + if (_streamingActive) { + ts = nsToTimestamp(os_gettime_ns() - _streamStarttime); + obs_data_set_string(update, "stream-timecode", ts); + bfree((void*)ts); + } - if (_recordingActive) { - ts = nsToTimestamp(os_gettime_ns() - _recStarttime); - obs_data_set_string(update, "rec-timecode", ts); - bfree((void*)ts); - } + if (_recordingActive) { + ts = nsToTimestamp(os_gettime_ns() - _recStarttime); + obs_data_set_string(update, "rec-timecode", ts); + bfree((void*)ts); + } - if (additionalFields) - obs_data_apply(update, additionalFields); + if (additionalFields) + obs_data_apply(update, additionalFields); - QString json = obs_data_get_json(update); - _srv->broadcast(json); + QString json = obs_data_get_json(update); + _srv->broadcast(json); - if (Config::Current()->DebugEnabled) - blog(LOG_DEBUG, "Update << '%s'", json.toUtf8().constData()); + if (Config::Current()->DebugEnabled) + blog(LOG_DEBUG, "Update << '%s'", json.toUtf8().constData()); } void WSEvents::hookTransitionBeginEvent() { @@ -235,57 +235,57 @@ void WSEvents::hookTransitionBeginEvent() { } void WSEvents::connectSceneSignals(obs_source_t* scene) { - signal_handler_t* sh = nullptr; + signal_handler_t* sh = nullptr; - if (currentScene) { - sh = obs_source_get_signal_handler(currentScene); + if (currentScene) { + sh = obs_source_get_signal_handler(currentScene); - signal_handler_disconnect(sh, - "reorder", OnSceneReordered, this); - signal_handler_disconnect(sh, - "item_add", OnSceneItemAdd, this); - signal_handler_disconnect(sh, - "item_remove", OnSceneItemDelete, this); - signal_handler_disconnect(sh, - "item_visible", OnSceneItemVisibilityChanged, this); - } + signal_handler_disconnect(sh, + "reorder", OnSceneReordered, this); + signal_handler_disconnect(sh, + "item_add", OnSceneItemAdd, this); + signal_handler_disconnect(sh, + "item_remove", OnSceneItemDelete, this); + signal_handler_disconnect(sh, + "item_visible", OnSceneItemVisibilityChanged, this); + } - currentScene = scene; + currentScene = scene; - if (currentScene) { - // TODO : connect to all scenes, not just the current one. - sh = obs_source_get_signal_handler(currentScene); - signal_handler_connect(sh, - "reorder", OnSceneReordered, this); - signal_handler_connect(sh, - "item_add", OnSceneItemAdd, this); - signal_handler_connect(sh, - "item_remove", OnSceneItemDelete, this); - signal_handler_connect(sh, - "item_visible", OnSceneItemVisibilityChanged, this); - } + if (currentScene) { + // TODO : connect to all scenes, not just the current one. + sh = obs_source_get_signal_handler(currentScene); + signal_handler_connect(sh, + "reorder", OnSceneReordered, this); + signal_handler_connect(sh, + "item_add", OnSceneItemAdd, this); + signal_handler_connect(sh, + "item_remove", OnSceneItemDelete, this); + signal_handler_connect(sh, + "item_visible", OnSceneItemVisibilityChanged, this); + } } uint64_t WSEvents::GetStreamingTime() { - if (_streamingActive) - return (os_gettime_ns() - _streamStarttime); - else - return 0; + if (_streamingActive) + return (os_gettime_ns() - _streamStarttime); + else + return 0; } const char* WSEvents::GetStreamingTimecode() { - return nsToTimestamp(GetStreamingTime()); + return nsToTimestamp(GetStreamingTime()); } uint64_t WSEvents::GetRecordingTime() { - if (_recordingActive) - return (os_gettime_ns() - _recStarttime); - else - return 0; + if (_recordingActive) + return (os_gettime_ns() - _recStarttime); + else + return 0; } const char* WSEvents::GetRecordingTimecode() { - return nsToTimestamp(GetRecordingTime()); + return nsToTimestamp(GetRecordingTime()); } /** @@ -300,15 +300,15 @@ const char* WSEvents::GetRecordingTimecode() { * @since 0.3 */ void WSEvents::OnSceneChange() { - OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); - OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(currentScene); - connectSceneSignals(currentScene); + OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); + OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(currentScene); + connectSceneSignals(currentScene); - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "scene-name", obs_source_get_name(currentScene)); - obs_data_set_array(data, "sources", sceneItems); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_string(data, "scene-name", obs_source_get_name(currentScene)); + obs_data_set_array(data, "sources", sceneItems); - broadcastUpdate("SwitchScenes", data); + broadcastUpdate("SwitchScenes", data); } /** @@ -321,7 +321,7 @@ void WSEvents::OnSceneChange() { * @since 0.3 */ void WSEvents::OnSceneListChange() { - broadcastUpdate("ScenesChanged"); + broadcastUpdate("ScenesChanged"); } /** @@ -333,15 +333,15 @@ void WSEvents::OnSceneListChange() { * @since 4.0.0 */ void WSEvents::OnSceneCollectionChange() { - broadcastUpdate("SceneCollectionChanged"); + broadcastUpdate("SceneCollectionChanged"); - currentScene = nullptr; + currentScene = nullptr; - OnTransitionListChange(); - OnTransitionChange(); + OnTransitionListChange(); + OnTransitionChange(); - OnSceneListChange(); - OnSceneChange(); + OnSceneListChange(); + OnSceneChange(); } /** @@ -353,7 +353,7 @@ void WSEvents::OnSceneCollectionChange() { * @since 4.0.0 */ void WSEvents::OnSceneCollectionListChange() { - broadcastUpdate("SceneCollectionListChanged"); + broadcastUpdate("SceneCollectionListChanged"); } /** @@ -367,13 +367,13 @@ void WSEvents::OnSceneCollectionListChange() { * @since 4.0.0 */ void WSEvents::OnTransitionChange() { - OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); + OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "transition-name", - obs_source_get_name(currentTransition)); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_string(data, "transition-name", + obs_source_get_name(currentTransition)); - broadcastUpdate("SwitchTransition", data); + broadcastUpdate("SwitchTransition", data); } /** @@ -386,7 +386,7 @@ void WSEvents::OnTransitionChange() { * @since 4.0.0 */ void WSEvents::OnTransitionListChange() { - broadcastUpdate("TransitionListChanged"); + broadcastUpdate("TransitionListChanged"); } /** @@ -398,7 +398,7 @@ void WSEvents::OnTransitionListChange() { * @since 4.0.0 */ void WSEvents::OnProfileChange() { - broadcastUpdate("ProfileChanged"); + broadcastUpdate("ProfileChanged"); } /** @@ -410,7 +410,7 @@ void WSEvents::OnProfileChange() { * @since 4.0.0 */ void WSEvents::OnProfileListChange() { - broadcastUpdate("ProfileListChanged"); + broadcastUpdate("ProfileListChanged"); } /** @@ -424,10 +424,10 @@ void WSEvents::OnProfileListChange() { * @since 0.3 */ void WSEvents::OnStreamStarting() { - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_bool(data, "preview-only", false); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "preview-only", false); - broadcastUpdate("StreamStarting", data); + broadcastUpdate("StreamStarting", data); } /** @@ -439,9 +439,9 @@ void WSEvents::OnStreamStarting() { * @since 0.3 */ void WSEvents::OnStreamStarted() { - _streamStarttime = os_gettime_ns(); - _lastBytesSent = 0; - broadcastUpdate("StreamStarted"); + _streamStarttime = os_gettime_ns(); + _lastBytesSent = 0; + broadcastUpdate("StreamStarted"); } /** @@ -455,10 +455,10 @@ void WSEvents::OnStreamStarted() { * @since 0.3 */ void WSEvents::OnStreamStopping() { - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_bool(data, "preview-only", false); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "preview-only", false); - broadcastUpdate("StreamStopping", data); + broadcastUpdate("StreamStopping", data); } /** @@ -470,8 +470,8 @@ void WSEvents::OnStreamStopping() { * @since 0.3 */ void WSEvents::OnStreamStopped() { - _streamStarttime = 0; - broadcastUpdate("StreamStopped"); + _streamStarttime = 0; + broadcastUpdate("StreamStopped"); } /** @@ -483,7 +483,7 @@ void WSEvents::OnStreamStopped() { * @since 0.3 */ void WSEvents::OnRecordingStarting() { - broadcastUpdate("RecordingStarting"); + broadcastUpdate("RecordingStarting"); } /** @@ -495,8 +495,8 @@ void WSEvents::OnRecordingStarting() { * @since 0.3 */ void WSEvents::OnRecordingStarted() { - _recStarttime = os_gettime_ns(); - broadcastUpdate("RecordingStarted"); + _recStarttime = os_gettime_ns(); + broadcastUpdate("RecordingStarted"); } /** @@ -508,7 +508,7 @@ void WSEvents::OnRecordingStarted() { * @since 0.3 */ void WSEvents::OnRecordingStopping() { - broadcastUpdate("RecordingStopping"); + broadcastUpdate("RecordingStopping"); } /** @@ -520,8 +520,8 @@ void WSEvents::OnRecordingStopping() { * @since 0.3 */ void WSEvents::OnRecordingStopped() { - _recStarttime = 0; - broadcastUpdate("RecordingStopped"); + _recStarttime = 0; + broadcastUpdate("RecordingStopped"); } /** @@ -533,7 +533,7 @@ void WSEvents::OnRecordingStopped() { * @since 4.2.0 */ void WSEvents::OnReplayStarting() { - broadcastUpdate("ReplayStarting"); + broadcastUpdate("ReplayStarting"); } /** @@ -545,7 +545,7 @@ void WSEvents::OnReplayStarting() { * @since 4.2.0 */ void WSEvents::OnReplayStarted() { - broadcastUpdate("ReplayStarted"); + broadcastUpdate("ReplayStarted"); } /** @@ -557,7 +557,7 @@ void WSEvents::OnReplayStarted() { * @since 4.2.0 */ void WSEvents::OnReplayStopping() { - broadcastUpdate("ReplayStopping"); + broadcastUpdate("ReplayStopping"); } /** @@ -569,7 +569,7 @@ void WSEvents::OnReplayStopping() { * @since 4.2.0 */ void WSEvents::OnReplayStopped() { - broadcastUpdate("ReplayStopped"); + broadcastUpdate("ReplayStopped"); } /** @@ -581,7 +581,7 @@ void WSEvents::OnReplayStopped() { * @since 0.3 */ void WSEvents::OnExit() { - broadcastUpdate("Exiting"); + broadcastUpdate("Exiting"); } /** @@ -604,54 +604,54 @@ void WSEvents::OnExit() { * @since 0.3 */ void WSEvents::StreamStatus() { - bool streamingActive = obs_frontend_streaming_active(); - bool recordingActive = obs_frontend_recording_active(); + bool streamingActive = obs_frontend_streaming_active(); + bool recordingActive = obs_frontend_recording_active(); - OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output(); + OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output(); - if (!streamOutput || !streamingActive) { - return; - } + if (!streamOutput || !streamingActive) { + return; + } - uint64_t bytesSent = obs_output_get_total_bytes(streamOutput); - uint64_t bytesSentTime = os_gettime_ns(); + uint64_t bytesSent = obs_output_get_total_bytes(streamOutput); + uint64_t bytesSentTime = os_gettime_ns(); - if (bytesSent < _lastBytesSent) - bytesSent = 0; + if (bytesSent < _lastBytesSent) + bytesSent = 0; - if (bytesSent == 0) - _lastBytesSent = 0; + if (bytesSent == 0) + _lastBytesSent = 0; - uint64_t bytesBetween = bytesSent - _lastBytesSent; - double timePassed = - double(bytesSentTime - _lastBytesSentTime) / 1000000000.0; + uint64_t bytesBetween = bytesSent - _lastBytesSent; + double timePassed = + double(bytesSentTime - _lastBytesSentTime) / 1000000000.0; - uint64_t bytesPerSec = bytesBetween / timePassed; + uint64_t bytesPerSec = bytesBetween / timePassed; - _lastBytesSent = bytesSent; - _lastBytesSentTime = bytesSentTime; + _lastBytesSent = bytesSent; + _lastBytesSentTime = bytesSentTime; - uint64_t totalStreamTime = - (os_gettime_ns() - _streamStarttime) / 1000000000; + uint64_t totalStreamTime = + (os_gettime_ns() - _streamStarttime) / 1000000000; - int totalFrames = obs_output_get_total_frames(streamOutput); - int droppedFrames = obs_output_get_frames_dropped(streamOutput); + int totalFrames = obs_output_get_total_frames(streamOutput); + int droppedFrames = obs_output_get_frames_dropped(streamOutput); - float strain = obs_output_get_congestion(streamOutput); + float strain = obs_output_get_congestion(streamOutput); - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_bool(data, "streaming", streamingActive); - obs_data_set_bool(data, "recording", recordingActive); - obs_data_set_int(data, "bytes-per-sec", bytesPerSec); - obs_data_set_int(data, "kbits-per-sec", (bytesPerSec * 8) / 1024); - obs_data_set_int(data, "total-stream-time", totalStreamTime); - obs_data_set_int(data, "num-total-frames", totalFrames); - obs_data_set_int(data, "num-dropped-frames", droppedFrames); - obs_data_set_double(data, "fps", obs_get_active_fps()); - obs_data_set_double(data, "strain", strain); - obs_data_set_bool(data, "preview-only", false); // Retrocompat with OBSRemote + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "streaming", streamingActive); + obs_data_set_bool(data, "recording", recordingActive); + obs_data_set_int(data, "bytes-per-sec", bytesPerSec); + obs_data_set_int(data, "kbits-per-sec", (bytesPerSec * 8) / 1024); + obs_data_set_int(data, "total-stream-time", totalStreamTime); + obs_data_set_int(data, "num-total-frames", totalFrames); + obs_data_set_int(data, "num-dropped-frames", droppedFrames); + obs_data_set_double(data, "fps", obs_get_active_fps()); + obs_data_set_double(data, "strain", strain); + obs_data_set_bool(data, "preview-only", false); // Retrocompat with OBSRemote - broadcastUpdate("StreamStatus", data); + broadcastUpdate("StreamStatus", data); } /** @@ -675,40 +675,40 @@ void WSEvents::StreamStatus() { */ void WSEvents::Heartbeat() { - if (!HeartbeatIsActive) return; + if (!HeartbeatIsActive) return; - bool streamingActive = obs_frontend_streaming_active(); - bool recordingActive = obs_frontend_recording_active(); + bool streamingActive = obs_frontend_streaming_active(); + bool recordingActive = obs_frontend_recording_active(); - OBSDataAutoRelease data = obs_data_create(); - OBSOutputAutoRelease recordOutput = obs_frontend_get_recording_output(); - OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output(); + OBSDataAutoRelease data = obs_data_create(); + OBSOutputAutoRelease recordOutput = obs_frontend_get_recording_output(); + OBSOutputAutoRelease streamOutput = obs_frontend_get_streaming_output(); - pulse = !pulse; - obs_data_set_bool(data, "pulse", pulse); + pulse = !pulse; + obs_data_set_bool(data, "pulse", pulse); - obs_data_set_string(data, "current-profile", obs_frontend_get_current_profile()); + obs_data_set_string(data, "current-profile", obs_frontend_get_current_profile()); - OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); - obs_data_set_string(data, "current-scene", obs_source_get_name(currentScene)); + OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); + obs_data_set_string(data, "current-scene", obs_source_get_name(currentScene)); - obs_data_set_bool(data, "streaming", streamingActive); - if (streamingActive) { - uint64_t totalStreamTime = (os_gettime_ns() - _streamStarttime) / 1000000000; - obs_data_set_int(data, "total-stream-time", totalStreamTime); - obs_data_set_int(data, "total-stream-bytes", (uint64_t)obs_output_get_total_bytes(streamOutput)); - obs_data_set_int(data, "total-stream-frames", obs_output_get_total_frames(streamOutput)); - } + obs_data_set_bool(data, "streaming", streamingActive); + if (streamingActive) { + uint64_t totalStreamTime = (os_gettime_ns() - _streamStarttime) / 1000000000; + obs_data_set_int(data, "total-stream-time", totalStreamTime); + obs_data_set_int(data, "total-stream-bytes", (uint64_t)obs_output_get_total_bytes(streamOutput)); + obs_data_set_int(data, "total-stream-frames", obs_output_get_total_frames(streamOutput)); + } - obs_data_set_bool(data, "recording", recordingActive); - if (recordingActive) { - uint64_t totalRecordTime = (os_gettime_ns() - _recStarttime) / 1000000000; - obs_data_set_int(data, "total-record-time", totalRecordTime); - obs_data_set_int(data, "total-record-bytes", (uint64_t)obs_output_get_total_bytes(recordOutput)); - obs_data_set_int(data, "total-record-frames", obs_output_get_total_frames(recordOutput)); - } + obs_data_set_bool(data, "recording", recordingActive); + if (recordingActive) { + uint64_t totalRecordTime = (os_gettime_ns() - _recStarttime) / 1000000000; + obs_data_set_int(data, "total-record-time", totalRecordTime); + obs_data_set_int(data, "total-record-bytes", (uint64_t)obs_output_get_total_bytes(recordOutput)); + obs_data_set_int(data, "total-record-frames", obs_output_get_total_frames(recordOutput)); + } - broadcastUpdate("Heartbeat", data); + broadcastUpdate("Heartbeat", data); } /** @@ -722,10 +722,10 @@ void WSEvents::Heartbeat() { * @since 4.0.0 */ void WSEvents::TransitionDurationChanged(int ms) { - OBSDataAutoRelease fields = obs_data_create(); - obs_data_set_int(fields, "new-duration", ms); + OBSDataAutoRelease fields = obs_data_create(); + obs_data_set_int(fields, "new-duration", ms); - broadcastUpdate("TransitionDurationChanged", fields); + broadcastUpdate("TransitionDurationChanged", fields); } /** @@ -742,7 +742,7 @@ void WSEvents::TransitionDurationChanged(int ms) { * @since 4.0.0 */ void WSEvents::OnTransitionBegin(void* param, calldata_t* data) { - WSEvents* instance = static_cast(param); + WSEvents* instance = static_cast(param); OBSSource transition = (obs_source_t*)calldata_get_ptr(data, "source"); if (!transition) return; @@ -761,8 +761,8 @@ void WSEvents::OnTransitionBegin(void* param, calldata_t* data) { duration = Utils::GetTransitionDuration(); } - OBSDataAutoRelease fields = obs_data_create(); - obs_data_set_string(fields, "name", obs_source_get_name(transition)); + OBSDataAutoRelease fields = obs_data_create(); + obs_data_set_string(fields, "name", obs_source_get_name(transition)); if (duration >= 0) { obs_data_set_int(fields, "duration", duration); } else { @@ -776,7 +776,7 @@ void WSEvents::OnTransitionBegin(void* param, calldata_t* data) { obs_data_set_string(fields, "to-scene", obs_source_get_name(destinationScene)); } - instance->broadcastUpdate("TransitionBegin", fields); + instance->broadcastUpdate("TransitionBegin", fields); } /** @@ -790,16 +790,16 @@ void WSEvents::OnTransitionBegin(void* param, calldata_t* data) { * @since 4.0.0 */ void WSEvents::OnSceneReordered(void* param, calldata_t* data) { - WSEvents* instance = static_cast(param); + WSEvents* instance = static_cast(param); - obs_scene_t* scene = nullptr; - calldata_get_ptr(data, "scene", &scene); + obs_scene_t* scene = nullptr; + calldata_get_ptr(data, "scene", &scene); - OBSDataAutoRelease fields = obs_data_create(); - obs_data_set_string(fields, "scene-name", - obs_source_get_name(obs_scene_get_source(scene))); + OBSDataAutoRelease fields = obs_data_create(); + obs_data_set_string(fields, "scene-name", + obs_source_get_name(obs_scene_get_source(scene))); - instance->broadcastUpdate("SourceOrderChanged", fields); + instance->broadcastUpdate("SourceOrderChanged", fields); } /** @@ -814,24 +814,24 @@ void WSEvents::OnSceneReordered(void* param, calldata_t* data) { * @since 4.0.0 */ void WSEvents::OnSceneItemAdd(void* param, calldata_t* data) { - WSEvents* instance = static_cast(param); + WSEvents* instance = static_cast(param); - obs_scene_t* scene = nullptr; - calldata_get_ptr(data, "scene", &scene); + obs_scene_t* scene = nullptr; + calldata_get_ptr(data, "scene", &scene); - obs_sceneitem_t* sceneItem = nullptr; - calldata_get_ptr(data, "item", &sceneItem); + obs_sceneitem_t* sceneItem = nullptr; + calldata_get_ptr(data, "item", &sceneItem); - const char* sceneName = - obs_source_get_name(obs_scene_get_source(scene)); - const char* sceneItemName = - obs_source_get_name(obs_sceneitem_get_source(sceneItem)); + const char* sceneName = + obs_source_get_name(obs_scene_get_source(scene)); + const char* sceneItemName = + obs_source_get_name(obs_sceneitem_get_source(sceneItem)); - OBSDataAutoRelease fields = obs_data_create(); - obs_data_set_string(fields, "scene-name", sceneName); - obs_data_set_string(fields, "item-name", sceneItemName); + OBSDataAutoRelease fields = obs_data_create(); + obs_data_set_string(fields, "scene-name", sceneName); + obs_data_set_string(fields, "item-name", sceneItemName); - instance->broadcastUpdate("SceneItemAdded", fields); + instance->broadcastUpdate("SceneItemAdded", fields); } /** @@ -846,24 +846,24 @@ void WSEvents::OnSceneItemAdd(void* param, calldata_t* data) { * @since 4.0.0 */ void WSEvents::OnSceneItemDelete(void* param, calldata_t* data) { - WSEvents* instance = static_cast(param); + WSEvents* instance = static_cast(param); - obs_scene_t* scene = nullptr; - calldata_get_ptr(data, "scene", &scene); + obs_scene_t* scene = nullptr; + calldata_get_ptr(data, "scene", &scene); - obs_sceneitem_t* sceneItem = nullptr; - calldata_get_ptr(data, "item", &sceneItem); + obs_sceneitem_t* sceneItem = nullptr; + calldata_get_ptr(data, "item", &sceneItem); - const char* sceneName = - obs_source_get_name(obs_scene_get_source(scene)); - const char* sceneItemName = - obs_source_get_name(obs_sceneitem_get_source(sceneItem)); + const char* sceneName = + obs_source_get_name(obs_scene_get_source(scene)); + const char* sceneItemName = + obs_source_get_name(obs_sceneitem_get_source(sceneItem)); - OBSDataAutoRelease fields = obs_data_create(); - obs_data_set_string(fields, "scene-name", sceneName); - obs_data_set_string(fields, "item-name", sceneItemName); + OBSDataAutoRelease fields = obs_data_create(); + obs_data_set_string(fields, "scene-name", sceneName); + obs_data_set_string(fields, "item-name", sceneItemName); - instance->broadcastUpdate("SceneItemRemoved", fields); + instance->broadcastUpdate("SceneItemRemoved", fields); } /** @@ -879,28 +879,28 @@ void WSEvents::OnSceneItemDelete(void* param, calldata_t* data) { * @since 4.0.0 */ void WSEvents::OnSceneItemVisibilityChanged(void* param, calldata_t* data) { - WSEvents* instance = static_cast(param); + WSEvents* instance = static_cast(param); - obs_scene_t* scene = nullptr; - calldata_get_ptr(data, "scene", &scene); + obs_scene_t* scene = nullptr; + calldata_get_ptr(data, "scene", &scene); - obs_sceneitem_t* sceneItem = nullptr; - calldata_get_ptr(data, "item", &sceneItem); + obs_sceneitem_t* sceneItem = nullptr; + calldata_get_ptr(data, "item", &sceneItem); - bool visible = false; - calldata_get_bool(data, "visible", &visible); + bool visible = false; + calldata_get_bool(data, "visible", &visible); - const char* sceneName = - obs_source_get_name(obs_scene_get_source(scene)); - const char* sceneItemName = - obs_source_get_name(obs_sceneitem_get_source(sceneItem)); + const char* sceneName = + obs_source_get_name(obs_scene_get_source(scene)); + const char* sceneItemName = + obs_source_get_name(obs_sceneitem_get_source(sceneItem)); - OBSDataAutoRelease fields = obs_data_create(); - obs_data_set_string(fields, "scene-name", sceneName); - obs_data_set_string(fields, "item-name", sceneItemName); - obs_data_set_bool(fields, "item-visible", visible); + OBSDataAutoRelease fields = obs_data_create(); + obs_data_set_string(fields, "scene-name", sceneName); + obs_data_set_string(fields, "item-name", sceneItemName); + obs_data_set_bool(fields, "item-visible", visible); - instance->broadcastUpdate("SceneItemVisibilityChanged", fields); + instance->broadcastUpdate("SceneItemVisibilityChanged", fields); } /** @@ -915,19 +915,19 @@ void WSEvents::OnSceneItemVisibilityChanged(void* param, calldata_t* data) { * @since 4.1.0 */ void WSEvents::OnPreviewSceneChanged() { - if (obs_frontend_preview_program_mode_active()) { - OBSSourceAutoRelease scene = obs_frontend_get_current_preview_scene(); - if (!scene) - return; + if (obs_frontend_preview_program_mode_active()) { + OBSSourceAutoRelease scene = obs_frontend_get_current_preview_scene(); + if (!scene) + return; - OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(scene); + OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(scene); - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "scene-name", obs_source_get_name(scene)); - obs_data_set_array(data, "sources", sceneItems); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_string(data, "scene-name", obs_source_get_name(scene)); + obs_data_set_array(data, "sources", sceneItems); - broadcastUpdate("PreviewSceneChanged", data); - } + broadcastUpdate("PreviewSceneChanged", data); + } } /** @@ -941,8 +941,8 @@ void WSEvents::OnPreviewSceneChanged() { * @since 4.1.0 */ void WSEvents::OnStudioModeSwitched(bool checked) { - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_bool(data, "new-state", checked); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "new-state", checked); - broadcastUpdate("StudioModeSwitched", data); + broadcastUpdate("StudioModeSwitched", data); } diff --git a/src/WSEvents.h b/src/WSEvents.h index 135fd089..7b7cf95e 100644 --- a/src/WSEvents.h +++ b/src/WSEvents.h @@ -28,83 +28,83 @@ with this program. If not, see class WSEvents : public QObject { Q_OBJECT public: - explicit WSEvents(WSServer* srv); - ~WSEvents(); - static void FrontendEventHandler( - enum obs_frontend_event event, void* privateData); - static WSEvents* Instance; - void connectSceneSignals(obs_source_t* scene); + explicit WSEvents(WSServer* srv); + ~WSEvents(); + static void FrontendEventHandler( + enum obs_frontend_event event, void* privateData); + static WSEvents* Instance; + void connectSceneSignals(obs_source_t* scene); void hookTransitionBeginEvent(); - uint64_t GetStreamingTime(); - const char* GetStreamingTimecode(); - uint64_t GetRecordingTime(); - const char* GetRecordingTimecode(); + uint64_t GetStreamingTime(); + const char* GetStreamingTimecode(); + uint64_t GetRecordingTime(); + const char* GetRecordingTimecode(); - bool HeartbeatIsActive; + bool HeartbeatIsActive; private slots: - void deferredInitOperations(); - void StreamStatus(); - void Heartbeat(); - void TransitionDurationChanged(int ms); + void deferredInitOperations(); + void StreamStatus(); + void Heartbeat(); + void TransitionDurationChanged(int ms); private: - WSServer* _srv; - OBSSource currentScene; + WSServer* _srv; + OBSSource currentScene; - bool pulse; + bool pulse; - bool _streamingActive; - bool _recordingActive; + bool _streamingActive; + bool _recordingActive; - uint64_t _streamStarttime; - uint64_t _recStarttime; + uint64_t _streamStarttime; + uint64_t _recStarttime; - uint64_t _lastBytesSent; - uint64_t _lastBytesSentTime; + uint64_t _lastBytesSent; + uint64_t _lastBytesSentTime; - void broadcastUpdate(const char* updateType, - obs_data_t* additionalFields); + void broadcastUpdate(const char* updateType, + obs_data_t* additionalFields); - void OnSceneChange(); - void OnSceneListChange(); - void OnSceneCollectionChange(); - void OnSceneCollectionListChange(); + void OnSceneChange(); + void OnSceneListChange(); + void OnSceneCollectionChange(); + void OnSceneCollectionListChange(); - void OnTransitionChange(); - void OnTransitionListChange(); + void OnTransitionChange(); + void OnTransitionListChange(); - void OnProfileChange(); - void OnProfileListChange(); + void OnProfileChange(); + void OnProfileListChange(); - void OnStreamStarting(); - void OnStreamStarted(); - void OnStreamStopping(); - void OnStreamStopped(); + void OnStreamStarting(); + void OnStreamStarted(); + void OnStreamStopping(); + void OnStreamStopped(); - void OnRecordingStarting(); - void OnRecordingStarted(); - void OnRecordingStopping(); - void OnRecordingStopped(); + void OnRecordingStarting(); + void OnRecordingStarted(); + void OnRecordingStopping(); + void OnRecordingStopped(); - void OnReplayStarting(); - void OnReplayStarted(); - void OnReplayStopping(); - void OnReplayStopped(); + void OnReplayStarting(); + void OnReplayStarted(); + void OnReplayStopping(); + void OnReplayStopped(); - void OnStudioModeSwitched(bool enabled); - void OnPreviewSceneChanged(); + void OnStudioModeSwitched(bool enabled); + void OnPreviewSceneChanged(); - void OnExit(); + void OnExit(); - static void OnTransitionBegin(void* param, calldata_t* data); + static void OnTransitionBegin(void* param, calldata_t* data); - static void OnSceneReordered(void* param, calldata_t* data); - static void OnSceneItemAdd(void* param, calldata_t* data); - static void OnSceneItemDelete(void* param, calldata_t* data); - static void OnSceneItemVisibilityChanged(void* param, calldata_t* data); + static void OnSceneReordered(void* param, calldata_t* data); + static void OnSceneItemAdd(void* param, calldata_t* data); + static void OnSceneItemDelete(void* param, calldata_t* data); + static void OnSceneItemVisibilityChanged(void* param, calldata_t* data); }; -#endif // WSEVENTS_H \ No newline at end of file +#endif // WSEVENTS_H diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 695d769c..312fe95a 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -25,62 +25,62 @@ #include "WSRequestHandler.h" QHash WSRequestHandler::messageMap { - { "GetVersion", WSRequestHandler::HandleGetVersion }, - { "GetAuthRequired", WSRequestHandler::HandleGetAuthRequired }, - { "Authenticate", WSRequestHandler::HandleAuthenticate }, + { "GetVersion", WSRequestHandler::HandleGetVersion }, + { "GetAuthRequired", WSRequestHandler::HandleGetAuthRequired }, + { "Authenticate", WSRequestHandler::HandleAuthenticate }, - { "SetHeartbeat", WSRequestHandler::HandleSetHeartbeat }, + { "SetHeartbeat", WSRequestHandler::HandleSetHeartbeat }, - { "SetFilenameFormatting", WSRequestHandler::HandleSetFilenameFormatting }, - { "GetFilenameFormatting", WSRequestHandler::HandleGetFilenameFormatting }, + { "SetFilenameFormatting", WSRequestHandler::HandleSetFilenameFormatting }, + { "GetFilenameFormatting", WSRequestHandler::HandleGetFilenameFormatting }, - { "SetCurrentScene", WSRequestHandler::HandleSetCurrentScene }, - { "GetCurrentScene", WSRequestHandler::HandleGetCurrentScene }, - { "GetSceneList", WSRequestHandler::HandleGetSceneList }, + { "SetCurrentScene", WSRequestHandler::HandleSetCurrentScene }, + { "GetCurrentScene", WSRequestHandler::HandleGetCurrentScene }, + { "GetSceneList", WSRequestHandler::HandleGetSceneList }, - { "SetSourceRender", WSRequestHandler::HandleSetSceneItemRender }, // Retrocompat - { "SetSceneItemRender", WSRequestHandler::HandleSetSceneItemRender }, - { "SetSceneItemPosition", WSRequestHandler::HandleSetSceneItemPosition }, - { "SetSceneItemTransform", WSRequestHandler::HandleSetSceneItemTransform }, - { "SetSceneItemCrop", WSRequestHandler::HandleSetSceneItemCrop }, - { "GetSceneItemProperties", WSRequestHandler::HandleGetSceneItemProperties }, - { "SetSceneItemProperties", WSRequestHandler::HandleSetSceneItemProperties }, - { "ResetSceneItem", WSRequestHandler::HandleResetSceneItem }, + { "SetSourceRender", WSRequestHandler::HandleSetSceneItemRender }, // Retrocompat + { "SetSceneItemRender", WSRequestHandler::HandleSetSceneItemRender }, + { "SetSceneItemPosition", WSRequestHandler::HandleSetSceneItemPosition }, + { "SetSceneItemTransform", WSRequestHandler::HandleSetSceneItemTransform }, + { "SetSceneItemCrop", WSRequestHandler::HandleSetSceneItemCrop }, + { "GetSceneItemProperties", WSRequestHandler::HandleGetSceneItemProperties }, + { "SetSceneItemProperties", WSRequestHandler::HandleSetSceneItemProperties }, + { "ResetSceneItem", WSRequestHandler::HandleResetSceneItem }, - { "GetStreamingStatus", WSRequestHandler::HandleGetStreamingStatus }, - { "StartStopStreaming", WSRequestHandler::HandleStartStopStreaming }, - { "StartStopRecording", WSRequestHandler::HandleStartStopRecording }, - { "StartStreaming", WSRequestHandler::HandleStartStreaming }, - { "StopStreaming", WSRequestHandler::HandleStopStreaming }, - { "StartRecording", WSRequestHandler::HandleStartRecording }, - { "StopRecording", WSRequestHandler::HandleStopRecording }, + { "GetStreamingStatus", WSRequestHandler::HandleGetStreamingStatus }, + { "StartStopStreaming", WSRequestHandler::HandleStartStopStreaming }, + { "StartStopRecording", WSRequestHandler::HandleStartStopRecording }, + { "StartStreaming", WSRequestHandler::HandleStartStreaming }, + { "StopStreaming", WSRequestHandler::HandleStopStreaming }, + { "StartRecording", WSRequestHandler::HandleStartRecording }, + { "StopRecording", WSRequestHandler::HandleStopRecording }, - { "StartStopReplayBuffer", WSRequestHandler::HandleStartStopReplayBuffer }, - { "StartReplayBuffer", WSRequestHandler::HandleStartReplayBuffer }, - { "StopReplayBuffer", WSRequestHandler::HandleStopReplayBuffer }, - { "SaveReplayBuffer", WSRequestHandler::HandleSaveReplayBuffer }, + { "StartStopReplayBuffer", WSRequestHandler::HandleStartStopReplayBuffer }, + { "StartReplayBuffer", WSRequestHandler::HandleStartReplayBuffer }, + { "StopReplayBuffer", WSRequestHandler::HandleStopReplayBuffer }, + { "SaveReplayBuffer", WSRequestHandler::HandleSaveReplayBuffer }, - { "SetRecordingFolder", WSRequestHandler::HandleSetRecordingFolder }, - { "GetRecordingFolder", WSRequestHandler::HandleGetRecordingFolder }, + { "SetRecordingFolder", WSRequestHandler::HandleSetRecordingFolder }, + { "GetRecordingFolder", WSRequestHandler::HandleGetRecordingFolder }, - { "GetTransitionList", WSRequestHandler::HandleGetTransitionList }, - { "GetCurrentTransition", WSRequestHandler::HandleGetCurrentTransition }, - { "SetCurrentTransition", WSRequestHandler::HandleSetCurrentTransition }, - { "SetTransitionDuration", WSRequestHandler::HandleSetTransitionDuration }, - { "GetTransitionDuration", WSRequestHandler::HandleGetTransitionDuration }, + { "GetTransitionList", WSRequestHandler::HandleGetTransitionList }, + { "GetCurrentTransition", WSRequestHandler::HandleGetCurrentTransition }, + { "SetCurrentTransition", WSRequestHandler::HandleSetCurrentTransition }, + { "SetTransitionDuration", WSRequestHandler::HandleSetTransitionDuration }, + { "GetTransitionDuration", WSRequestHandler::HandleGetTransitionDuration }, - { "SetVolume", WSRequestHandler::HandleSetVolume }, - { "GetVolume", WSRequestHandler::HandleGetVolume }, - { "ToggleMute", WSRequestHandler::HandleToggleMute }, - { "SetMute", WSRequestHandler::HandleSetMute }, - { "GetMute", WSRequestHandler::HandleGetMute }, - { "SetSyncOffset", WSRequestHandler::HandleSetSyncOffset }, - { "GetSyncOffset", WSRequestHandler::HandleGetSyncOffset }, - { "GetSpecialSources", WSRequestHandler::HandleGetSpecialSources }, - { "GetSourcesList", WSRequestHandler::HandleGetSourcesList }, - { "GetSourceTypesList", WSRequestHandler::HandleGetSourceTypesList }, - { "GetSourceSettings", WSRequestHandler::HandleGetSourceSettings }, - { "SetSourceSettings", WSRequestHandler::HandleSetSourceSettings }, + { "SetVolume", WSRequestHandler::HandleSetVolume }, + { "GetVolume", WSRequestHandler::HandleGetVolume }, + { "ToggleMute", WSRequestHandler::HandleToggleMute }, + { "SetMute", WSRequestHandler::HandleSetMute }, + { "GetMute", WSRequestHandler::HandleGetMute }, + { "SetSyncOffset", WSRequestHandler::HandleSetSyncOffset }, + { "GetSyncOffset", WSRequestHandler::HandleGetSyncOffset }, + { "GetSpecialSources", WSRequestHandler::HandleGetSpecialSources }, + { "GetSourcesList", WSRequestHandler::HandleGetSourcesList }, + { "GetSourceTypesList", WSRequestHandler::HandleGetSourceTypesList }, + { "GetSourceSettings", WSRequestHandler::HandleGetSourceSettings }, + { "SetSourceSettings", WSRequestHandler::HandleSetSourceSettings }, { "GetSourceFilters", WSRequestHandler::HandleGetSourceFilters }, { "AddFilterToSource", WSRequestHandler::HandleAddFilterToSource }, @@ -89,136 +89,136 @@ QHash WSRequestHandler::messageMap { { "MoveSourceFilter", WSRequestHandler::HandleMoveSourceFilter }, { "SetSourceFilterSettings", WSRequestHandler::HandleSetSourceFilterSettings }, - { "SetCurrentSceneCollection", WSRequestHandler::HandleSetCurrentSceneCollection }, - { "GetCurrentSceneCollection", WSRequestHandler::HandleGetCurrentSceneCollection }, - { "ListSceneCollections", WSRequestHandler::HandleListSceneCollections }, + { "SetCurrentSceneCollection", WSRequestHandler::HandleSetCurrentSceneCollection }, + { "GetCurrentSceneCollection", WSRequestHandler::HandleGetCurrentSceneCollection }, + { "ListSceneCollections", WSRequestHandler::HandleListSceneCollections }, - { "SetCurrentProfile", WSRequestHandler::HandleSetCurrentProfile }, - { "GetCurrentProfile", WSRequestHandler::HandleGetCurrentProfile }, - { "ListProfiles", WSRequestHandler::HandleListProfiles }, + { "SetCurrentProfile", WSRequestHandler::HandleSetCurrentProfile }, + { "GetCurrentProfile", WSRequestHandler::HandleGetCurrentProfile }, + { "ListProfiles", WSRequestHandler::HandleListProfiles }, - { "SetStreamSettings", WSRequestHandler::HandleSetStreamSettings }, - { "GetStreamSettings", WSRequestHandler::HandleGetStreamSettings }, - { "SaveStreamSettings", WSRequestHandler::HandleSaveStreamSettings }, + { "SetStreamSettings", WSRequestHandler::HandleSetStreamSettings }, + { "GetStreamSettings", WSRequestHandler::HandleGetStreamSettings }, + { "SaveStreamSettings", WSRequestHandler::HandleSaveStreamSettings }, - { "GetStudioModeStatus", WSRequestHandler::HandleGetStudioModeStatus }, - { "GetPreviewScene", WSRequestHandler::HandleGetPreviewScene }, - { "SetPreviewScene", WSRequestHandler::HandleSetPreviewScene }, - { "TransitionToProgram", WSRequestHandler::HandleTransitionToProgram }, - { "EnableStudioMode", WSRequestHandler::HandleEnableStudioMode }, - { "DisableStudioMode", WSRequestHandler::HandleDisableStudioMode }, - { "ToggleStudioMode", WSRequestHandler::HandleToggleStudioMode }, + { "GetStudioModeStatus", WSRequestHandler::HandleGetStudioModeStatus }, + { "GetPreviewScene", WSRequestHandler::HandleGetPreviewScene }, + { "SetPreviewScene", WSRequestHandler::HandleSetPreviewScene }, + { "TransitionToProgram", WSRequestHandler::HandleTransitionToProgram }, + { "EnableStudioMode", WSRequestHandler::HandleEnableStudioMode }, + { "DisableStudioMode", WSRequestHandler::HandleDisableStudioMode }, + { "ToggleStudioMode", WSRequestHandler::HandleToggleStudioMode }, - { "SetTextGDIPlusProperties", WSRequestHandler::HandleSetTextGDIPlusProperties }, - { "GetTextGDIPlusProperties", WSRequestHandler::HandleGetTextGDIPlusProperties }, + { "SetTextGDIPlusProperties", WSRequestHandler::HandleSetTextGDIPlusProperties }, + { "GetTextGDIPlusProperties", WSRequestHandler::HandleGetTextGDIPlusProperties }, - { "GetBrowserSourceProperties", WSRequestHandler::HandleGetBrowserSourceProperties }, - { "SetBrowserSourceProperties", WSRequestHandler::HandleSetBrowserSourceProperties } + { "GetBrowserSourceProperties", WSRequestHandler::HandleGetBrowserSourceProperties }, + { "SetBrowserSourceProperties", WSRequestHandler::HandleSetBrowserSourceProperties } }; QSet WSRequestHandler::authNotRequired { - "GetVersion", - "GetAuthRequired", - "Authenticate" + "GetVersion", + "GetAuthRequired", + "Authenticate" }; WSRequestHandler::WSRequestHandler(QWebSocket* client) : - _messageId(0), - _requestType(""), - data(nullptr), - _client(client) + _messageId(0), + _requestType(""), + data(nullptr), + _client(client) { } void WSRequestHandler::processIncomingMessage(QString textMessage) { - QByteArray msgData = textMessage.toUtf8(); - const char* msg = msgData.constData(); + QByteArray msgData = textMessage.toUtf8(); + const char* msg = msgData.constData(); - data = obs_data_create_from_json(msg); - if (!data) { - if (!msg) - msg = ""; + data = obs_data_create_from_json(msg); + if (!data) { + if (!msg) + msg = ""; - blog(LOG_ERROR, "invalid JSON payload received for '%s'", msg); - SendErrorResponse("invalid JSON payload"); - return; - } + blog(LOG_ERROR, "invalid JSON payload received for '%s'", msg); + SendErrorResponse("invalid JSON payload"); + return; + } - if (Config::Current()->DebugEnabled) { - blog(LOG_DEBUG, "Request >> '%s'", msg); - } + if (Config::Current()->DebugEnabled) { + blog(LOG_DEBUG, "Request >> '%s'", msg); + } - if (!hasField("request-type") - || !hasField("message-id")) - { - SendErrorResponse("missing request parameters"); - return; - } + if (!hasField("request-type") + || !hasField("message-id")) + { + SendErrorResponse("missing request parameters"); + return; + } - _requestType = obs_data_get_string(data, "request-type"); - _messageId = obs_data_get_string(data, "message-id"); + _requestType = obs_data_get_string(data, "request-type"); + _messageId = obs_data_get_string(data, "message-id"); - if (Config::Current()->AuthRequired - && (_client->property(PROP_AUTHENTICATED).toBool() == false) - && (authNotRequired.find(_requestType) == authNotRequired.end())) - { - SendErrorResponse("Not Authenticated"); - return; - } + if (Config::Current()->AuthRequired + && (_client->property(PROP_AUTHENTICATED).toBool() == false) + && (authNotRequired.find(_requestType) == authNotRequired.end())) + { + SendErrorResponse("Not Authenticated"); + return; + } - void (*handlerFunc)(WSRequestHandler*) = (messageMap[_requestType]); + void (*handlerFunc)(WSRequestHandler*) = (messageMap[_requestType]); - if (handlerFunc != nullptr) - handlerFunc(this); - else - SendErrorResponse("invalid request type"); + if (handlerFunc != nullptr) + handlerFunc(this); + else + SendErrorResponse("invalid request type"); } WSRequestHandler::~WSRequestHandler() { } void WSRequestHandler::SendOKResponse(obs_data_t* additionalFields) { - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "status", "ok"); - obs_data_set_string(response, "message-id", _messageId); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "status", "ok"); + obs_data_set_string(response, "message-id", _messageId); - if (additionalFields) - obs_data_apply(response, additionalFields); + if (additionalFields) + obs_data_apply(response, additionalFields); - SendResponse(response); + SendResponse(response); } void WSRequestHandler::SendErrorResponse(const char* errorMessage) { - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "status", "error"); - obs_data_set_string(response, "error", errorMessage); - obs_data_set_string(response, "message-id", _messageId); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "status", "error"); + obs_data_set_string(response, "error", errorMessage); + obs_data_set_string(response, "message-id", _messageId); - SendResponse(response); + SendResponse(response); } void WSRequestHandler::SendErrorResponse(obs_data_t* additionalFields) { - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "status", "error"); - obs_data_set_string(response, "message-id", _messageId); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "status", "error"); + obs_data_set_string(response, "message-id", _messageId); - if (additionalFields) - obs_data_set_obj(response, "error", additionalFields); + if (additionalFields) + obs_data_set_obj(response, "error", additionalFields); - SendResponse(response); + SendResponse(response); } void WSRequestHandler::SendResponse(obs_data_t* response) { - QString json = obs_data_get_json(response); - _client->sendTextMessage(json); + QString json = obs_data_get_json(response); + _client->sendTextMessage(json); - if (Config::Current()->DebugEnabled) - blog(LOG_DEBUG, "Response << '%s'", json.toUtf8().constData()); + if (Config::Current()->DebugEnabled) + blog(LOG_DEBUG, "Response << '%s'", json.toUtf8().constData()); } bool WSRequestHandler::hasField(QString name) { - if (!data || name.isEmpty() || name.isNull()) - return false; + if (!data || name.isEmpty() || name.isNull()) + return false; - return obs_data_has_user_value(data, name.toUtf8()); + return obs_data_has_user_value(data, name.toUtf8()); } diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 5a11ebcc..852dd096 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -31,81 +31,81 @@ with this program. If not, see #include "obs-websocket.h" class WSRequestHandler : public QObject { - Q_OBJECT + Q_OBJECT - public: - explicit WSRequestHandler(QWebSocket* client); - ~WSRequestHandler(); - void processIncomingMessage(QString textMessage); - bool hasField(QString name); + public: + explicit WSRequestHandler(QWebSocket* client); + ~WSRequestHandler(); + void processIncomingMessage(QString textMessage); + bool hasField(QString name); - private: - QWebSocket* _client; - const char* _messageId; - const char* _requestType; - OBSDataAutoRelease data; + private: + QWebSocket* _client; + const char* _messageId; + const char* _requestType; + OBSDataAutoRelease data; - void SendOKResponse(obs_data_t* additionalFields = NULL); - void SendErrorResponse(const char* errorMessage); - void SendErrorResponse(obs_data_t* additionalFields = NULL); - void SendResponse(obs_data_t* response); + void SendOKResponse(obs_data_t* additionalFields = NULL); + void SendErrorResponse(const char* errorMessage); + void SendErrorResponse(obs_data_t* additionalFields = NULL); + void SendResponse(obs_data_t* response); - static QHash messageMap; - static QSet authNotRequired; + static QHash messageMap; + static QSet authNotRequired; - static void HandleGetVersion(WSRequestHandler* req); - static void HandleGetAuthRequired(WSRequestHandler* req); - static void HandleAuthenticate(WSRequestHandler* req); + static void HandleGetVersion(WSRequestHandler* req); + static void HandleGetAuthRequired(WSRequestHandler* req); + static void HandleAuthenticate(WSRequestHandler* req); - static void HandleSetHeartbeat(WSRequestHandler* req); + static void HandleSetHeartbeat(WSRequestHandler* req); - static void HandleSetFilenameFormatting(WSRequestHandler* req); - static void HandleGetFilenameFormatting(WSRequestHandler* req); + static void HandleSetFilenameFormatting(WSRequestHandler* req); + static void HandleGetFilenameFormatting(WSRequestHandler* req); - static void HandleSetCurrentScene(WSRequestHandler* req); - static void HandleGetCurrentScene(WSRequestHandler* req); - static void HandleGetSceneList(WSRequestHandler* req); + static void HandleSetCurrentScene(WSRequestHandler* req); + static void HandleGetCurrentScene(WSRequestHandler* req); + static void HandleGetSceneList(WSRequestHandler* req); - static void HandleSetSceneItemRender(WSRequestHandler* req); - static void HandleSetSceneItemPosition(WSRequestHandler* req); - static void HandleSetSceneItemTransform(WSRequestHandler* req); - static void HandleSetSceneItemCrop(WSRequestHandler* req); - static void HandleGetSceneItemProperties(WSRequestHandler* req); - static void HandleSetSceneItemProperties(WSRequestHandler* req); - static void HandleResetSceneItem(WSRequestHandler* req); + static void HandleSetSceneItemRender(WSRequestHandler* req); + static void HandleSetSceneItemPosition(WSRequestHandler* req); + static void HandleSetSceneItemTransform(WSRequestHandler* req); + static void HandleSetSceneItemCrop(WSRequestHandler* req); + static void HandleGetSceneItemProperties(WSRequestHandler* req); + static void HandleSetSceneItemProperties(WSRequestHandler* req); + static void HandleResetSceneItem(WSRequestHandler* req); - static void HandleGetStreamingStatus(WSRequestHandler* req); - static void HandleStartStopStreaming(WSRequestHandler* req); - static void HandleStartStopRecording(WSRequestHandler* req); - static void HandleStartStreaming(WSRequestHandler* req); - static void HandleStopStreaming(WSRequestHandler* req); - static void HandleStartRecording(WSRequestHandler* req); - static void HandleStopRecording(WSRequestHandler* req); + static void HandleGetStreamingStatus(WSRequestHandler* req); + static void HandleStartStopStreaming(WSRequestHandler* req); + static void HandleStartStopRecording(WSRequestHandler* req); + static void HandleStartStreaming(WSRequestHandler* req); + static void HandleStopStreaming(WSRequestHandler* req); + static void HandleStartRecording(WSRequestHandler* req); + static void HandleStopRecording(WSRequestHandler* req); - static void HandleStartStopReplayBuffer(WSRequestHandler* req); - static void HandleStartReplayBuffer(WSRequestHandler* req); - static void HandleStopReplayBuffer(WSRequestHandler* req); - static void HandleSaveReplayBuffer(WSRequestHandler* req); + static void HandleStartStopReplayBuffer(WSRequestHandler* req); + static void HandleStartReplayBuffer(WSRequestHandler* req); + static void HandleStopReplayBuffer(WSRequestHandler* req); + static void HandleSaveReplayBuffer(WSRequestHandler* req); - static void HandleSetRecordingFolder(WSRequestHandler* req); - static void HandleGetRecordingFolder(WSRequestHandler* req); + static void HandleSetRecordingFolder(WSRequestHandler* req); + static void HandleGetRecordingFolder(WSRequestHandler* req); - static void HandleGetTransitionList(WSRequestHandler* req); - static void HandleGetCurrentTransition(WSRequestHandler* req); - static void HandleSetCurrentTransition(WSRequestHandler* req); + static void HandleGetTransitionList(WSRequestHandler* req); + static void HandleGetCurrentTransition(WSRequestHandler* req); + static void HandleSetCurrentTransition(WSRequestHandler* req); - static void HandleSetVolume(WSRequestHandler* req); - static void HandleGetVolume(WSRequestHandler* req); - static void HandleToggleMute(WSRequestHandler* req); - static void HandleSetMute(WSRequestHandler* req); - static void HandleGetMute(WSRequestHandler* req); - static void HandleSetSyncOffset(WSRequestHandler* req); - static void HandleGetSyncOffset(WSRequestHandler* req); - static void HandleGetSpecialSources(WSRequestHandler* req); - static void HandleGetSourcesList(WSRequestHandler* req); - static void HandleGetSourceTypesList(WSRequestHandler* req); - static void HandleGetSourceSettings(WSRequestHandler* req); - static void HandleSetSourceSettings(WSRequestHandler* req); + static void HandleSetVolume(WSRequestHandler* req); + static void HandleGetVolume(WSRequestHandler* req); + static void HandleToggleMute(WSRequestHandler* req); + static void HandleSetMute(WSRequestHandler* req); + static void HandleGetMute(WSRequestHandler* req); + static void HandleSetSyncOffset(WSRequestHandler* req); + static void HandleGetSyncOffset(WSRequestHandler* req); + static void HandleGetSpecialSources(WSRequestHandler* req); + static void HandleGetSourcesList(WSRequestHandler* req); + static void HandleGetSourceTypesList(WSRequestHandler* req); + static void HandleGetSourceSettings(WSRequestHandler* req); + static void HandleSetSourceSettings(WSRequestHandler* req); static void HandleGetSourceFilters(WSRequestHandler* req); static void HandleAddFilterToSource(WSRequestHandler* req); @@ -114,33 +114,33 @@ class WSRequestHandler : public QObject { static void HandleMoveSourceFilter(WSRequestHandler* req); static void HandleSetSourceFilterSettings(WSRequestHandler* req); - static void HandleSetCurrentSceneCollection(WSRequestHandler* req); - static void HandleGetCurrentSceneCollection(WSRequestHandler* req); - static void HandleListSceneCollections(WSRequestHandler* req); + static void HandleSetCurrentSceneCollection(WSRequestHandler* req); + static void HandleGetCurrentSceneCollection(WSRequestHandler* req); + static void HandleListSceneCollections(WSRequestHandler* req); - static void HandleSetCurrentProfile(WSRequestHandler* req); - static void HandleGetCurrentProfile(WSRequestHandler* req); - static void HandleListProfiles(WSRequestHandler* req); + static void HandleSetCurrentProfile(WSRequestHandler* req); + static void HandleGetCurrentProfile(WSRequestHandler* req); + static void HandleListProfiles(WSRequestHandler* req); - static void HandleSetStreamSettings(WSRequestHandler* req); - static void HandleGetStreamSettings(WSRequestHandler* req); - static void HandleSaveStreamSettings(WSRequestHandler* req); + static void HandleSetStreamSettings(WSRequestHandler* req); + static void HandleGetStreamSettings(WSRequestHandler* req); + static void HandleSaveStreamSettings(WSRequestHandler* req); - static void HandleSetTransitionDuration(WSRequestHandler* req); - static void HandleGetTransitionDuration(WSRequestHandler* req); + static void HandleSetTransitionDuration(WSRequestHandler* req); + static void HandleGetTransitionDuration(WSRequestHandler* req); - static void HandleGetStudioModeStatus(WSRequestHandler* req); - static void HandleGetPreviewScene(WSRequestHandler* req); - static void HandleSetPreviewScene(WSRequestHandler* req); - static void HandleTransitionToProgram(WSRequestHandler* req); - static void HandleEnableStudioMode(WSRequestHandler* req); - static void HandleDisableStudioMode(WSRequestHandler* req); - static void HandleToggleStudioMode(WSRequestHandler* req); + static void HandleGetStudioModeStatus(WSRequestHandler* req); + static void HandleGetPreviewScene(WSRequestHandler* req); + static void HandleSetPreviewScene(WSRequestHandler* req); + static void HandleTransitionToProgram(WSRequestHandler* req); + static void HandleEnableStudioMode(WSRequestHandler* req); + static void HandleDisableStudioMode(WSRequestHandler* req); + static void HandleToggleStudioMode(WSRequestHandler* req); - static void HandleSetTextGDIPlusProperties(WSRequestHandler* req); - static void HandleGetTextGDIPlusProperties(WSRequestHandler* req); - static void HandleSetBrowserSourceProperties(WSRequestHandler* req); - static void HandleGetBrowserSourceProperties(WSRequestHandler* req); + static void HandleSetTextGDIPlusProperties(WSRequestHandler* req); + static void HandleGetTextGDIPlusProperties(WSRequestHandler* req); + static void HandleSetBrowserSourceProperties(WSRequestHandler* req); + static void HandleGetBrowserSourceProperties(WSRequestHandler* req); }; #endif // WSPROTOCOL_H diff --git a/src/WSRequestHandler_General.cpp b/src/WSRequestHandler_General.cpp index 54e8f3de..6e98e519 100644 --- a/src/WSRequestHandler_General.cpp +++ b/src/WSRequestHandler_General.cpp @@ -20,24 +20,24 @@ * @since 0.3 */ void WSRequestHandler::HandleGetVersion(WSRequestHandler* req) { - QString obsVersion = Utils::OBSVersionString(); + QString obsVersion = Utils::OBSVersionString(); - QList names = req->messageMap.keys(); - names.sort(Qt::CaseInsensitive); + QList names = req->messageMap.keys(); + names.sort(Qt::CaseInsensitive); - // (Palakis) OBS' data arrays only support object arrays, so I improvised. - QString requests; - requests += names.takeFirst(); - for (QString reqName : names) { - requests += ("," + reqName); - } + // (Palakis) OBS' data arrays only support object arrays, so I improvised. + QString requests; + requests += names.takeFirst(); + for (QString reqName : names) { + requests += ("," + reqName); + } - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "obs-websocket-version", OBS_WEBSOCKET_VERSION); - obs_data_set_string(data, "obs-studio-version", obsVersion.toUtf8()); - obs_data_set_string(data, "available-requests", requests.toUtf8()); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_string(data, "obs-websocket-version", OBS_WEBSOCKET_VERSION); + obs_data_set_string(data, "obs-studio-version", obsVersion.toUtf8()); + obs_data_set_string(data, "available-requests", requests.toUtf8()); - req->SendOKResponse(data); + req->SendOKResponse(data); } /** @@ -54,19 +54,19 @@ * @since 0.3 */ void WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) { - bool authRequired = Config::Current()->AuthRequired; + bool authRequired = Config::Current()->AuthRequired; - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_bool(data, "authRequired", authRequired); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "authRequired", authRequired); - if (authRequired) { - obs_data_set_string(data, "challenge", - Config::Current()->SessionChallenge.toUtf8()); - obs_data_set_string(data, "salt", - Config::Current()->Salt.toUtf8()); - } + if (authRequired) { + obs_data_set_string(data, "challenge", + Config::Current()->SessionChallenge.toUtf8()); + obs_data_set_string(data, "salt", + Config::Current()->Salt.toUtf8()); + } - req->SendOKResponse(data); + req->SendOKResponse(data); } /** @@ -80,25 +80,25 @@ void WSRequestHandler::HandleGetAuthRequired(WSRequestHandler* req) { * @since 0.3 */ void WSRequestHandler::HandleAuthenticate(WSRequestHandler* req) { - if (!req->hasField("auth")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("auth")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString auth = obs_data_get_string(req->data, "auth"); - if (auth.isEmpty()) { - req->SendErrorResponse("auth not specified!"); - return; - } + QString auth = obs_data_get_string(req->data, "auth"); + if (auth.isEmpty()) { + req->SendErrorResponse("auth not specified!"); + return; + } - if ((req->_client->property(PROP_AUTHENTICATED).toBool() == false) - && Config::Current()->CheckAuth(auth)) - { - req->_client->setProperty(PROP_AUTHENTICATED, true); - req->SendOKResponse(); - } else { - req->SendErrorResponse("Authentication Failed."); - } + if ((req->_client->property(PROP_AUTHENTICATED).toBool() == false) + && Config::Current()->CheckAuth(auth)) + { + req->_client->setProperty(PROP_AUTHENTICATED, true); + req->SendOKResponse(); + } else { + req->SendErrorResponse("Authentication Failed."); + } } /** @@ -112,18 +112,18 @@ void WSRequestHandler::HandleAuthenticate(WSRequestHandler* req) { * @since 4.3.0 */ void WSRequestHandler::HandleSetHeartbeat(WSRequestHandler* req) { - if (!req->hasField("enable")) { - req->SendErrorResponse("Heartbeat parameter missing"); - return; - } + if (!req->hasField("enable")) { + req->SendErrorResponse("Heartbeat parameter missing"); + return; + } - WSEvents::Instance->HeartbeatIsActive = - obs_data_get_bool(req->data, "enable"); + WSEvents::Instance->HeartbeatIsActive = + obs_data_get_bool(req->data, "enable"); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_bool(response, "enable", - WSEvents::Instance->HeartbeatIsActive); - req->SendOKResponse(response); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_bool(response, "enable", + WSEvents::Instance->HeartbeatIsActive); + req->SendOKResponse(response); } /** @@ -137,18 +137,18 @@ void WSRequestHandler::HandleAuthenticate(WSRequestHandler* req) { * @since 4.3.0 */ void WSRequestHandler::HandleSetFilenameFormatting(WSRequestHandler* req) { - if (!req->hasField("filename-formatting")) { - req->SendErrorResponse(" parameter missing"); - return; - } + if (!req->hasField("filename-formatting")) { + req->SendErrorResponse(" parameter missing"); + return; + } - QString filenameFormatting = obs_data_get_string(req->data, "filename-formatting"); - if (!filenameFormatting.isEmpty()) { - Utils::SetFilenameFormatting(filenameFormatting.toUtf8()); - req->SendOKResponse(); - } else { - req->SendErrorResponse("invalid request parameters"); - } + QString filenameFormatting = obs_data_get_string(req->data, "filename-formatting"); + if (!filenameFormatting.isEmpty()) { + Utils::SetFilenameFormatting(filenameFormatting.toUtf8()); + req->SendOKResponse(); + } else { + req->SendErrorResponse("invalid request parameters"); + } } /** @@ -162,7 +162,7 @@ void WSRequestHandler::HandleSetFilenameFormatting(WSRequestHandler* req) { * @since 4.3.0 */ void WSRequestHandler::HandleGetFilenameFormatting(WSRequestHandler* req) { - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "filename-formatting", Utils::GetFilenameFormatting()); - req->SendOKResponse(response); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "filename-formatting", Utils::GetFilenameFormatting()); + req->SendOKResponse(response); } diff --git a/src/WSRequestHandler_Profiles.cpp b/src/WSRequestHandler_Profiles.cpp index b9f2b5d6..e5812e6d 100644 --- a/src/WSRequestHandler_Profiles.cpp +++ b/src/WSRequestHandler_Profiles.cpp @@ -14,19 +14,19 @@ * @since 4.0.0 */ void WSRequestHandler::HandleSetCurrentProfile(WSRequestHandler* req) { - if (!req->hasField("profile-name")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("profile-name")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString profileName = obs_data_get_string(req->data, "profile-name"); - if (!profileName.isEmpty()) { - // TODO : check if profile exists - obs_frontend_set_current_profile(profileName.toUtf8()); - req->SendOKResponse(); - } else { - req->SendErrorResponse("invalid request parameters"); - } + QString profileName = obs_data_get_string(req->data, "profile-name"); + if (!profileName.isEmpty()) { + // TODO : check if profile exists + obs_frontend_set_current_profile(profileName.toUtf8()); + req->SendOKResponse(); + } else { + req->SendErrorResponse("invalid request parameters"); + } } /** @@ -40,11 +40,11 @@ * @since 4.0.0 */ void WSRequestHandler::HandleGetCurrentProfile(WSRequestHandler* req) { - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "profile-name", - obs_frontend_get_current_profile()); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "profile-name", + obs_frontend_get_current_profile()); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -58,13 +58,13 @@ void WSRequestHandler::HandleGetCurrentProfile(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleListProfiles(WSRequestHandler* req) { - char** profiles = obs_frontend_get_profiles(); - OBSDataArrayAutoRelease list = - Utils::StringListToArray(profiles, "profile-name"); - bfree(profiles); + char** profiles = obs_frontend_get_profiles(); + OBSDataArrayAutoRelease list = + Utils::StringListToArray(profiles, "profile-name"); + bfree(profiles); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_array(response, "profiles", list); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_array(response, "profiles", list); - req->SendOKResponse(response); + req->SendOKResponse(response); } diff --git a/src/WSRequestHandler_Recording.cpp b/src/WSRequestHandler_Recording.cpp index 16c525f1..9c38b1c2 100644 --- a/src/WSRequestHandler_Recording.cpp +++ b/src/WSRequestHandler_Recording.cpp @@ -12,12 +12,12 @@ * @since 0.3 */ void WSRequestHandler::HandleStartStopRecording(WSRequestHandler* req) { - if (obs_frontend_recording_active()) - obs_frontend_recording_stop(); - else - obs_frontend_recording_start(); + if (obs_frontend_recording_active()) + obs_frontend_recording_stop(); + else + obs_frontend_recording_start(); - req->SendOKResponse(); + req->SendOKResponse(); } /** @@ -30,12 +30,12 @@ * @since 4.1.0 */ void WSRequestHandler::HandleStartRecording(WSRequestHandler* req) { - if (obs_frontend_recording_active() == false) { - obs_frontend_recording_start(); - req->SendOKResponse(); - } else { - req->SendErrorResponse("recording already active"); - } + if (obs_frontend_recording_active() == false) { + obs_frontend_recording_start(); + req->SendOKResponse(); + } else { + req->SendErrorResponse("recording already active"); + } } /** @@ -48,12 +48,12 @@ * @since 4.1.0 */ void WSRequestHandler::HandleStopRecording(WSRequestHandler* req) { - if (obs_frontend_recording_active() == true) { - obs_frontend_recording_stop(); - req->SendOKResponse(); - } else { - req->SendErrorResponse("recording not active"); - } + if (obs_frontend_recording_active() == true) { + obs_frontend_recording_stop(); + req->SendOKResponse(); + } else { + req->SendErrorResponse("recording not active"); + } } /** @@ -67,17 +67,17 @@ void WSRequestHandler::HandleStopRecording(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleSetRecordingFolder(WSRequestHandler* req) { - if (!req->hasField("rec-folder")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("rec-folder")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* newRecFolder = obs_data_get_string(req->data, "rec-folder"); - bool success = Utils::SetRecordingFolder(newRecFolder); - if (success) - req->SendOKResponse(); - else - req->SendErrorResponse("invalid request parameters"); + const char* newRecFolder = obs_data_get_string(req->data, "rec-folder"); + bool success = Utils::SetRecordingFolder(newRecFolder); + if (success) + req->SendOKResponse(); + else + req->SendErrorResponse("invalid request parameters"); } /** @@ -91,10 +91,10 @@ void WSRequestHandler::HandleStopRecording(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleGetRecordingFolder(WSRequestHandler* req) { - const char* recFolder = Utils::GetRecordingFolder(); + const char* recFolder = Utils::GetRecordingFolder(); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "rec-folder", recFolder); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "rec-folder", recFolder); - req->SendOKResponse(response); + req->SendOKResponse(response); } diff --git a/src/WSRequestHandler_ReplayBuffer.cpp b/src/WSRequestHandler_ReplayBuffer.cpp index 0250ef02..a0daad41 100644 --- a/src/WSRequestHandler_ReplayBuffer.cpp +++ b/src/WSRequestHandler_ReplayBuffer.cpp @@ -12,12 +12,12 @@ * @since 4.2.0 */ void WSRequestHandler::HandleStartStopReplayBuffer(WSRequestHandler* req) { - if (obs_frontend_replay_buffer_active()) { - obs_frontend_replay_buffer_stop(); - } else { - Utils::StartReplayBuffer(); - } - req->SendOKResponse(); + if (obs_frontend_replay_buffer_active()) { + obs_frontend_replay_buffer_stop(); + } else { + Utils::StartReplayBuffer(); + } + req->SendOKResponse(); } /** @@ -33,18 +33,18 @@ void WSRequestHandler::HandleStartStopReplayBuffer(WSRequestHandler* req) { * @since 4.2.0 */ void WSRequestHandler::HandleStartReplayBuffer(WSRequestHandler* req) { - if (!Utils::ReplayBufferEnabled()) { - req->SendErrorResponse("replay buffer disabled in settings"); - return; - } + if (!Utils::ReplayBufferEnabled()) { + req->SendErrorResponse("replay buffer disabled in settings"); + return; + } - if (obs_frontend_replay_buffer_active() == true) { - req->SendErrorResponse("replay buffer already active"); - return; - } + if (obs_frontend_replay_buffer_active() == true) { + req->SendErrorResponse("replay buffer already active"); + return; + } - Utils::StartReplayBuffer(); - req->SendOKResponse(); + Utils::StartReplayBuffer(); + req->SendOKResponse(); } /** @@ -57,12 +57,12 @@ void WSRequestHandler::HandleStartReplayBuffer(WSRequestHandler* req) { * @since 4.2.0 */ void WSRequestHandler::HandleStopReplayBuffer(WSRequestHandler* req) { - if (obs_frontend_replay_buffer_active() == true) { - obs_frontend_replay_buffer_stop(); - req->SendOKResponse(); - } else { - req->SendErrorResponse("replay buffer not active"); - } + if (obs_frontend_replay_buffer_active() == true) { + obs_frontend_replay_buffer_stop(); + req->SendOKResponse(); + } else { + req->SendErrorResponse("replay buffer not active"); + } } /** @@ -76,17 +76,17 @@ void WSRequestHandler::HandleStopReplayBuffer(WSRequestHandler* req) { * @since 4.2.0 */ void WSRequestHandler::HandleSaveReplayBuffer(WSRequestHandler* req) { - if (!obs_frontend_replay_buffer_active()) { - req->SendErrorResponse("replay buffer not active"); - return; - } + if (!obs_frontend_replay_buffer_active()) { + req->SendErrorResponse("replay buffer not active"); + return; + } - OBSOutputAutoRelease replayOutput = obs_frontend_get_replay_buffer_output(); + OBSOutputAutoRelease replayOutput = obs_frontend_get_replay_buffer_output(); - calldata_t cd = { 0 }; - proc_handler_t* ph = obs_output_get_proc_handler(replayOutput); - proc_handler_call(ph, "save", &cd); - calldata_free(&cd); + calldata_t cd = { 0 }; + proc_handler_t* ph = obs_output_get_proc_handler(replayOutput); + proc_handler_call(ph, "save", &cd); + calldata_free(&cd); - req->SendOKResponse(); + req->SendOKResponse(); } diff --git a/src/WSRequestHandler_SceneCollections.cpp b/src/WSRequestHandler_SceneCollections.cpp index 69456b7b..cd661f17 100644 --- a/src/WSRequestHandler_SceneCollections.cpp +++ b/src/WSRequestHandler_SceneCollections.cpp @@ -14,19 +14,19 @@ * @since 4.0.0 */ void WSRequestHandler::HandleSetCurrentSceneCollection(WSRequestHandler* req) { - if (!req->hasField("sc-name")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("sc-name")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString sceneCollection = obs_data_get_string(req->data, "sc-name"); - if (!sceneCollection.isEmpty()) { - // TODO : Check if specified profile exists and if changing is allowed - obs_frontend_set_current_scene_collection(sceneCollection.toUtf8()); - req->SendOKResponse(); - } else { - req->SendErrorResponse("invalid request parameters"); - } + QString sceneCollection = obs_data_get_string(req->data, "sc-name"); + if (!sceneCollection.isEmpty()) { + // TODO : Check if specified profile exists and if changing is allowed + obs_frontend_set_current_scene_collection(sceneCollection.toUtf8()); + req->SendOKResponse(); + } else { + req->SendErrorResponse("invalid request parameters"); + } } /** @@ -40,11 +40,11 @@ * @since 4.0.0 */ void WSRequestHandler::HandleGetCurrentSceneCollection(WSRequestHandler* req) { - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "sc-name", - obs_frontend_get_current_scene_collection()); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "sc-name", + obs_frontend_get_current_scene_collection()); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -59,13 +59,13 @@ void WSRequestHandler::HandleGetCurrentSceneCollection(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleListSceneCollections(WSRequestHandler* req) { - char** sceneCollections = obs_frontend_get_scene_collections(); - OBSDataArrayAutoRelease list = - Utils::StringListToArray(sceneCollections, "sc-name"); - bfree(sceneCollections); + char** sceneCollections = obs_frontend_get_scene_collections(); + OBSDataArrayAutoRelease list = + Utils::StringListToArray(sceneCollections, "sc-name"); + bfree(sceneCollections); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_array(response, "scene-collections", list); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_array(response, "scene-collections", list); - req->SendOKResponse(response); + req->SendOKResponse(response); } diff --git a/src/WSRequestHandler_Scenes.cpp b/src/WSRequestHandler_Scenes.cpp index e0998319..f15a76ac 100644 --- a/src/WSRequestHandler_Scenes.cpp +++ b/src/WSRequestHandler_Scenes.cpp @@ -14,20 +14,20 @@ * @since 0.3 */ void WSRequestHandler::HandleSetCurrentScene(WSRequestHandler* req) { - if (!req->hasField("scene-name")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("scene-name")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* sceneName = obs_data_get_string(req->data, "scene-name"); - OBSSourceAutoRelease source = obs_get_source_by_name(sceneName); + const char* sceneName = obs_data_get_string(req->data, "scene-name"); + OBSSourceAutoRelease source = obs_get_source_by_name(sceneName); - if (source) { - obs_frontend_set_current_scene(source); - req->SendOKResponse(); - } else { - req->SendErrorResponse("requested scene does not exist"); - } + if (source) { + obs_frontend_set_current_scene(source); + req->SendOKResponse(); + } else { + req->SendErrorResponse("requested scene does not exist"); + } } /** @@ -42,14 +42,14 @@ * @since 0.3 */ void WSRequestHandler::HandleGetCurrentScene(WSRequestHandler* req) { - OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); - OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(currentScene); + OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); + OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(currentScene); - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "name", obs_source_get_name(currentScene)); - obs_data_set_array(data, "sources", sceneItems); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_string(data, "name", obs_source_get_name(currentScene)); + obs_data_set_array(data, "sources", sceneItems); - req->SendOKResponse(data); + req->SendOKResponse(data); } /** @@ -64,13 +64,13 @@ void WSRequestHandler::HandleGetCurrentScene(WSRequestHandler* req) { * @since 0.3 */ void WSRequestHandler::HandleGetSceneList(WSRequestHandler* req) { - OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); - OBSDataArrayAutoRelease scenes = Utils::GetScenes(); + OBSSourceAutoRelease currentScene = obs_frontend_get_current_scene(); + OBSDataArrayAutoRelease scenes = Utils::GetScenes(); - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "current-scene", - obs_source_get_name(currentScene)); - obs_data_set_array(data, "scenes", scenes); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_string(data, "current-scene", + obs_source_get_name(currentScene)); + obs_data_set_array(data, "scenes", scenes); - req->SendOKResponse(data); + req->SendOKResponse(data); } diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 1f2b6d29..8e0c861e 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -17,48 +17,48 @@ * @since 4.3.0 */ void WSRequestHandler::HandleGetSourcesList(WSRequestHandler* req) { - OBSDataArrayAutoRelease sourcesArray = obs_data_array_create(); + OBSDataArrayAutoRelease sourcesArray = obs_data_array_create(); - auto sourceEnumProc = [](void* privateData, obs_source_t* source) -> bool { - obs_data_array_t* sourcesArray = (obs_data_array_t*)privateData; + auto sourceEnumProc = [](void* privateData, obs_source_t* source) -> bool { + obs_data_array_t* sourcesArray = (obs_data_array_t*)privateData; - OBSDataAutoRelease sourceData = obs_data_create(); - obs_data_set_string(sourceData, "name", obs_source_get_name(source)); - obs_data_set_string(sourceData, "typeId", obs_source_get_id(source)); + OBSDataAutoRelease sourceData = obs_data_create(); + obs_data_set_string(sourceData, "name", obs_source_get_name(source)); + obs_data_set_string(sourceData, "typeId", obs_source_get_id(source)); - QString typeString = ""; - enum obs_source_type sourceType = obs_source_get_type(source); - switch (sourceType) { - case OBS_SOURCE_TYPE_INPUT: - typeString = "input"; - break; + QString typeString = ""; + enum obs_source_type sourceType = obs_source_get_type(source); + switch (sourceType) { + case OBS_SOURCE_TYPE_INPUT: + typeString = "input"; + break; - case OBS_SOURCE_TYPE_FILTER: - typeString = "filter"; - break; + case OBS_SOURCE_TYPE_FILTER: + typeString = "filter"; + break; - case OBS_SOURCE_TYPE_TRANSITION: - typeString = "transition"; - break; + case OBS_SOURCE_TYPE_TRANSITION: + typeString = "transition"; + break; - case OBS_SOURCE_TYPE_SCENE: - typeString = "scene"; - break; + case OBS_SOURCE_TYPE_SCENE: + typeString = "scene"; + break; - default: - typeString = "unknown"; - break; - } - obs_data_set_string(sourceData, "type", typeString.toUtf8()); + default: + typeString = "unknown"; + break; + } + obs_data_set_string(sourceData, "type", typeString.toUtf8()); - obs_data_array_push_back(sourcesArray, sourceData); - return true; - }; - obs_enum_sources(sourceEnumProc, sourcesArray); + obs_data_array_push_back(sourcesArray, sourceData); + return true; + }; + obs_enum_sources(sourceEnumProc, sourcesArray); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_array(response, "sources", sourcesArray); - req->SendOKResponse(response); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_array(response, "sources", sourcesArray); + req->SendOKResponse(response); } /** @@ -84,58 +84,58 @@ void WSRequestHandler::HandleGetSourcesList(WSRequestHandler* req) { * @since 4.3.0 */ void WSRequestHandler::HandleGetSourceTypesList(WSRequestHandler* req) { - OBSDataArrayAutoRelease idsArray = obs_data_array_create(); + OBSDataArrayAutoRelease idsArray = obs_data_array_create(); - const char* id; - size_t idx = 0; + const char* id; + size_t idx = 0; - QHash idTypes; + QHash idTypes; - idx = 0; - while (obs_enum_input_types(idx++, &id)) { - idTypes.insert(id, "input"); - } + idx = 0; + while (obs_enum_input_types(idx++, &id)) { + idTypes.insert(id, "input"); + } - idx = 0; - while (obs_enum_filter_types(idx++, &id)) { - idTypes.insert(id, "filter"); - } + idx = 0; + while (obs_enum_filter_types(idx++, &id)) { + idTypes.insert(id, "filter"); + } - idx = 0; - while (obs_enum_transition_types(idx++, &id)) { - idTypes.insert(id, "transition"); - } + idx = 0; + while (obs_enum_transition_types(idx++, &id)) { + idTypes.insert(id, "transition"); + } - idx = 0; - while (obs_enum_source_types(idx++, &id)) { - OBSDataAutoRelease item = obs_data_create(); + idx = 0; + while (obs_enum_source_types(idx++, &id)) { + OBSDataAutoRelease item = obs_data_create(); - obs_data_set_string(item, "typeId", id); - obs_data_set_string(item, "displayName", obs_source_get_display_name(id)); - obs_data_set_string(item, "type", idTypes.value(id, "other").toUtf8()); + obs_data_set_string(item, "typeId", id); + obs_data_set_string(item, "displayName", obs_source_get_display_name(id)); + obs_data_set_string(item, "type", idTypes.value(id, "other").toUtf8()); - uint32_t caps = obs_get_source_output_flags(id); - OBSDataAutoRelease capsData = obs_data_create(); - obs_data_set_bool(capsData, "isAsync", caps & OBS_SOURCE_ASYNC); - obs_data_set_bool(capsData, "hasVideo", caps & OBS_SOURCE_VIDEO); - obs_data_set_bool(capsData, "hasAudio", caps & OBS_SOURCE_AUDIO); - obs_data_set_bool(capsData, "canInteract", caps & OBS_SOURCE_INTERACTION); - obs_data_set_bool(capsData, "isComposite", caps & OBS_SOURCE_COMPOSITE); - obs_data_set_bool(capsData, "doNotDuplicate", caps & OBS_SOURCE_DO_NOT_DUPLICATE); - obs_data_set_bool(capsData, "doNotSelfMonitor", caps & OBS_SOURCE_DO_NOT_SELF_MONITOR); - obs_data_set_bool(capsData, "isDeprecated", caps & OBS_SOURCE_DEPRECATED); + uint32_t caps = obs_get_source_output_flags(id); + OBSDataAutoRelease capsData = obs_data_create(); + obs_data_set_bool(capsData, "isAsync", caps & OBS_SOURCE_ASYNC); + obs_data_set_bool(capsData, "hasVideo", caps & OBS_SOURCE_VIDEO); + obs_data_set_bool(capsData, "hasAudio", caps & OBS_SOURCE_AUDIO); + obs_data_set_bool(capsData, "canInteract", caps & OBS_SOURCE_INTERACTION); + obs_data_set_bool(capsData, "isComposite", caps & OBS_SOURCE_COMPOSITE); + obs_data_set_bool(capsData, "doNotDuplicate", caps & OBS_SOURCE_DO_NOT_DUPLICATE); + obs_data_set_bool(capsData, "doNotSelfMonitor", caps & OBS_SOURCE_DO_NOT_SELF_MONITOR); + obs_data_set_bool(capsData, "isDeprecated", caps & OBS_SOURCE_DEPRECATED); - obs_data_set_obj(item, "caps", capsData); + obs_data_set_obj(item, "caps", capsData); - OBSDataAutoRelease defaultSettings = obs_get_source_defaults(id); - obs_data_set_obj(item, "defaultSettings", defaultSettings); + OBSDataAutoRelease defaultSettings = obs_get_source_defaults(id); + obs_data_set_obj(item, "defaultSettings", defaultSettings); - obs_data_array_push_back(idsArray, item); - } + obs_data_array_push_back(idsArray, item); + } - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_array(response, "types", idsArray); - req->SendOKResponse(response); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_array(response, "types", idsArray); + req->SendOKResponse(response); } /** @@ -153,25 +153,25 @@ void WSRequestHandler::HandleGetSourceTypesList(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleGetVolume(WSRequestHandler* req) { - if (!req->hasField("source")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("source")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString sourceName = obs_data_get_string(req->data, "source"); - if (!sourceName.isEmpty()) { - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + QString sourceName = obs_data_get_string(req->data, "source"); + if (!sourceName.isEmpty()) { + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "name", sourceName.toUtf8()); - obs_data_set_double(response, "volume", obs_source_get_volume(source)); - obs_data_set_bool(response, "muted", obs_source_muted(source)); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "name", sourceName.toUtf8()); + obs_data_set_double(response, "volume", obs_source_get_volume(source)); + obs_data_set_bool(response, "muted", obs_source_muted(source)); - req->SendOKResponse(response); - } - else { - req->SendErrorResponse("invalid request parameters"); - } + req->SendOKResponse(response); + } + else { + req->SendErrorResponse("invalid request parameters"); + } } /** @@ -186,30 +186,30 @@ void WSRequestHandler::HandleGetVolume(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleSetVolume(WSRequestHandler* req) { - if (!req->hasField("source") || - !req->hasField("volume")) - { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("source") || + !req->hasField("volume")) + { + req->SendErrorResponse("missing request parameters"); + return; + } - QString sourceName = obs_data_get_string(req->data, "source"); - float sourceVolume = obs_data_get_double(req->data, "volume"); + QString sourceName = obs_data_get_string(req->data, "source"); + float sourceVolume = obs_data_get_double(req->data, "volume"); - if (sourceName.isEmpty() || - sourceVolume < 0.0 || sourceVolume > 1.0) { - req->SendErrorResponse("invalid request parameters"); - return; - } + if (sourceName.isEmpty() || + sourceVolume < 0.0 || sourceVolume > 1.0) { + req->SendErrorResponse("invalid request parameters"); + return; + } - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); - if (!source) { - req->SendErrorResponse("specified source doesn't exist"); - return; - } + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } - obs_source_set_volume(source, sourceVolume); - req->SendOKResponse(); + obs_source_set_volume(source, sourceVolume); + req->SendOKResponse(); } /** @@ -226,28 +226,28 @@ void WSRequestHandler::HandleGetVolume(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleGetMute(WSRequestHandler* req) { - if (!req->hasField("source")) { - req->SendErrorResponse("mssing request parameters"); - return; - } + if (!req->hasField("source")) { + req->SendErrorResponse("mssing request parameters"); + return; + } - QString sourceName = obs_data_get_string(req->data, "source"); - if (sourceName.isEmpty()) { - req->SendErrorResponse("invalid request parameters"); - return; - } + QString sourceName = obs_data_get_string(req->data, "source"); + if (sourceName.isEmpty()) { + req->SendErrorResponse("invalid request parameters"); + return; + } - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); - if (!source) { - req->SendErrorResponse("specified source doesn't exist"); - return; - } + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "name", obs_source_get_name(source)); - obs_data_set_bool(response, "muted", obs_source_muted(source)); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "name", obs_source_get_name(source)); + obs_data_set_bool(response, "muted", obs_source_muted(source)); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -262,28 +262,28 @@ void WSRequestHandler::HandleGetMute(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleSetMute(WSRequestHandler* req) { - if (!req->hasField("source") || - !req->hasField("mute")) { - req->SendErrorResponse("mssing request parameters"); - return; - } + if (!req->hasField("source") || + !req->hasField("mute")) { + req->SendErrorResponse("mssing request parameters"); + return; + } - QString sourceName = obs_data_get_string(req->data, "source"); - bool mute = obs_data_get_bool(req->data, "mute"); + QString sourceName = obs_data_get_string(req->data, "source"); + bool mute = obs_data_get_bool(req->data, "mute"); - if (sourceName.isEmpty()) { - req->SendErrorResponse("invalid request parameters"); - return; - } + if (sourceName.isEmpty()) { + req->SendErrorResponse("invalid request parameters"); + return; + } - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); - if (!source) { - req->SendErrorResponse("specified source doesn't exist"); - return; - } + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } - obs_source_set_muted(source, mute); - req->SendOKResponse(); + obs_source_set_muted(source, mute); + req->SendOKResponse(); } /** @@ -297,25 +297,25 @@ void WSRequestHandler::HandleSetMute(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleToggleMute(WSRequestHandler* req) { - if (!req->hasField("source")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("source")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString sourceName = obs_data_get_string(req->data, "source"); - if (sourceName.isEmpty()) { - req->SendErrorResponse("invalid request parameters"); - return; - } + QString sourceName = obs_data_get_string(req->data, "source"); + if (sourceName.isEmpty()) { + req->SendErrorResponse("invalid request parameters"); + return; + } - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); - if (!source) { - req->SendErrorResponse("invalid request parameters"); - return; - } + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + req->SendErrorResponse("invalid request parameters"); + return; + } - obs_source_set_muted(source, !obs_source_muted(source)); - req->SendOKResponse(); + obs_source_set_muted(source, !obs_source_muted(source)); + req->SendOKResponse(); } /** @@ -330,27 +330,27 @@ void WSRequestHandler::HandleToggleMute(WSRequestHandler* req) { * @since 4.2.0 */ void WSRequestHandler::HandleSetSyncOffset(WSRequestHandler* req) { - if (!req->hasField("source") || !req->hasField("offset")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("source") || !req->hasField("offset")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString sourceName = obs_data_get_string(req->data, "source"); - int64_t sourceSyncOffset = (int64_t)obs_data_get_int(req->data, "offset"); + QString sourceName = obs_data_get_string(req->data, "source"); + int64_t sourceSyncOffset = (int64_t)obs_data_get_int(req->data, "offset"); - if (sourceName.isEmpty() || sourceSyncOffset < 0) { - req->SendErrorResponse("invalid request parameters"); - return; - } + if (sourceName.isEmpty() || sourceSyncOffset < 0) { + req->SendErrorResponse("invalid request parameters"); + return; + } - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); - if (!source) { - req->SendErrorResponse("specified source doesn't exist"); - return; - } + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } - obs_source_set_sync_offset(source, sourceSyncOffset); - req->SendOKResponse(); + obs_source_set_sync_offset(source, sourceSyncOffset); + req->SendOKResponse(); } /** @@ -367,23 +367,23 @@ void WSRequestHandler::HandleSetSyncOffset(WSRequestHandler* req) { * @since 4.2.0 */ void WSRequestHandler::HandleGetSyncOffset(WSRequestHandler* req) { - if (!req->hasField("source")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("source")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString sourceName = obs_data_get_string(req->data, "source"); - if (!sourceName.isEmpty()) { - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); + QString sourceName = obs_data_get_string(req->data, "source"); + if (!sourceName.isEmpty()) { + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName.toUtf8()); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "name", sourceName.toUtf8()); - obs_data_set_int(response, "offset", obs_source_get_sync_offset(source)); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "name", sourceName.toUtf8()); + obs_data_set_int(response, "offset", obs_source_get_sync_offset(source)); - req->SendOKResponse(response); - } else { - req->SendErrorResponse("invalid request parameters"); - } + req->SendOKResponse(response); + } else { + req->SendErrorResponse("invalid request parameters"); + } } /** @@ -402,35 +402,35 @@ void WSRequestHandler::HandleGetSyncOffset(WSRequestHandler* req) { * @since 4.3.0 */ void WSRequestHandler::HandleGetSourceSettings(WSRequestHandler* req) { - if (!req->hasField("sourceName")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("sourceName")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* sourceName = obs_data_get_string(req->data, "sourceName"); - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName); - if (!source) { - req->SendErrorResponse("specified source doesn't exist"); - return; - } + const char* sourceName = obs_data_get_string(req->data, "sourceName"); + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } - if (req->hasField("sourceType")) { - QString actualSourceType = obs_source_get_id(source); - QString requestedType = obs_data_get_string(req->data, "sourceType"); + if (req->hasField("sourceType")) { + QString actualSourceType = obs_source_get_id(source); + QString requestedType = obs_data_get_string(req->data, "sourceType"); - if (actualSourceType != requestedType) { - req->SendErrorResponse("specified source exists but is not of expected type"); - return; - } - } + if (actualSourceType != requestedType) { + req->SendErrorResponse("specified source exists but is not of expected type"); + return; + } + } - OBSDataAutoRelease sourceSettings = obs_source_get_settings(source); + OBSDataAutoRelease sourceSettings = obs_source_get_settings(source); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "sourceName", obs_source_get_name(source)); - obs_data_set_string(response, "sourceType", obs_source_get_id(source)); - obs_data_set_obj(response, "sourceSettings", sourceSettings); - req->SendOKResponse(response); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "sourceName", obs_source_get_name(source)); + obs_data_set_string(response, "sourceType", obs_source_get_id(source)); + obs_data_set_obj(response, "sourceSettings", sourceSettings); + req->SendOKResponse(response); } /** @@ -450,43 +450,43 @@ void WSRequestHandler::HandleGetSourceSettings(WSRequestHandler* req) { * @since 4.3.0 */ void WSRequestHandler::HandleSetSourceSettings(WSRequestHandler* req) { - if (!req->hasField("sourceName") || !req->hasField("sourceSettings")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("sourceName") || !req->hasField("sourceSettings")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* sourceName = obs_data_get_string(req->data, "sourceName"); - OBSSourceAutoRelease source = obs_get_source_by_name(sourceName); - if (!source) { - req->SendErrorResponse("specified source doesn't exist"); - return; - } + const char* sourceName = obs_data_get_string(req->data, "sourceName"); + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } - if (req->hasField("sourceType")) { - QString actualSourceType = obs_source_get_id(source); - QString requestedType = obs_data_get_string(req->data, "sourceType"); + if (req->hasField("sourceType")) { + QString actualSourceType = obs_source_get_id(source); + QString requestedType = obs_data_get_string(req->data, "sourceType"); - if (actualSourceType != requestedType) { - req->SendErrorResponse("specified source exists but is not of expected type"); - return; - } - } + if (actualSourceType != requestedType) { + req->SendErrorResponse("specified source exists but is not of expected type"); + return; + } + } - OBSDataAutoRelease currentSettings = obs_source_get_settings(source); - OBSDataAutoRelease newSettings = obs_data_get_obj(req->data, "sourceSettings"); + OBSDataAutoRelease currentSettings = obs_source_get_settings(source); + OBSDataAutoRelease newSettings = obs_data_get_obj(req->data, "sourceSettings"); - OBSDataAutoRelease sourceSettings = obs_data_create(); - obs_data_apply(sourceSettings, currentSettings); - obs_data_apply(sourceSettings, newSettings); + OBSDataAutoRelease sourceSettings = obs_data_create(); + obs_data_apply(sourceSettings, currentSettings); + obs_data_apply(sourceSettings, newSettings); - obs_source_update(source, sourceSettings); - obs_source_update_properties(source); + obs_source_update(source, sourceSettings); + obs_source_update_properties(source); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "sourceName", obs_source_get_name(source)); - obs_data_set_string(response, "sourceType", obs_source_get_id(source)); - obs_data_set_obj(response, "sourceSettings", sourceSettings); - req->SendOKResponse(response); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "sourceName", obs_source_get_name(source)); + obs_data_set_string(response, "sourceType", obs_source_get_id(source)); + obs_data_set_obj(response, "sourceSettings", sourceSettings); + req->SendOKResponse(response); } /** @@ -530,41 +530,41 @@ void WSRequestHandler::HandleSetSourceSettings(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleGetTextGDIPlusProperties(WSRequestHandler* req) { - // TODO: source settings are independent of any scene, so there's no need - // to target a specific scene + // TODO: source settings are independent of any scene, so there's no need + // to target a specific scene - const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) { - req->SendErrorResponse("invalid request parameters"); - return; - } + const char* itemName = obs_data_get_string(req->data, "source"); + if (!itemName) { + req->SendErrorResponse("invalid request parameters"); + return; + } - const char* sceneName = obs_data_get_string(req->data, "scene-name"); - OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); - if (!scene) { - req->SendErrorResponse("requested scene doesn't exist"); - return; - } + const char* sceneName = obs_data_get_string(req->data, "scene-name"); + OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); + if (!scene) { + req->SendErrorResponse("requested scene doesn't exist"); + return; + } - OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) { - OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); - const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); + OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); + if (sceneItem) { + OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); + const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) { - OBSDataAutoRelease response = obs_source_get_settings(sceneItemSource); - obs_data_set_string(response, "source", itemName); - obs_data_set_string(response, "scene-name", sceneName); - obs_data_set_bool(response, "render", - obs_sceneitem_visible(sceneItem)); + if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) { + OBSDataAutoRelease response = obs_source_get_settings(sceneItemSource); + obs_data_set_string(response, "source", itemName); + obs_data_set_string(response, "scene-name", sceneName); + obs_data_set_bool(response, "render", + obs_sceneitem_visible(sceneItem)); - req->SendOKResponse(response); - } else { - req->SendErrorResponse("not text gdi plus source"); - } - } else { - req->SendErrorResponse("specified scene item doesn't exist"); - } + req->SendOKResponse(response); + } else { + req->SendErrorResponse("not text gdi plus source"); + } + } else { + req->SendErrorResponse("specified scene item doesn't exist"); + } } /** @@ -607,191 +607,191 @@ void WSRequestHandler::HandleSetSourceSettings(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) { - // TODO: source settings are independent of any scene, so there's no need - // to target a specific scene + // TODO: source settings are independent of any scene, so there's no need + // to target a specific scene - if (!req->hasField("source")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("source")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) { - req->SendErrorResponse("invalid request parameters"); - return; - } + const char* itemName = obs_data_get_string(req->data, "source"); + if (!itemName) { + req->SendErrorResponse("invalid request parameters"); + return; + } - const char* sceneName = obs_data_get_string(req->data, "scene-name"); - OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); - if (!scene) { - req->SendErrorResponse("requested scene doesn't exist"); - return; - } + const char* sceneName = obs_data_get_string(req->data, "scene-name"); + OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); + if (!scene) { + req->SendErrorResponse("requested scene doesn't exist"); + return; + } - OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) { - OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); - const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); + OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); + if (sceneItem) { + OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); + const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) { - OBSDataAutoRelease settings = obs_source_get_settings(sceneItemSource); + if (strcmp(sceneItemSourceId, "text_gdiplus") == 0) { + OBSDataAutoRelease settings = obs_source_get_settings(sceneItemSource); - if (req->hasField("align")) { - obs_data_set_string(settings, "align", - obs_data_get_string(req->data, "align")); - } + if (req->hasField("align")) { + obs_data_set_string(settings, "align", + obs_data_get_string(req->data, "align")); + } - if (req->hasField("bk_color")) { - obs_data_set_int(settings, "bk_color", - obs_data_get_int(req->data, "bk_color")); - } + if (req->hasField("bk_color")) { + obs_data_set_int(settings, "bk_color", + obs_data_get_int(req->data, "bk_color")); + } - if (req->hasField("bk-opacity")) { - obs_data_set_int(settings, "bk_opacity", - obs_data_get_int(req->data, "bk_opacity")); - } + if (req->hasField("bk-opacity")) { + obs_data_set_int(settings, "bk_opacity", + obs_data_get_int(req->data, "bk_opacity")); + } - if (req->hasField("chatlog")) { - obs_data_set_bool(settings, "chatlog", - obs_data_get_bool(req->data, "chatlog")); - } + if (req->hasField("chatlog")) { + obs_data_set_bool(settings, "chatlog", + obs_data_get_bool(req->data, "chatlog")); + } - if (req->hasField("chatlog_lines")) { - obs_data_set_int(settings, "chatlog_lines", - obs_data_get_int(req->data, "chatlog_lines")); - } + if (req->hasField("chatlog_lines")) { + obs_data_set_int(settings, "chatlog_lines", + obs_data_get_int(req->data, "chatlog_lines")); + } - if (req->hasField("color")) { - obs_data_set_int(settings, "color", - obs_data_get_int(req->data, "color")); - } + if (req->hasField("color")) { + obs_data_set_int(settings, "color", + obs_data_get_int(req->data, "color")); + } - if (req->hasField("extents")) { - obs_data_set_bool(settings, "extents", - obs_data_get_bool(req->data, "extents")); - } + if (req->hasField("extents")) { + obs_data_set_bool(settings, "extents", + obs_data_get_bool(req->data, "extents")); + } - if (req->hasField("extents_wrap")) { - obs_data_set_bool(settings, "extents_wrap", - obs_data_get_bool(req->data, "extents_wrap")); - } + if (req->hasField("extents_wrap")) { + obs_data_set_bool(settings, "extents_wrap", + obs_data_get_bool(req->data, "extents_wrap")); + } - if (req->hasField("extents_cx")) { - obs_data_set_int(settings, "extents_cx", - obs_data_get_int(req->data, "extents_cx")); - } + if (req->hasField("extents_cx")) { + obs_data_set_int(settings, "extents_cx", + obs_data_get_int(req->data, "extents_cx")); + } - if (req->hasField("extents_cy")) { - obs_data_set_int(settings, "extents_cy", - obs_data_get_int(req->data, "extents_cy")); - } + if (req->hasField("extents_cy")) { + obs_data_set_int(settings, "extents_cy", + obs_data_get_int(req->data, "extents_cy")); + } - if (req->hasField("file")) { - obs_data_set_string(settings, "file", - obs_data_get_string(req->data, "file")); - } + if (req->hasField("file")) { + obs_data_set_string(settings, "file", + obs_data_get_string(req->data, "file")); + } - if (req->hasField("font")) { - OBSDataAutoRelease font_obj = obs_data_get_obj(settings, "font"); - if (font_obj) { - OBSDataAutoRelease req_font_obj = obs_data_get_obj(req->data, "font"); + if (req->hasField("font")) { + OBSDataAutoRelease font_obj = obs_data_get_obj(settings, "font"); + if (font_obj) { + OBSDataAutoRelease req_font_obj = obs_data_get_obj(req->data, "font"); - if (obs_data_has_user_value(req_font_obj, "face")) { - obs_data_set_string(font_obj, "face", - obs_data_get_string(req_font_obj, "face")); - } + if (obs_data_has_user_value(req_font_obj, "face")) { + obs_data_set_string(font_obj, "face", + obs_data_get_string(req_font_obj, "face")); + } - if (obs_data_has_user_value(req_font_obj, "flags")) { - obs_data_set_int(font_obj, "flags", - obs_data_get_int(req_font_obj, "flags")); - } + if (obs_data_has_user_value(req_font_obj, "flags")) { + obs_data_set_int(font_obj, "flags", + obs_data_get_int(req_font_obj, "flags")); + } - if (obs_data_has_user_value(req_font_obj, "size")) { - obs_data_set_int(font_obj, "size", - obs_data_get_int(req_font_obj, "size")); - } + if (obs_data_has_user_value(req_font_obj, "size")) { + obs_data_set_int(font_obj, "size", + obs_data_get_int(req_font_obj, "size")); + } - if (obs_data_has_user_value(req_font_obj, "style")) { - obs_data_set_string(font_obj, "style", - obs_data_get_string(req_font_obj, "style")); - } - } - } + if (obs_data_has_user_value(req_font_obj, "style")) { + obs_data_set_string(font_obj, "style", + obs_data_get_string(req_font_obj, "style")); + } + } + } - if (req->hasField("gradient")) { - obs_data_set_bool(settings, "gradient", - obs_data_get_bool(req->data, "gradient")); - } + if (req->hasField("gradient")) { + obs_data_set_bool(settings, "gradient", + obs_data_get_bool(req->data, "gradient")); + } - if (req->hasField("gradient_color")) { - obs_data_set_int(settings, "gradient_color", - obs_data_get_int(req->data, "gradient_color")); - } + if (req->hasField("gradient_color")) { + obs_data_set_int(settings, "gradient_color", + obs_data_get_int(req->data, "gradient_color")); + } - if (req->hasField("gradient_dir")) { - obs_data_set_double(settings, "gradient_dir", - obs_data_get_double(req->data, "gradient_dir")); - } + if (req->hasField("gradient_dir")) { + obs_data_set_double(settings, "gradient_dir", + obs_data_get_double(req->data, "gradient_dir")); + } - if (req->hasField("gradient_opacity")) { - obs_data_set_int(settings, "gradient_opacity", - obs_data_get_int(req->data, "gradient_opacity")); - } + if (req->hasField("gradient_opacity")) { + obs_data_set_int(settings, "gradient_opacity", + obs_data_get_int(req->data, "gradient_opacity")); + } - if (req->hasField("outline")) { - obs_data_set_bool(settings, "outline", - obs_data_get_bool(req->data, "outline")); - } + if (req->hasField("outline")) { + obs_data_set_bool(settings, "outline", + obs_data_get_bool(req->data, "outline")); + } - if (req->hasField("outline_size")) { - obs_data_set_int(settings, "outline_size", - obs_data_get_int(req->data, "outline_size")); - } + if (req->hasField("outline_size")) { + obs_data_set_int(settings, "outline_size", + obs_data_get_int(req->data, "outline_size")); + } - if (req->hasField("outline_color")) { - obs_data_set_int(settings, "outline_color", - obs_data_get_int(req->data, "outline_color")); - } + if (req->hasField("outline_color")) { + obs_data_set_int(settings, "outline_color", + obs_data_get_int(req->data, "outline_color")); + } - if (req->hasField("outline_opacity")) { - obs_data_set_int(settings, "outline_opacity", - obs_data_get_int(req->data, "outline_opacity")); - } + if (req->hasField("outline_opacity")) { + obs_data_set_int(settings, "outline_opacity", + obs_data_get_int(req->data, "outline_opacity")); + } - if (req->hasField("read_from_file")) { - obs_data_set_bool(settings, "read_from_file", - obs_data_get_bool(req->data, "read_from_file")); - } + if (req->hasField("read_from_file")) { + obs_data_set_bool(settings, "read_from_file", + obs_data_get_bool(req->data, "read_from_file")); + } - if (req->hasField("text")) { - obs_data_set_string(settings, "text", - obs_data_get_string(req->data, "text")); - } + if (req->hasField("text")) { + obs_data_set_string(settings, "text", + obs_data_get_string(req->data, "text")); + } - if (req->hasField("valign")) { - obs_data_set_string(settings, "valign", - obs_data_get_string(req->data, "valign")); - } + if (req->hasField("valign")) { + obs_data_set_string(settings, "valign", + obs_data_get_string(req->data, "valign")); + } - if (req->hasField("vertical")) { - obs_data_set_bool(settings, "vertical", - obs_data_get_bool(req->data, "vertical")); - } + if (req->hasField("vertical")) { + obs_data_set_bool(settings, "vertical", + obs_data_get_bool(req->data, "vertical")); + } - obs_source_update(sceneItemSource, settings); + obs_source_update(sceneItemSource, settings); - if (req->hasField("render")) { - obs_sceneitem_set_visible(sceneItem, - obs_data_get_bool(req->data, "render")); - } + if (req->hasField("render")) { + obs_sceneitem_set_visible(sceneItem, + obs_data_get_bool(req->data, "render")); + } - req->SendOKResponse(); - } else { - req->SendErrorResponse("not text gdi plus source"); - } - } else { - req->SendErrorResponse("specified scene item doesn't exist"); - } + req->SendOKResponse(); + } else { + req->SendErrorResponse("not text gdi plus source"); + } + } else { + req->SendErrorResponse("specified scene item doesn't exist"); + } } /** @@ -816,41 +816,41 @@ void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleGetBrowserSourceProperties(WSRequestHandler* req) { - // TODO: source settings are independent of any scene, so there's no need - // to target a specific scene + // TODO: source settings are independent of any scene, so there's no need + // to target a specific scene - const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) { - req->SendErrorResponse("invalid request parameters"); - return; - } + const char* itemName = obs_data_get_string(req->data, "source"); + if (!itemName) { + req->SendErrorResponse("invalid request parameters"); + return; + } - const char* sceneName = obs_data_get_string(req->data, "scene-name"); - OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); - if (!scene) { - req->SendErrorResponse("requested scene doesn't exist"); - return; - } + const char* sceneName = obs_data_get_string(req->data, "scene-name"); + OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); + if (!scene) { + req->SendErrorResponse("requested scene doesn't exist"); + return; + } - OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) { - OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); - const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); + OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); + if (sceneItem) { + OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); + const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "browser_source") == 0) { - OBSDataAutoRelease response = obs_source_get_settings(sceneItemSource); - obs_data_set_string(response, "source", itemName); - obs_data_set_string(response, "scene-name", sceneName); - obs_data_set_bool(response, "render", - obs_sceneitem_visible(sceneItem)); + if (strcmp(sceneItemSourceId, "browser_source") == 0) { + OBSDataAutoRelease response = obs_source_get_settings(sceneItemSource); + obs_data_set_string(response, "source", itemName); + obs_data_set_string(response, "scene-name", sceneName); + obs_data_set_bool(response, "render", + obs_sceneitem_visible(sceneItem)); - req->SendOKResponse(response); - } else { - req->SendErrorResponse("not browser source"); - } - } else { - req->SendErrorResponse("specified scene item doesn't exist"); - } + req->SendOKResponse(response); + } else { + req->SendErrorResponse("not browser source"); + } + } else { + req->SendErrorResponse("specified scene item doesn't exist"); + } } /** @@ -874,94 +874,94 @@ void WSRequestHandler::HandleGetBrowserSourceProperties(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleSetBrowserSourceProperties(WSRequestHandler* req) { - // TODO: source settings are independent of any scene, so there's no need - // to target a specific scene + // TODO: source settings are independent of any scene, so there's no need + // to target a specific scene - if (!req->hasField("source")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("source")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* itemName = obs_data_get_string(req->data, "source"); - if (!itemName) { - req->SendErrorResponse("invalid request parameters"); - return; - } + const char* itemName = obs_data_get_string(req->data, "source"); + if (!itemName) { + req->SendErrorResponse("invalid request parameters"); + return; + } - const char* sceneName = obs_data_get_string(req->data, "scene-name"); - OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); - if (!scene) { - req->SendErrorResponse("requested scene doesn't exist"); - return; - } + const char* sceneName = obs_data_get_string(req->data, "scene-name"); + OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); + if (!scene) { + req->SendErrorResponse("requested scene doesn't exist"); + return; + } - OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); - if (sceneItem) { - OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); - const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); + OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromName(scene, itemName); + if (sceneItem) { + OBSSource sceneItemSource = obs_sceneitem_get_source(sceneItem); + const char* sceneItemSourceId = obs_source_get_id(sceneItemSource); - if (strcmp(sceneItemSourceId, "browser_source") == 0) { - OBSDataAutoRelease settings = obs_source_get_settings(sceneItemSource); + if (strcmp(sceneItemSourceId, "browser_source") == 0) { + OBSDataAutoRelease settings = obs_source_get_settings(sceneItemSource); - if (req->hasField("restart_when_active")) { - obs_data_set_bool(settings, "restart_when_active", - obs_data_get_bool(req->data, "restart_when_active")); - } + if (req->hasField("restart_when_active")) { + obs_data_set_bool(settings, "restart_when_active", + obs_data_get_bool(req->data, "restart_when_active")); + } - if (req->hasField("shutdown")) { - obs_data_set_bool(settings, "shutdown", - obs_data_get_bool(req->data, "shutdown")); - } + if (req->hasField("shutdown")) { + obs_data_set_bool(settings, "shutdown", + obs_data_get_bool(req->data, "shutdown")); + } - if (req->hasField("is_local_file")) { - obs_data_set_bool(settings, "is_local_file", - obs_data_get_bool(req->data, "is_local_file")); - } + if (req->hasField("is_local_file")) { + obs_data_set_bool(settings, "is_local_file", + obs_data_get_bool(req->data, "is_local_file")); + } - if (req->hasField("local_file")) { - obs_data_set_string(settings, "local_file", - obs_data_get_string(req->data, "local_file")); - } + if (req->hasField("local_file")) { + obs_data_set_string(settings, "local_file", + obs_data_get_string(req->data, "local_file")); + } - if (req->hasField("url")) { - obs_data_set_string(settings, "url", - obs_data_get_string(req->data, "url")); - } + if (req->hasField("url")) { + obs_data_set_string(settings, "url", + obs_data_get_string(req->data, "url")); + } - if (req->hasField("css")) { - obs_data_set_string(settings, "css", - obs_data_get_string(req->data, "css")); - } + if (req->hasField("css")) { + obs_data_set_string(settings, "css", + obs_data_get_string(req->data, "css")); + } - if (req->hasField("width")) { - obs_data_set_int(settings, "width", - obs_data_get_int(req->data, "width")); - } + if (req->hasField("width")) { + obs_data_set_int(settings, "width", + obs_data_get_int(req->data, "width")); + } - if (req->hasField("height")) { - obs_data_set_int(settings, "height", - obs_data_get_int(req->data, "height")); - } + if (req->hasField("height")) { + obs_data_set_int(settings, "height", + obs_data_get_int(req->data, "height")); + } - if (req->hasField("fps")) { - obs_data_set_int(settings, "fps", - obs_data_get_int(req->data, "fps")); - } + if (req->hasField("fps")) { + obs_data_set_int(settings, "fps", + obs_data_get_int(req->data, "fps")); + } - obs_source_update(sceneItemSource, settings); + obs_source_update(sceneItemSource, settings); - if (req->hasField("render")) { - obs_sceneitem_set_visible(sceneItem, - obs_data_get_bool(req->data, "render")); - } + if (req->hasField("render")) { + obs_sceneitem_set_visible(sceneItem, + obs_data_get_bool(req->data, "render")); + } - req->SendOKResponse(); - } else { - req->SendErrorResponse("not browser source"); - } - } else { - req->SendErrorResponse("specified scene item doesn't exist"); - } + req->SendOKResponse(); + } else { + req->SendErrorResponse("not browser source"); + } + } else { + req->SendErrorResponse("specified scene item doesn't exist"); + } } /** @@ -978,39 +978,39 @@ void WSRequestHandler::HandleSetBrowserSourceProperties(WSRequestHandler* req) { * @since unreleased */ void WSRequestHandler::HandleDeleteSceneItem(WSRequestHandler* req) { - if (!req->hasField("item")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("item")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* sceneName = obs_data_get_string(req->data, "scene"); - OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); - if (!scene) { - req->SendErrorResponse("requested scene doesn't exist"); - return; - } + const char* sceneName = obs_data_get_string(req->data, "scene"); + OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); + if (!scene) { + req->SendErrorResponse("requested scene doesn't exist"); + return; + } - OBSDataAutoRelease item = obs_data_get_obj(req->data, "item"); - OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromItem(scene, item); - if (!sceneItem) { - req->SendErrorResponse("item with id/name combination not found in specified scene"); - return; - } + OBSDataAutoRelease item = obs_data_get_obj(req->data, "item"); + OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromItem(scene, item); + if (!sceneItem) { + req->SendErrorResponse("item with id/name combination not found in specified scene"); + return; + } - obs_sceneitem_remove(sceneItem); - req->SendOKResponse(); + obs_sceneitem_remove(sceneItem); + req->SendOKResponse(); } struct DuplicateSceneItemData { - obs_sceneitem_t *referenceItem; - obs_source_t *fromSource; - obs_sceneitem_t *newItem; + obs_sceneitem_t *referenceItem; + obs_source_t *fromSource; + obs_sceneitem_t *newItem; }; static void DuplicateSceneItem(void *_data, obs_scene_t *scene) { - DuplicateSceneItemData *data = (DuplicateSceneItemData *)_data; - data->newItem = obs_scene_add(scene, data->fromSource); - obs_sceneitem_set_visible(data->newItem, obs_sceneitem_visible(data->referenceItem)); + DuplicateSceneItemData *data = (DuplicateSceneItemData *)_data; + data->newItem = obs_scene_add(scene, data->fromSource); + obs_sceneitem_set_visible(data->newItem, obs_sceneitem_visible(data->referenceItem)); } /** @@ -1028,52 +1028,52 @@ static void DuplicateSceneItem(void *_data, obs_scene_t *scene) { * @since unreleased */ void WSRequestHandler::HandleDuplicateSceneItem(WSRequestHandler* req) { - if (!req->hasField("item")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("item")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* fromSceneName = obs_data_get_string(req->data, "fromScene"); - OBSSourceAutoRelease fromScene = Utils::GetSceneFromNameOrCurrent(fromSceneName); - if (!fromScene) { - req->SendErrorResponse("requested fromScene doesn't exist"); - return; - } + const char* fromSceneName = obs_data_get_string(req->data, "fromScene"); + OBSSourceAutoRelease fromScene = Utils::GetSceneFromNameOrCurrent(fromSceneName); + if (!fromScene) { + req->SendErrorResponse("requested fromScene doesn't exist"); + return; + } - const char* toSceneName = obs_data_get_string(req->data, "toScene"); - OBSSourceAutoRelease toScene = Utils::GetSceneFromNameOrCurrent(toSceneName); - if (!toScene) { - req->SendErrorResponse("requested toScene doesn't exist"); - return; - } + const char* toSceneName = obs_data_get_string(req->data, "toScene"); + OBSSourceAutoRelease toScene = Utils::GetSceneFromNameOrCurrent(toSceneName); + if (!toScene) { + req->SendErrorResponse("requested toScene doesn't exist"); + return; + } - OBSDataAutoRelease item = obs_data_get_obj(req->data, "item"); - OBSSceneItemAutoRelease referenceItem = Utils::GetSceneItemFromItem(fromScene, item); - if (!referenceItem) { - req->SendErrorResponse("item with id/name combination not found in specified scene"); - return; - } + OBSDataAutoRelease item = obs_data_get_obj(req->data, "item"); + OBSSceneItemAutoRelease referenceItem = Utils::GetSceneItemFromItem(fromScene, item); + if (!referenceItem) { + req->SendErrorResponse("item with id/name combination not found in specified scene"); + return; + } - DuplicateSceneItemData data; - data.fromSource = obs_sceneitem_get_source(referenceItem); - data.referenceItem = referenceItem; + DuplicateSceneItemData data; + data.fromSource = obs_sceneitem_get_source(referenceItem); + data.referenceItem = referenceItem; - obs_enter_graphics(); - obs_scene_atomic_update(obs_scene_from_source(toScene), DuplicateSceneItem, &data); - obs_leave_graphics(); + obs_enter_graphics(); + obs_scene_atomic_update(obs_scene_from_source(toScene), DuplicateSceneItem, &data); + obs_leave_graphics(); - obs_sceneitem_t *newItem = data.newItem; + obs_sceneitem_t *newItem = data.newItem; - if (!newItem) { - req->SendErrorResponse("Error duplicating scenee item"); - } - OBSDataAutoRelease responseData = obs_data_create(); - OBSDataAutoRelease itemData = obs_data_create(); - obs_data_set_int(itemData, "id", obs_sceneitem_get_id(newItem)); - obs_data_set_string(itemData, "name", obs_source_get_name(obs_sceneitem_get_source(newItem))); - obs_data_set_obj(responseData, "item", itemData); - obs_data_set_string(responseData, "scene", obs_source_get_name(toScene)); - req->SendOKResponse(responseData); + if (!newItem) { + req->SendErrorResponse("Error duplicating scenee item"); + } + OBSDataAutoRelease responseData = obs_data_create(); + OBSDataAutoRelease itemData = obs_data_create(); + obs_data_set_int(itemData, "id", obs_sceneitem_get_id(newItem)); + obs_data_set_string(itemData, "name", obs_source_get_name(obs_sceneitem_get_source(newItem))); + obs_data_set_obj(responseData, "item", itemData); + obs_data_set_string(responseData, "scene", obs_source_get_name(toScene)); + req->SendOKResponse(responseData); } /** @@ -1091,27 +1091,27 @@ void WSRequestHandler::HandleDuplicateSceneItem(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleGetSpecialSources(WSRequestHandler* req) { - OBSDataAutoRelease response = obs_data_create(); + OBSDataAutoRelease response = obs_data_create(); - QMap sources; - sources["desktop-1"] = 1; - sources["desktop-2"] = 2; - sources["mic-1"] = 3; - sources["mic-2"] = 4; - sources["mic-3"] = 5; + QMap sources; + sources["desktop-1"] = 1; + sources["desktop-2"] = 2; + sources["mic-1"] = 3; + sources["mic-2"] = 4; + sources["mic-3"] = 5; - QMapIterator i(sources); - while (i.hasNext()) { - i.next(); + QMapIterator i(sources); + while (i.hasNext()) { + i.next(); - const char* id = i.key(); - OBSSourceAutoRelease source = obs_get_output_source(i.value()); - if (source) { - obs_data_set_string(response, id, obs_source_get_name(source)); - } - } + const char* id = i.key(); + OBSSourceAutoRelease source = obs_get_output_source(i.value()); + if (source) { + obs_data_set_string(response, id, obs_source_get_name(source)); + } + } - req->SendOKResponse(response); + req->SendOKResponse(response); } /** diff --git a/src/WSRequestHandler_Streaming.cpp b/src/WSRequestHandler_Streaming.cpp index 04fc09c4..e7d1bd8f 100644 --- a/src/WSRequestHandler_Streaming.cpp +++ b/src/WSRequestHandler_Streaming.cpp @@ -21,25 +21,25 @@ * @since 0.3 */ void WSRequestHandler::HandleGetStreamingStatus(WSRequestHandler* req) { - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_bool(data, "streaming", obs_frontend_streaming_active()); - obs_data_set_bool(data, "recording", obs_frontend_recording_active()); - obs_data_set_bool(data, "preview-only", false); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_bool(data, "streaming", obs_frontend_streaming_active()); + obs_data_set_bool(data, "recording", obs_frontend_recording_active()); + obs_data_set_bool(data, "preview-only", false); - const char* tc = nullptr; - if (obs_frontend_streaming_active()) { - tc = WSEvents::Instance->GetStreamingTimecode(); - obs_data_set_string(data, "stream-timecode", tc); - bfree((void*)tc); - } + const char* tc = nullptr; + if (obs_frontend_streaming_active()) { + tc = WSEvents::Instance->GetStreamingTimecode(); + obs_data_set_string(data, "stream-timecode", tc); + bfree((void*)tc); + } - if (obs_frontend_recording_active()) { - tc = WSEvents::Instance->GetRecordingTimecode(); - obs_data_set_string(data, "rec-timecode", tc); - bfree((void*)tc); - } + if (obs_frontend_recording_active()) { + tc = WSEvents::Instance->GetRecordingTimecode(); + obs_data_set_string(data, "rec-timecode", tc); + bfree((void*)tc); + } - req->SendOKResponse(data); + req->SendOKResponse(data); } /** @@ -51,10 +51,10 @@ * @since 0.3 */ void WSRequestHandler::HandleStartStopStreaming(WSRequestHandler* req) { - if (obs_frontend_streaming_active()) - HandleStopStreaming(req); - else - HandleStartStreaming(req); + if (obs_frontend_streaming_active()) + HandleStopStreaming(req); + else + HandleStartStreaming(req); } /** @@ -77,90 +77,90 @@ * @since 4.1.0 */ void WSRequestHandler::HandleStartStreaming(WSRequestHandler* req) { - if (obs_frontend_streaming_active() == false) { - OBSService configuredService = obs_frontend_get_streaming_service(); - OBSService newService = nullptr; + if (obs_frontend_streaming_active() == false) { + OBSService configuredService = obs_frontend_get_streaming_service(); + OBSService newService = nullptr; - // TODO: fix service memory leak + // TODO: fix service memory leak - if (req->hasField("stream")) { - OBSDataAutoRelease streamData = obs_data_get_obj(req->data, "stream"); - OBSDataAutoRelease newSettings = obs_data_get_obj(streamData, "settings"); - OBSDataAutoRelease newMetadata = obs_data_get_obj(streamData, "metadata"); + if (req->hasField("stream")) { + OBSDataAutoRelease streamData = obs_data_get_obj(req->data, "stream"); + OBSDataAutoRelease newSettings = obs_data_get_obj(streamData, "settings"); + OBSDataAutoRelease newMetadata = obs_data_get_obj(streamData, "metadata"); - OBSDataAutoRelease csHotkeys = - obs_hotkeys_save_service(configuredService); + OBSDataAutoRelease csHotkeys = + obs_hotkeys_save_service(configuredService); - QString currentType = obs_service_get_type(configuredService); - QString newType = obs_data_get_string(streamData, "type"); - if (newType.isEmpty() || newType.isNull()) { - newType = currentType; - } + QString currentType = obs_service_get_type(configuredService); + QString newType = obs_data_get_string(streamData, "type"); + if (newType.isEmpty() || newType.isNull()) { + newType = currentType; + } - //Supporting adding metadata parameters to key query string - QString query = Utils::ParseDataToQueryString(newMetadata); - if (!query.isEmpty() - && obs_data_has_user_value(newSettings, "key")) - { - const char* key = obs_data_get_string(newSettings, "key"); - int keylen = strlen(key); + //Supporting adding metadata parameters to key query string + QString query = Utils::ParseDataToQueryString(newMetadata); + if (!query.isEmpty() + && obs_data_has_user_value(newSettings, "key")) + { + const char* key = obs_data_get_string(newSettings, "key"); + int keylen = strlen(key); - bool hasQuestionMark = false; - for (int i = 0; i < keylen; i++) { - if (key[i] == '?') { - hasQuestionMark = true; - break; - } - } + bool hasQuestionMark = false; + for (int i = 0; i < keylen; i++) { + if (key[i] == '?') { + hasQuestionMark = true; + break; + } + } - if (hasQuestionMark) { - query.prepend('&'); - } else { - query.prepend('?'); - } + if (hasQuestionMark) { + query.prepend('&'); + } else { + query.prepend('?'); + } - query.prepend(key); - obs_data_set_string(newSettings, "key", query.toUtf8()); - } + query.prepend(key); + obs_data_set_string(newSettings, "key", query.toUtf8()); + } - if (newType == currentType) { - // Service type doesn't change: apply settings to current service + if (newType == currentType) { + // Service type doesn't change: apply settings to current service - // By doing this, you can send a request to the websocket - // that only contains settings you want to change, instead of - // having to do a get and then change them + // By doing this, you can send a request to the websocket + // that only contains settings you want to change, instead of + // having to do a get and then change them - OBSDataAutoRelease currentSettings = obs_service_get_settings(configuredService); - OBSDataAutoRelease updatedSettings = obs_data_create(); + OBSDataAutoRelease currentSettings = obs_service_get_settings(configuredService); + OBSDataAutoRelease updatedSettings = obs_data_create(); - obs_data_apply(updatedSettings, currentSettings); //first apply the existing settings - obs_data_apply(updatedSettings, newSettings); //then apply the settings from the request should they exist + obs_data_apply(updatedSettings, currentSettings); //first apply the existing settings + obs_data_apply(updatedSettings, newSettings); //then apply the settings from the request should they exist - newService = obs_service_create( - newType.toUtf8(), STREAM_SERVICE_ID, - updatedSettings, csHotkeys); - } - else { - // Service type changed: override service settings - newService = obs_service_create( - newType.toUtf8(), STREAM_SERVICE_ID, - newSettings, csHotkeys); - } + newService = obs_service_create( + newType.toUtf8(), STREAM_SERVICE_ID, + updatedSettings, csHotkeys); + } + else { + // Service type changed: override service settings + newService = obs_service_create( + newType.toUtf8(), STREAM_SERVICE_ID, + newSettings, csHotkeys); + } - obs_frontend_set_streaming_service(newService); - } + obs_frontend_set_streaming_service(newService); + } - obs_frontend_streaming_start(); + obs_frontend_streaming_start(); - // Stream settings provided in StartStreaming are not persisted to disk - if (newService != nullptr) { - obs_frontend_set_streaming_service(configuredService); - } + // Stream settings provided in StartStreaming are not persisted to disk + if (newService != nullptr) { + obs_frontend_set_streaming_service(configuredService); + } - req->SendOKResponse(); - } else { - req->SendErrorResponse("streaming already active"); - } + req->SendOKResponse(); + } else { + req->SendErrorResponse("streaming already active"); + } } /** @@ -173,12 +173,12 @@ * @since 4.1.0 */ void WSRequestHandler::HandleStopStreaming(WSRequestHandler* req) { - if (obs_frontend_streaming_active() == true) { - obs_frontend_streaming_stop(); - req->SendOKResponse(); - } else { - req->SendErrorResponse("streaming not active"); - } + if (obs_frontend_streaming_active() == true) { + obs_frontend_streaming_stop(); + req->SendOKResponse(); + } else { + req->SendErrorResponse("streaming not active"); + } } /** @@ -199,50 +199,50 @@ void WSRequestHandler::HandleStopStreaming(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleSetStreamSettings(WSRequestHandler* req) { - OBSService service = obs_frontend_get_streaming_service(); + OBSService service = obs_frontend_get_streaming_service(); - OBSDataAutoRelease requestSettings = obs_data_get_obj(req->data, "settings"); - if (!requestSettings) { - req->SendErrorResponse("'settings' are required'"); - return; - } + OBSDataAutoRelease requestSettings = obs_data_get_obj(req->data, "settings"); + if (!requestSettings) { + req->SendErrorResponse("'settings' are required'"); + return; + } - QString serviceType = obs_service_get_type(service); - QString requestedType = obs_data_get_string(req->data, "type"); + QString serviceType = obs_service_get_type(service); + QString requestedType = obs_data_get_string(req->data, "type"); - if (requestedType != nullptr && requestedType != serviceType) { - OBSDataAutoRelease hotkeys = obs_hotkeys_save_service(service); - service = obs_service_create( - requestedType.toUtf8(), STREAM_SERVICE_ID, requestSettings, hotkeys); - } else { - // If type isn't changing, we should overlay the settings we got - // to the existing settings. By doing so, you can send a request that - // only contains the settings you want to change, instead of having to - // do a get and then change them + if (requestedType != nullptr && requestedType != serviceType) { + OBSDataAutoRelease hotkeys = obs_hotkeys_save_service(service); + service = obs_service_create( + requestedType.toUtf8(), STREAM_SERVICE_ID, requestSettings, hotkeys); + } else { + // If type isn't changing, we should overlay the settings we got + // to the existing settings. By doing so, you can send a request that + // only contains the settings you want to change, instead of having to + // do a get and then change them - OBSDataAutoRelease existingSettings = obs_service_get_settings(service); - OBSDataAutoRelease newSettings = obs_data_create(); + OBSDataAutoRelease existingSettings = obs_service_get_settings(service); + OBSDataAutoRelease newSettings = obs_data_create(); - // Apply existing settings - obs_data_apply(newSettings, existingSettings); - // Then apply the settings from the request - obs_data_apply(newSettings, requestSettings); + // Apply existing settings + obs_data_apply(newSettings, existingSettings); + // Then apply the settings from the request + obs_data_apply(newSettings, requestSettings); - obs_service_update(service, newSettings); - } + obs_service_update(service, newSettings); + } - //if save is specified we should immediately save the streaming service - if (obs_data_get_bool(req->data, "save")) { - obs_frontend_save_streaming_service(); - } + //if save is specified we should immediately save the streaming service + if (obs_data_get_bool(req->data, "save")) { + obs_frontend_save_streaming_service(); + } - OBSDataAutoRelease serviceSettings = obs_service_get_settings(service); + OBSDataAutoRelease serviceSettings = obs_service_get_settings(service); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "type", requestedType.toUtf8()); - obs_data_set_obj(response, "settings", serviceSettings); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "type", requestedType.toUtf8()); + obs_data_set_obj(response, "settings", serviceSettings); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -262,16 +262,16 @@ void WSRequestHandler::HandleStopStreaming(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleGetStreamSettings(WSRequestHandler* req) { - OBSService service = obs_frontend_get_streaming_service(); + OBSService service = obs_frontend_get_streaming_service(); - const char* serviceType = obs_service_get_type(service); - OBSDataAutoRelease settings = obs_service_get_settings(service); + const char* serviceType = obs_service_get_type(service); + OBSDataAutoRelease settings = obs_service_get_settings(service); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "type", serviceType); - obs_data_set_obj(response, "settings", settings); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "type", serviceType); + obs_data_set_obj(response, "settings", settings); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -283,6 +283,6 @@ void WSRequestHandler::HandleGetStreamSettings(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleSaveStreamSettings(WSRequestHandler* req) { - obs_frontend_save_streaming_service(); - req->SendOKResponse(); + obs_frontend_save_streaming_service(); + req->SendOKResponse(); } diff --git a/src/WSRequestHandler_StudioMode.cpp b/src/WSRequestHandler_StudioMode.cpp index c51ced9d..87a08ad1 100644 --- a/src/WSRequestHandler_StudioMode.cpp +++ b/src/WSRequestHandler_StudioMode.cpp @@ -14,12 +14,12 @@ * @since 4.1.0 */ void WSRequestHandler::HandleGetStudioModeStatus(WSRequestHandler* req) { - bool previewActive = obs_frontend_preview_program_mode_active(); + bool previewActive = obs_frontend_preview_program_mode_active(); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_bool(response, "studio-mode", previewActive); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_bool(response, "studio-mode", previewActive); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -35,19 +35,19 @@ * @since 4.1.0 */ void WSRequestHandler::HandleGetPreviewScene(WSRequestHandler* req) { - if (!obs_frontend_preview_program_mode_active()) { - req->SendErrorResponse("studio mode not enabled"); - return; - } + if (!obs_frontend_preview_program_mode_active()) { + req->SendErrorResponse("studio mode not enabled"); + return; + } - OBSSourceAutoRelease scene = obs_frontend_get_current_preview_scene(); - OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(scene); + OBSSourceAutoRelease scene = obs_frontend_get_current_preview_scene(); + OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(scene); - OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "name", obs_source_get_name(scene)); - obs_data_set_array(data, "sources", sceneItems); + OBSDataAutoRelease data = obs_data_create(); + obs_data_set_string(data, "name", obs_source_get_name(scene)); + obs_data_set_array(data, "sources", sceneItems); - req->SendOKResponse(data); + req->SendOKResponse(data); } /** @@ -62,25 +62,25 @@ void WSRequestHandler::HandleGetPreviewScene(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleSetPreviewScene(WSRequestHandler* req) { - if (!obs_frontend_preview_program_mode_active()) { - req->SendErrorResponse("studio mode not enabled"); - return; - } + if (!obs_frontend_preview_program_mode_active()) { + req->SendErrorResponse("studio mode not enabled"); + return; + } - if (!req->hasField("scene-name")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("scene-name")) { + req->SendErrorResponse("missing request parameters"); + return; + } - const char* scene_name = obs_data_get_string(req->data, "scene-name"); - OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(scene_name); + const char* scene_name = obs_data_get_string(req->data, "scene-name"); + OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(scene_name); - if (scene) { - obs_frontend_set_current_preview_scene(scene); - req->SendOKResponse(); - } else { - req->SendErrorResponse("specified scene doesn't exist"); - } + if (scene) { + obs_frontend_set_current_preview_scene(scene); + req->SendOKResponse(); + } else { + req->SendErrorResponse("specified scene doesn't exist"); + } } /** @@ -97,39 +97,39 @@ void WSRequestHandler::HandleSetPreviewScene(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleTransitionToProgram(WSRequestHandler* req) { - if (!obs_frontend_preview_program_mode_active()) { - req->SendErrorResponse("studio mode not enabled"); - return; - } + if (!obs_frontend_preview_program_mode_active()) { + req->SendErrorResponse("studio mode not enabled"); + return; + } - if (req->hasField("with-transition")) { - OBSDataAutoRelease transitionInfo = - obs_data_get_obj(req->data, "with-transition"); + if (req->hasField("with-transition")) { + OBSDataAutoRelease transitionInfo = + obs_data_get_obj(req->data, "with-transition"); - if (obs_data_has_user_value(transitionInfo, "name")) { - QString transitionName = - obs_data_get_string(transitionInfo, "name"); - if (transitionName.isEmpty()) { - req->SendErrorResponse("invalid request parameters"); - return; - } + if (obs_data_has_user_value(transitionInfo, "name")) { + QString transitionName = + obs_data_get_string(transitionInfo, "name"); + if (transitionName.isEmpty()) { + req->SendErrorResponse("invalid request parameters"); + return; + } - bool success = Utils::SetTransitionByName(transitionName); - if (!success) { - req->SendErrorResponse("specified transition doesn't exist"); - return; - } - } + bool success = Utils::SetTransitionByName(transitionName); + if (!success) { + req->SendErrorResponse("specified transition doesn't exist"); + return; + } + } - if (obs_data_has_user_value(transitionInfo, "duration")) { - int transitionDuration = - obs_data_get_int(transitionInfo, "duration"); - Utils::SetTransitionDuration(transitionDuration); - } - } + if (obs_data_has_user_value(transitionInfo, "duration")) { + int transitionDuration = + obs_data_get_int(transitionInfo, "duration"); + Utils::SetTransitionDuration(transitionDuration); + } + } - Utils::TransitionToProgram(); - req->SendOKResponse(); + Utils::TransitionToProgram(); + req->SendOKResponse(); } /** @@ -141,8 +141,8 @@ void WSRequestHandler::HandleTransitionToProgram(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleEnableStudioMode(WSRequestHandler* req) { - obs_frontend_set_preview_program_mode(true); - req->SendOKResponse(); + obs_frontend_set_preview_program_mode(true); + req->SendOKResponse(); } /** @@ -154,8 +154,8 @@ void WSRequestHandler::HandleEnableStudioMode(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleDisableStudioMode(WSRequestHandler* req) { - obs_frontend_set_preview_program_mode(false); - req->SendOKResponse(); + obs_frontend_set_preview_program_mode(false); + req->SendOKResponse(); } /** @@ -167,7 +167,7 @@ void WSRequestHandler::HandleDisableStudioMode(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleToggleStudioMode(WSRequestHandler* req) { - bool previewProgramMode = obs_frontend_preview_program_mode_active(); - obs_frontend_set_preview_program_mode(!previewProgramMode); - req->SendOKResponse(); + bool previewProgramMode = obs_frontend_preview_program_mode_active(); + obs_frontend_set_preview_program_mode(!previewProgramMode); + req->SendOKResponse(); } diff --git a/src/WSRequestHandler_Transitions.cpp b/src/WSRequestHandler_Transitions.cpp index 32d5da65..776b37e4 100644 --- a/src/WSRequestHandler_Transitions.cpp +++ b/src/WSRequestHandler_Transitions.cpp @@ -16,26 +16,26 @@ * @since 4.1.0 */ void WSRequestHandler::HandleGetTransitionList(WSRequestHandler* req) { - OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); - obs_frontend_source_list transitionList = {}; - obs_frontend_get_transitions(&transitionList); + OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); + obs_frontend_source_list transitionList = {}; + obs_frontend_get_transitions(&transitionList); - OBSDataArrayAutoRelease transitions = obs_data_array_create(); - for (size_t i = 0; i < transitionList.sources.num; i++) { - OBSSource transition = transitionList.sources.array[i]; + OBSDataArrayAutoRelease transitions = obs_data_array_create(); + for (size_t i = 0; i < transitionList.sources.num; i++) { + OBSSource transition = transitionList.sources.array[i]; - OBSDataAutoRelease obj = obs_data_create(); - obs_data_set_string(obj, "name", obs_source_get_name(transition)); - obs_data_array_push_back(transitions, obj); - } - obs_frontend_source_list_free(&transitionList); + OBSDataAutoRelease obj = obs_data_create(); + obs_data_set_string(obj, "name", obs_source_get_name(transition)); + obs_data_array_push_back(transitions, obj); + } + obs_frontend_source_list_free(&transitionList); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "current-transition", - obs_source_get_name(currentTransition)); - obs_data_set_array(response, "transitions", transitions); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "current-transition", + obs_source_get_name(currentTransition)); + obs_data_set_array(response, "transitions", transitions); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -50,16 +50,16 @@ * @since 0.3 */ void WSRequestHandler::HandleGetCurrentTransition(WSRequestHandler* req) { - OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); + OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_string(response, "name", - obs_source_get_name(currentTransition)); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_string(response, "name", + obs_source_get_name(currentTransition)); - if (!obs_transition_fixed(currentTransition)) - obs_data_set_int(response, "duration", Utils::GetTransitionDuration()); + if (!obs_transition_fixed(currentTransition)) + obs_data_set_int(response, "duration", Utils::GetTransitionDuration()); - req->SendOKResponse(response); + req->SendOKResponse(response); } /** @@ -73,17 +73,17 @@ void WSRequestHandler::HandleGetCurrentTransition(WSRequestHandler* req) { * @since 0.3 */ void WSRequestHandler::HandleSetCurrentTransition(WSRequestHandler* req) { - if (!req->hasField("transition-name")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("transition-name")) { + req->SendErrorResponse("missing request parameters"); + return; + } - QString name = obs_data_get_string(req->data, "transition-name"); - bool success = Utils::SetTransitionByName(name); - if (success) - req->SendOKResponse(); - else - req->SendErrorResponse("requested transition does not exist"); + QString name = obs_data_get_string(req->data, "transition-name"); + bool success = Utils::SetTransitionByName(name); + if (success) + req->SendOKResponse(); + else + req->SendErrorResponse("requested transition does not exist"); } /** @@ -97,14 +97,14 @@ void WSRequestHandler::HandleSetCurrentTransition(WSRequestHandler* req) { * @since 4.0.0 */ void WSRequestHandler::HandleSetTransitionDuration(WSRequestHandler* req) { - if (!req->hasField("duration")) { - req->SendErrorResponse("missing request parameters"); - return; - } + if (!req->hasField("duration")) { + req->SendErrorResponse("missing request parameters"); + return; + } - int ms = obs_data_get_int(req->data, "duration"); - Utils::SetTransitionDuration(ms); - req->SendOKResponse(); + int ms = obs_data_get_int(req->data, "duration"); + Utils::SetTransitionDuration(ms); + req->SendOKResponse(); } /** @@ -118,9 +118,9 @@ void WSRequestHandler::HandleSetTransitionDuration(WSRequestHandler* req) { * @since 4.1.0 */ void WSRequestHandler::HandleGetTransitionDuration(WSRequestHandler* req) { - OBSDataAutoRelease response = obs_data_create(); - obs_data_set_int(response, "transition-duration", - Utils::GetTransitionDuration()); + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_int(response, "transition-duration", + Utils::GetTransitionDuration()); - req->SendOKResponse(response); + req->SendOKResponse(response); } diff --git a/src/WSServer.cpp b/src/WSServer.cpp index 5d0d9f02..4ca45823 100644 --- a/src/WSServer.cpp +++ b/src/WSServer.cpp @@ -33,136 +33,136 @@ QT_USE_NAMESPACE WSServer* WSServer::Instance = nullptr; WSServer::WSServer(QObject* parent) - : QObject(parent), - _wsServer(Q_NULLPTR), - _clients(), - _clMutex(QMutex::Recursive) + : QObject(parent), + _wsServer(Q_NULLPTR), + _clients(), + _clMutex(QMutex::Recursive) { - _wsServer = new QWebSocketServer( - QStringLiteral("obs-websocket"), - QWebSocketServer::NonSecureMode); + _wsServer = new QWebSocketServer( + QStringLiteral("obs-websocket"), + QWebSocketServer::NonSecureMode); } WSServer::~WSServer() { - Stop(); + Stop(); } void WSServer::Start(quint16 port) { - if (port == _wsServer->serverPort()) - return; + if (port == _wsServer->serverPort()) + return; - if(_wsServer->isListening()) - Stop(); + if(_wsServer->isListening()) + Stop(); - bool serverStarted = _wsServer->listen(QHostAddress::Any, port); - if (serverStarted) { - blog(LOG_INFO, "server started successfully on TCP port %d", port); + bool serverStarted = _wsServer->listen(QHostAddress::Any, port); + if (serverStarted) { + blog(LOG_INFO, "server started successfully on TCP port %d", port); - connect(_wsServer, SIGNAL(newConnection()), - this, SLOT(onNewConnection())); - } - else { - QString errorString = _wsServer->errorString(); - blog(LOG_ERROR, - "error: failed to start server on TCP port %d: %s", - port, errorString.toUtf8().constData()); + connect(_wsServer, SIGNAL(newConnection()), + this, SLOT(onNewConnection())); + } + else { + QString errorString = _wsServer->errorString(); + blog(LOG_ERROR, + "error: failed to start server on TCP port %d: %s", + port, errorString.toUtf8().constData()); - QMainWindow* mainWindow = (QMainWindow*)obs_frontend_get_main_window(); + QMainWindow* mainWindow = (QMainWindow*)obs_frontend_get_main_window(); - obs_frontend_push_ui_translation(obs_module_get_string); - QString title = tr("OBSWebsocket.Server.StartFailed.Title"); - QString msg = tr("OBSWebsocket.Server.StartFailed.Message").arg(port); - obs_frontend_pop_ui_translation(); + obs_frontend_push_ui_translation(obs_module_get_string); + QString title = tr("OBSWebsocket.Server.StartFailed.Title"); + QString msg = tr("OBSWebsocket.Server.StartFailed.Message").arg(port); + obs_frontend_pop_ui_translation(); - QMessageBox::warning(mainWindow, title, msg); - } + QMessageBox::warning(mainWindow, title, msg); + } } void WSServer::Stop() { - QMutexLocker locker(&_clMutex); - for(QWebSocket* pClient : _clients) { - pClient->close(); - } - locker.unlock(); + QMutexLocker locker(&_clMutex); + for(QWebSocket* pClient : _clients) { + pClient->close(); + } + locker.unlock(); - _wsServer->close(); + _wsServer->close(); - blog(LOG_INFO, "server stopped successfully"); + blog(LOG_INFO, "server stopped successfully"); } void WSServer::broadcast(QString message) { - QMutexLocker locker(&_clMutex); - for(QWebSocket* pClient : _clients) { - if (Config::Current()->AuthRequired - && (pClient->property(PROP_AUTHENTICATED).toBool() == false)) { - // Skip this client if unauthenticated - continue; - } - pClient->sendTextMessage(message); - } + QMutexLocker locker(&_clMutex); + for(QWebSocket* pClient : _clients) { + if (Config::Current()->AuthRequired + && (pClient->property(PROP_AUTHENTICATED).toBool() == false)) { + // Skip this client if unauthenticated + continue; + } + pClient->sendTextMessage(message); + } } void WSServer::onNewConnection() { - QWebSocket* pSocket = _wsServer->nextPendingConnection(); - if (pSocket) { - connect(pSocket, SIGNAL(textMessageReceived(const QString&)), - this, SLOT(onTextMessageReceived(QString))); - connect(pSocket, SIGNAL(disconnected()), - this, SLOT(onSocketDisconnected())); + QWebSocket* pSocket = _wsServer->nextPendingConnection(); + if (pSocket) { + connect(pSocket, SIGNAL(textMessageReceived(const QString&)), + this, SLOT(onTextMessageReceived(QString))); + connect(pSocket, SIGNAL(disconnected()), + this, SLOT(onSocketDisconnected())); - pSocket->setProperty(PROP_AUTHENTICATED, false); + pSocket->setProperty(PROP_AUTHENTICATED, false); - QMutexLocker locker(&_clMutex); - _clients << pSocket; - locker.unlock(); + QMutexLocker locker(&_clMutex); + _clients << pSocket; + locker.unlock(); - QHostAddress clientAddr = pSocket->peerAddress(); - QString clientIp = Utils::FormatIPAddress(clientAddr); + QHostAddress clientAddr = pSocket->peerAddress(); + QString clientIp = Utils::FormatIPAddress(clientAddr); - blog(LOG_INFO, "new client connection from %s:%d", - clientIp.toUtf8().constData(), pSocket->peerPort()); + blog(LOG_INFO, "new client connection from %s:%d", + clientIp.toUtf8().constData(), pSocket->peerPort()); - obs_frontend_push_ui_translation(obs_module_get_string); - QString title = tr("OBSWebsocket.NotifyConnect.Title"); - QString msg = tr("OBSWebsocket.NotifyConnect.Message") - .arg(Utils::FormatIPAddress(clientAddr)); - obs_frontend_pop_ui_translation(); + obs_frontend_push_ui_translation(obs_module_get_string); + QString title = tr("OBSWebsocket.NotifyConnect.Title"); + QString msg = tr("OBSWebsocket.NotifyConnect.Message") + .arg(Utils::FormatIPAddress(clientAddr)); + obs_frontend_pop_ui_translation(); - Utils::SysTrayNotify(msg, QSystemTrayIcon::Information, title); - } + Utils::SysTrayNotify(msg, QSystemTrayIcon::Information, title); + } } void WSServer::onTextMessageReceived(QString message) { - QWebSocket* pSocket = qobject_cast(sender()); - if (pSocket) { - WSRequestHandler handler(pSocket); - handler.processIncomingMessage(message); - } + QWebSocket* pSocket = qobject_cast(sender()); + if (pSocket) { + WSRequestHandler handler(pSocket); + handler.processIncomingMessage(message); + } } void WSServer::onSocketDisconnected() { - QWebSocket* pSocket = qobject_cast(sender()); - if (pSocket) { - pSocket->setProperty(PROP_AUTHENTICATED, false); + QWebSocket* pSocket = qobject_cast(sender()); + if (pSocket) { + pSocket->setProperty(PROP_AUTHENTICATED, false); - QMutexLocker locker(&_clMutex); - _clients.removeAll(pSocket); - locker.unlock(); + QMutexLocker locker(&_clMutex); + _clients.removeAll(pSocket); + locker.unlock(); - pSocket->deleteLater(); + pSocket->deleteLater(); - QHostAddress clientAddr = pSocket->peerAddress(); - QString clientIp = Utils::FormatIPAddress(clientAddr); + QHostAddress clientAddr = pSocket->peerAddress(); + QString clientIp = Utils::FormatIPAddress(clientAddr); - blog(LOG_INFO, "client %s:%d disconnected", - clientIp.toUtf8().constData(), pSocket->peerPort()); + blog(LOG_INFO, "client %s:%d disconnected", + clientIp.toUtf8().constData(), pSocket->peerPort()); - obs_frontend_push_ui_translation(obs_module_get_string); - QString title = tr("OBSWebsocket.NotifyDisconnect.Title"); - QString msg = tr("OBSWebsocket.NotifyDisconnect.Message") - .arg(Utils::FormatIPAddress(clientAddr)); - obs_frontend_pop_ui_translation(); + obs_frontend_push_ui_translation(obs_module_get_string); + QString title = tr("OBSWebsocket.NotifyDisconnect.Title"); + QString msg = tr("OBSWebsocket.NotifyDisconnect.Message") + .arg(Utils::FormatIPAddress(clientAddr)); + obs_frontend_pop_ui_translation(); - Utils::SysTrayNotify(msg, QSystemTrayIcon::Information, title); - } + Utils::SysTrayNotify(msg, QSystemTrayIcon::Information, title); + } } diff --git a/src/WSServer.h b/src/WSServer.h index 010c4bd3..3d33532a 100644 --- a/src/WSServer.h +++ b/src/WSServer.h @@ -29,24 +29,24 @@ QT_FORWARD_DECLARE_CLASS(QWebSocketServer) QT_FORWARD_DECLARE_CLASS(QWebSocket) class WSServer : public QObject { - Q_OBJECT - public: - explicit WSServer(QObject* parent = Q_NULLPTR); - virtual ~WSServer(); - void Start(quint16 port); - void Stop(); - void broadcast(QString message); - static WSServer* Instance; + Q_OBJECT + public: + explicit WSServer(QObject* parent = Q_NULLPTR); + virtual ~WSServer(); + void Start(quint16 port); + void Stop(); + void broadcast(QString message); + static WSServer* Instance; - private slots: - void onNewConnection(); - void onTextMessageReceived(QString message); - void onSocketDisconnected(); + private slots: + void onNewConnection(); + void onTextMessageReceived(QString message); + void onSocketDisconnected(); - private: - QWebSocketServer* _wsServer; - QList _clients; - QMutex _clMutex; + private: + QWebSocketServer* _wsServer; + QList _clients; + QMutex _clMutex; }; -#endif // WSSERVER_H \ No newline at end of file +#endif // WSSERVER_H diff --git a/src/forms/settings-dialog.cpp b/src/forms/settings-dialog.cpp index 557744ce..9bdaaa39 100644 --- a/src/forms/settings-dialog.cpp +++ b/src/forms/settings-dialog.cpp @@ -26,79 +26,79 @@ with this program. If not, see #define CHANGE_ME "changeme" SettingsDialog::SettingsDialog(QWidget* parent) : - QDialog(parent, Qt::Dialog), - ui(new Ui::SettingsDialog) + QDialog(parent, Qt::Dialog), + ui(new Ui::SettingsDialog) { - ui->setupUi(this); + ui->setupUi(this); - connect(ui->authRequired, &QCheckBox::stateChanged, - this, &SettingsDialog::AuthCheckboxChanged); - connect(ui->buttonBox, &QDialogButtonBox::accepted, - this, &SettingsDialog::FormAccepted); + connect(ui->authRequired, &QCheckBox::stateChanged, + this, &SettingsDialog::AuthCheckboxChanged); + connect(ui->buttonBox, &QDialogButtonBox::accepted, + this, &SettingsDialog::FormAccepted); - AuthCheckboxChanged(); + AuthCheckboxChanged(); } void SettingsDialog::showEvent(QShowEvent* event) { - Config* conf = Config::Current(); + Config* conf = Config::Current(); - ui->serverEnabled->setChecked(conf->ServerEnabled); - ui->serverPort->setValue(conf->ServerPort); + ui->serverEnabled->setChecked(conf->ServerEnabled); + ui->serverPort->setValue(conf->ServerPort); - ui->debugEnabled->setChecked(conf->DebugEnabled); - ui->alertsEnabled->setChecked(conf->AlertsEnabled); + ui->debugEnabled->setChecked(conf->DebugEnabled); + ui->alertsEnabled->setChecked(conf->AlertsEnabled); - ui->authRequired->setChecked(conf->AuthRequired); - ui->password->setText(CHANGE_ME); + ui->authRequired->setChecked(conf->AuthRequired); + ui->password->setText(CHANGE_ME); } void SettingsDialog::ToggleShowHide() { - if (!isVisible()) - setVisible(true); - else - setVisible(false); + if (!isVisible()) + setVisible(true); + else + setVisible(false); } void SettingsDialog::AuthCheckboxChanged() { - if (ui->authRequired->isChecked()) - ui->password->setEnabled(true); - else - ui->password->setEnabled(false); + if (ui->authRequired->isChecked()) + ui->password->setEnabled(true); + else + ui->password->setEnabled(false); } void SettingsDialog::FormAccepted() { - Config* conf = Config::Current(); + Config* conf = Config::Current(); - conf->ServerEnabled = ui->serverEnabled->isChecked(); - conf->ServerPort = ui->serverPort->value(); + conf->ServerEnabled = ui->serverEnabled->isChecked(); + conf->ServerPort = ui->serverPort->value(); - conf->DebugEnabled = ui->debugEnabled->isChecked(); - conf->AlertsEnabled = ui->alertsEnabled->isChecked(); + conf->DebugEnabled = ui->debugEnabled->isChecked(); + conf->AlertsEnabled = ui->alertsEnabled->isChecked(); - if (ui->authRequired->isChecked()) { - if (ui->password->text() != CHANGE_ME) { - conf->SetPassword(ui->password->text()); - } + if (ui->authRequired->isChecked()) { + if (ui->password->text() != CHANGE_ME) { + conf->SetPassword(ui->password->text()); + } - if (!Config::Current()->Secret.isEmpty()) - conf->AuthRequired = true; - else - conf->AuthRequired = false; - } - else - { - conf->AuthRequired = false; - } + if (!Config::Current()->Secret.isEmpty()) + conf->AuthRequired = true; + else + conf->AuthRequired = false; + } + else + { + conf->AuthRequired = false; + } - conf->Save(); + conf->Save(); - if (conf->ServerEnabled) - WSServer::Instance->Start(conf->ServerPort); - else - WSServer::Instance->Stop(); + if (conf->ServerEnabled) + WSServer::Instance->Start(conf->ServerPort); + else + WSServer::Instance->Stop(); } SettingsDialog::~SettingsDialog() { - delete ui; + delete ui; } diff --git a/src/forms/settings-dialog.h b/src/forms/settings-dialog.h index 3b0f2bbf..17433f1d 100644 --- a/src/forms/settings-dialog.h +++ b/src/forms/settings-dialog.h @@ -25,20 +25,20 @@ with this program. If not, see class SettingsDialog : public QDialog { - Q_OBJECT + Q_OBJECT public: - explicit SettingsDialog(QWidget* parent = 0); - ~SettingsDialog(); - void showEvent(QShowEvent* event); - void ToggleShowHide(); + explicit SettingsDialog(QWidget* parent = 0); + ~SettingsDialog(); + void showEvent(QShowEvent* event); + void ToggleShowHide(); private Q_SLOTS: - void AuthCheckboxChanged(); - void FormAccepted(); + void AuthCheckboxChanged(); + void FormAccepted(); private: - Ui::SettingsDialog* ui; + Ui::SettingsDialog* ui; }; #endif // SETTINGSDIALOG_H diff --git a/src/forms/settings-dialog.ui b/src/forms/settings-dialog.ui index 1dbdc82e..6964a153 100644 --- a/src/forms/settings-dialog.ui +++ b/src/forms/settings-dialog.ui @@ -2,150 +2,150 @@ SettingsDialog - - - 0 - 0 - 407 - 195 - - - - - 0 - 0 - - - - OBSWebsocket.Settings.DialogTitle - - - false - - - - QLayout::SetDefaultConstraint - - - - - - - OBSWebsocket.Settings.AuthRequired - - - - - - - OBSWebsocket.Settings.Password - - - - - - - QLineEdit::Password - - - - - - - OBSWebsocket.Settings.ServerEnable - - - true - - - - - - - OBSWebsocket.Settings.ServerPort - - - - - - - 1024 - - - 65535 - - - 4444 - - - - - - - OBSWebsocket.Settings.AlertsEnable - - - true - - - - - - - OBSWebsocket.Settings.DebugEnable - - - false - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - + + + 0 + 0 + 407 + 195 + + + + + 0 + 0 + + + + OBSWebsocket.Settings.DialogTitle + + + false + + + + QLayout::SetDefaultConstraint + + + + + + + OBSWebsocket.Settings.AuthRequired + + + + + + + OBSWebsocket.Settings.Password + + + + + + + QLineEdit::Password + + + + + + + OBSWebsocket.Settings.ServerEnable + + + true + + + + + + + OBSWebsocket.Settings.ServerPort + + + + + + + 1024 + + + 65535 + + + 4444 + + + + + + + OBSWebsocket.Settings.AlertsEnable + + + true + + + + + + + OBSWebsocket.Settings.DebugEnable + + + false + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + - - buttonBox - accepted() - SettingsDialog - accept() - - - 248 - 294 - - - 157 - 314 - - - - - buttonBox - rejected() - SettingsDialog - reject() - - - 316 - 300 - - - 286 - 314 - - - + + buttonBox + accepted() + SettingsDialog + accept() + + + 248 + 294 + + + 157 + 314 + + + + + buttonBox + rejected() + SettingsDialog + reject() + + + 316 + 300 + + + 286 + 314 + + + diff --git a/src/obs-websocket.cpp b/src/obs-websocket.cpp index 4fd72f0d..fd18af5d 100644 --- a/src/obs-websocket.cpp +++ b/src/obs-websocket.cpp @@ -40,41 +40,41 @@ OBS_MODULE_USE_DEFAULT_LOCALE("obs-websocket", "en-US") SettingsDialog* settings_dialog; bool obs_module_load(void) { - blog(LOG_INFO, "you can haz websockets (version %s)", OBS_WEBSOCKET_VERSION); - blog(LOG_INFO, "qt version (compile-time): %s ; qt version (run-time): %s", - QT_VERSION_STR, qVersion()); + blog(LOG_INFO, "you can haz websockets (version %s)", OBS_WEBSOCKET_VERSION); + blog(LOG_INFO, "qt version (compile-time): %s ; qt version (run-time): %s", + QT_VERSION_STR, qVersion()); - // Core setup - Config* config = Config::Current(); - config->Load(); + // Core setup + Config* config = Config::Current(); + config->Load(); - WSServer::Instance = new WSServer(); - WSEvents::Instance = new WSEvents(WSServer::Instance); + WSServer::Instance = new WSServer(); + WSEvents::Instance = new WSEvents(WSServer::Instance); - if (config->ServerEnabled) - WSServer::Instance->Start(config->ServerPort); + if (config->ServerEnabled) + WSServer::Instance->Start(config->ServerPort); - // UI setup - QAction* menu_action = (QAction*)obs_frontend_add_tools_menu_qaction( - obs_module_text("OBSWebsocket.Menu.SettingsItem")); + // UI setup + QAction* menu_action = (QAction*)obs_frontend_add_tools_menu_qaction( + obs_module_text("OBSWebsocket.Menu.SettingsItem")); - obs_frontend_push_ui_translation(obs_module_get_string); - QMainWindow* main_window = (QMainWindow*)obs_frontend_get_main_window(); - settings_dialog = new SettingsDialog(main_window); - obs_frontend_pop_ui_translation(); + obs_frontend_push_ui_translation(obs_module_get_string); + QMainWindow* main_window = (QMainWindow*)obs_frontend_get_main_window(); + settings_dialog = new SettingsDialog(main_window); + obs_frontend_pop_ui_translation(); - auto menu_cb = [] { - settings_dialog->ToggleShowHide(); - }; - menu_action->connect(menu_action, &QAction::triggered, menu_cb); + auto menu_cb = [] { + settings_dialog->ToggleShowHide(); + }; + menu_action->connect(menu_action, &QAction::triggered, menu_cb); - // Loading finished - blog(LOG_INFO, "module loaded!"); + // Loading finished + blog(LOG_INFO, "module loaded!"); - return true; + return true; } void obs_module_unload() { - blog(LOG_INFO, "goodbye!"); + blog(LOG_INFO, "goodbye!"); } diff --git a/src/obs-websocket.h b/src/obs-websocket.h index 1ff931f6..7edf166e 100644 --- a/src/obs-websocket.h +++ b/src/obs-websocket.h @@ -43,4 +43,4 @@ using OBSOutputAutoRelease = #define blog(level, msg, ...) blog(level, "[obs-websocket] " msg, ##__VA_ARGS__) -#endif // OBSWEBSOCKET_H \ No newline at end of file +#endif // OBSWEBSOCKET_H