From 46719fa8e69d393ac0578124f49cca7d548dbef7 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 13 Jan 2024 15:13:57 +0100 Subject: [PATCH 1/5] cmake: Skip generate export header if interface in legacy path It backports a behavior from CMake 3.0 to CMake 2.0 --- cmake/Modules/ObsHelpers.cmake | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cmake/Modules/ObsHelpers.cmake b/cmake/Modules/ObsHelpers.cmake index 0a7d25241253b4..b4620ab56daf0b 100644 --- a/cmake/Modules/ObsHelpers.cmake +++ b/cmake/Modules/ObsHelpers.cmake @@ -251,10 +251,13 @@ function(export_target target) COMPONENT obs_libraries ${_EXCLUDE}) - include(GenerateExportHeader) - generate_export_header(${target} EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) + get_target_property(target_type ${target} TYPE) + if(NOT target_type STREQUAL INTERFACE_LIBRARY) + include(GenerateExportHeader) + generate_export_header(${target} EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) - target_sources(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) + target_sources(${target} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/${target}_EXPORT.h) + endif() set(TARGETS_EXPORT_NAME "${target}Targets") include(CMakePackageConfigHelpers) From 142be9104a1c6eff9d4965309daf8f17e5c600b9 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 13 Jan 2024 16:16:19 +0100 Subject: [PATCH 2/5] cmake: Skip PDB install for interface target --- cmake/Modules/ObsHelpers_Windows.cmake | 3 ++- cmake/windows/helpers.cmake | 15 +++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cmake/Modules/ObsHelpers_Windows.cmake b/cmake/Modules/ObsHelpers_Windows.cmake index 71ac4deb305af1..b85751410466e5 100644 --- a/cmake/Modules/ObsHelpers_Windows.cmake +++ b/cmake/Modules/ObsHelpers_Windows.cmake @@ -234,7 +234,8 @@ function(export_target target) COMPONENT obs_libraries EXCLUDE_FROM_ALL) - if(MSVC) + get_target_property(target_type ${target} TYPE) + if(MSVC AND NOT target_type STREQUAL INTERFACE_LIBRARY) install( FILES $ CONFIGURATIONS "RelWithDebInfo" "Debug" diff --git a/cmake/windows/helpers.cmake b/cmake/windows/helpers.cmake index 9472930d8b4723..a62576b1df8686 100644 --- a/cmake/windows/helpers.cmake +++ b/cmake/windows/helpers.cmake @@ -274,12 +274,15 @@ function(target_export target) set(exclude_variant EXCLUDE_FROM_ALL) _target_export(${target}) - install( - FILES "$" - CONFIGURATIONS RelWithDebInfo Debug Release - DESTINATION "${OBS_EXECUTABLE_DESTINATION}" - COMPONENT Development - OPTIONAL) + get_target_property(target_type ${target} TYPE) + if(NOT target_type STREQUAL INTERFACE_LIBRARY) + install( + FILES "$" + CONFIGURATIONS RelWithDebInfo Debug Release + DESTINATION "${OBS_EXECUTABLE_DESTINATION}" + COMPONENT Development + OPTIONAL) + endif() endfunction() # Helper function to add resources into bundle From 5731cd9d8dff56ddbdf5073d5c962be8aa2a6126 Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 10 Jan 2024 17:19:51 +0100 Subject: [PATCH 3/5] [TO DROP] obs-browser: Add procedure handler based API --- .gitmodules | 2 +- plugins/obs-browser | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 4599972c5bda3a..bb29fa4cc8ed44 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,7 +3,7 @@ url = https://github.com/obsproject/libdshowcapture.git [submodule "plugins/obs-browser"] path = plugins/obs-browser - url = https://github.com/obsproject/obs-browser.git + url = https://github.com/tytan652/obs-browser.git [submodule "plugins/obs-outputs/ftl-sdk"] path = plugins/obs-outputs/ftl-sdk url = https://github.com/Mixer/ftl-sdk.git diff --git a/plugins/obs-browser b/plugins/obs-browser index 1e68bacbd1e11c..18009b46deef46 160000 --- a/plugins/obs-browser +++ b/plugins/obs-browser @@ -1 +1 @@ -Subproject commit 1e68bacbd1e11c47fa2032614915f2fe4a4dd22c +Subproject commit 18009b46deef4638906f8b7ddde2c455e8900555 From c3b5a45b8e4edf97580493ed9e815e08407aa74a Mon Sep 17 00:00:00 2001 From: tytan652 Date: Wed, 10 Jan 2024 17:21:01 +0100 Subject: [PATCH 4/5] UI: Switch browser-panel interface for browser-api --- UI/auth-oauth.cpp | 11 +++++----- UI/auth-oauth.hpp | 4 ++-- UI/auth-restream.cpp | 14 ++++++------- UI/auth-twitch.cpp | 30 ++++++++++++++-------------- UI/auth-youtube.cpp | 14 ++++++------- UI/auth-youtube.hpp | 2 +- UI/cmake/feature-browserpanels.cmake | 4 ++-- UI/cmake/feature-restream.cmake | 1 + UI/cmake/feature-twitch.cmake | 1 + UI/cmake/feature-whatsnew.cmake | 4 +++- UI/cmake/feature-youtube.cmake | 1 + UI/cmake/legacy.cmake | 19 +++++------------- UI/update/shared-update.cpp | 7 +++---- UI/update/win-update.cpp | 4 ---- UI/window-basic-auto-config.cpp | 12 ++++++----- UI/window-basic-main-browser.cpp | 29 +++++++++++++-------------- UI/window-basic-main.cpp | 26 +++++++++++++----------- UI/window-basic-settings-stream.cpp | 12 ++++++----- UI/window-dock-browser.cpp | 2 +- UI/window-dock-browser.hpp | 13 ++++++------ UI/window-dock-youtube-app.cpp | 22 ++++++++++---------- UI/window-dock-youtube-app.hpp | 6 +++--- UI/window-extra-browsers.cpp | 10 +++++----- 23 files changed, 122 insertions(+), 126 deletions(-) diff --git a/UI/auth-oauth.cpp b/UI/auth-oauth.cpp index bb2fd714ca8501..258ccd2c70a394 100644 --- a/UI/auth-oauth.cpp +++ b/UI/auth-oauth.cpp @@ -19,9 +19,9 @@ using namespace json11; #ifdef BROWSER_AVAILABLE -#include -extern QCef *cef; -extern QCefCookieManager *panel_cookies; +#include +extern std::shared_ptr cef; +extern std::shared_ptr panel_cookies; #endif /* ------------------------------------------------------------------------- */ @@ -45,7 +45,8 @@ OAuthLogin::OAuthLogin(QWidget *parent, const std::string &url, bool token) OBSBasic::InitBrowserPanelSafeBlock(); - cefWidget = cef->create_widget(nullptr, url, panel_cookies); + cefWidget = + cef->createWidget(nullptr, url.c_str(), panel_cookies.get()); if (!cefWidget) { fail = true; return; @@ -65,7 +66,7 @@ OAuthLogin::OAuthLogin(QWidget *parent, const std::string &url, bool token) bottomLayout->addStretch(); QVBoxLayout *topLayout = new QVBoxLayout(this); - topLayout->addWidget(cefWidget); + topLayout->addWidget(cefWidget->qwidget()); topLayout->addLayout(bottomLayout); #else UNUSED_PARAMETER(url); diff --git a/UI/auth-oauth.hpp b/UI/auth-oauth.hpp index 364dccdc4442ab..909a922df95817 100644 --- a/UI/auth-oauth.hpp +++ b/UI/auth-oauth.hpp @@ -6,12 +6,12 @@ #include "auth-base.hpp" -class QCefWidget; +class OBSBrowserQCefWidget; class OAuthLogin : public QDialog { Q_OBJECT - QCefWidget *cefWidget = nullptr; + OBSBrowserQCefWidget *cefWidget = nullptr; QString code; bool get_token = false; bool fail = false; diff --git a/UI/auth-restream.cpp b/UI/auth-restream.cpp index bedc10c7053db5..22238c22eb3cd7 100644 --- a/UI/auth-restream.cpp +++ b/UI/auth-restream.cpp @@ -139,7 +139,7 @@ void RestreamAuth::LoadUI() OBSBasic::InitBrowserPanelSafeBlock(); OBSBasic *main = OBSBasic::Get(); - QCefWidget *browser; + OBSBrowserQCefWidget *browser; std::string url; std::string script; @@ -157,7 +157,7 @@ void RestreamAuth::LoadUI() chat->setWindowTitle(QTStr("Auth.Chat")); chat->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(chat, url, panel_cookies); + browser = cef->createWidget(chat, url.c_str(), panel_cookies.get()); chat->SetWidget(browser); main->AddDockWidget(chat, Qt::RightDockWidgetArea); @@ -173,7 +173,7 @@ void RestreamAuth::LoadUI() info->setWindowTitle(QTStr("Auth.StreamInfo")); info->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(info, url, panel_cookies); + browser = cef->createWidget(info, url.c_str(), panel_cookies.get()); info->SetWidget(browser); main->AddDockWidget(info, Qt::LeftDockWidgetArea); @@ -189,7 +189,7 @@ void RestreamAuth::LoadUI() channels->setWindowTitle(QTStr("RestreamAuth.Channels")); channels->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(channels, url, panel_cookies); + browser = cef->createWidget(channels, url.c_str(), panel_cookies.get()); channels->SetWidget(browser); main->AddDockWidget(channels, Qt::LeftDockWidgetArea); @@ -224,7 +224,7 @@ void RestreamAuth::LoadUI() bool RestreamAuth::RetryLogin() { OAuthLogin login(OBSBasic::Get(), RESTREAM_AUTH_URL, false); - cef->add_popup_whitelist_url("about:blank", &login); + cef->addPopupWhitelistUrl("about:blank", &login); if (login.exec() == QDialog::Rejected) { return false; } @@ -242,7 +242,7 @@ bool RestreamAuth::RetryLogin() std::shared_ptr RestreamAuth::Login(QWidget *parent, const std::string &) { OAuthLogin login(parent, RESTREAM_AUTH_URL, false); - cef->add_popup_whitelist_url("about:blank", &login); + cef->addPopupWhitelistUrl("about:blank", &login); if (login.exec() == QDialog::Rejected) { return nullptr; @@ -276,7 +276,7 @@ static std::shared_ptr CreateRestreamAuth() static void DeleteCookies() { if (panel_cookies) { - panel_cookies->DeleteCookies("restream.io", std::string()); + panel_cookies->deleteCookies("restream.io", nullptr); } } diff --git a/UI/auth-twitch.cpp b/UI/auth-twitch.cpp index 88e14e0befde39..7ec519f4308e16 100644 --- a/UI/auth-twitch.cpp +++ b/UI/auth-twitch.cpp @@ -41,12 +41,12 @@ TwitchAuth::TwitchAuth(const Def &d) : OAuthStreamKey(d) if (!cef) return; - cef->add_popup_whitelist_url( + cef->addPopupWhitelistUrl( "https://twitch.tv/popout/frankerfacez/chat?ffz-settings", this); /* enables javascript-based popups. basically bttv popups */ - cef->add_popup_whitelist_url("about:blank#blocked", this); + cef->addPopupWhitelistUrl("about:blank#blocked", this); uiLoadTimer.setSingleShot(true); uiLoadTimer.setInterval(500); @@ -224,7 +224,7 @@ void TwitchAuth::LoadUI() OBSBasic::InitBrowserPanelSafeBlock(); OBSBasic *main = OBSBasic::Get(); - QCefWidget *browser; + OBSBrowserQCefWidget *browser; std::string url; std::string script; @@ -258,9 +258,9 @@ void TwitchAuth::LoadUI() chat->setWindowTitle(QTStr("Auth.Chat")); chat->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(chat, url, panel_cookies); + browser = cef->createWidget(chat, url.c_str(), panel_cookies.get()); chat->SetWidget(browser); - cef->add_force_popup_url(moderation_tools_url, chat); + cef->addForcePopupUrl(moderation_tools_url.c_str(), chat); if (App()->IsThemeDark()) { script = "localStorage.setItem('twilight.theme', 1);"; @@ -277,7 +277,7 @@ void TwitchAuth::LoadUI() script += ffz_script; } - browser->setStartupScript(script); + browser->setStartupScript(script.c_str()); main->AddDockWidget(chat, Qt::RightDockWidgetArea); @@ -307,7 +307,7 @@ void TwitchAuth::LoadSecondaryUIPanes() { OBSBasic *main = OBSBasic::Get(); - QCefWidget *browser; + OBSBrowserQCefWidget *browser; std::string url; std::string script; @@ -347,9 +347,9 @@ void TwitchAuth::LoadSecondaryUIPanes() info->setWindowTitle(QTStr("Auth.StreamInfo")); info->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(info, url, panel_cookies); + browser = cef->createWidget(info, url.c_str(), panel_cookies.get()); info->SetWidget(browser); - browser->setStartupScript(script); + browser->setStartupScript(script.c_str()); main->AddDockWidget(info, Qt::RightDockWidgetArea); @@ -366,9 +366,9 @@ void TwitchAuth::LoadSecondaryUIPanes() stats->setWindowTitle(QTStr("TwitchAuth.Stats")); stats->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(stats, url, panel_cookies); + browser = cef->createWidget(stats, url.c_str(), panel_cookies.get()); stats->SetWidget(browser); - browser->setStartupScript(script); + browser->setStartupScript(script.c_str()); main->AddDockWidget(stats, Qt::RightDockWidgetArea); @@ -386,9 +386,9 @@ void TwitchAuth::LoadSecondaryUIPanes() feed->setWindowTitle(QTStr("TwitchAuth.Feed")); feed->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(feed, url, panel_cookies); + browser = cef->createWidget(feed, url.c_str(), panel_cookies.get()); feed->SetWidget(browser); - browser->setStartupScript(script); + browser->setStartupScript(script.c_str()); main->AddDockWidget(feed, Qt::RightDockWidgetArea); @@ -454,7 +454,7 @@ void TwitchAuth::TryLoadSecondaryUIPanes() } }; - panel_cookies->CheckForCookie("https://www.twitch.tv", "auth-token", + panel_cookies->checkForCookie("https://www.twitch.tv", "auth-token", cb); } @@ -507,7 +507,7 @@ static std::shared_ptr CreateTwitchAuth() static void DeleteCookies() { if (panel_cookies) - panel_cookies->DeleteCookies("twitch.tv", std::string()); + panel_cookies->deleteCookies("twitch.tv", nullptr); } void RegisterTwitchAuth() diff --git a/UI/auth-youtube.cpp b/UI/auth-youtube.cpp index 11587cc2df5952..78d0fde31ed8d8 100644 --- a/UI/auth-youtube.cpp +++ b/UI/auth-youtube.cpp @@ -150,7 +150,7 @@ void YoutubeAuth::LoadUI() OBSBasic::InitBrowserPanelSafeBlock(); OBSBasic *main = OBSBasic::Get(); - QCefWidget *browser; + OBSBrowserQCefWidget *browser; QSize size = main->frameSize(); QPoint pos = main->pos(); @@ -161,8 +161,8 @@ void YoutubeAuth::LoadUI() chat->setMinimumSize(200, 300); chat->setAllowedAreas(Qt::AllDockWidgetAreas); - browser = cef->create_widget(chat, YOUTUBE_CHAT_PLACEHOLDER_URL, - panel_cookies); + browser = cef->createWidget(chat, YOUTUBE_CHAT_PLACEHOLDER_URL, + panel_cookies.get()); browser->setStartupScript(ytchat_script); chat->SetWidget(browser); @@ -198,7 +198,7 @@ void YoutubeAuth::SetChatId(const QString &chat_id, QString chat_url = QString(YOUTUBE_CHAT_POPOUT_URL).arg(chat_id); if (chat && chat->cefWidget) { - chat->cefWidget->setURL(chat_url.toStdString()); + chat->cefWidget->setUrl(QT_TO_UTF8(chat_url)); chat->SetApiChatId(api_chat_id); } #else @@ -211,7 +211,7 @@ void YoutubeAuth::ResetChat() { #ifdef BROWSER_AVAILABLE if (chat && chat->cefWidget) { - chat->cefWidget->setURL(YOUTUBE_CHAT_PLACEHOLDER_URL); + chat->cefWidget->setUrl(YOUTUBE_CHAT_PLACEHOLDER_URL); } #endif } @@ -350,7 +350,7 @@ std::shared_ptr YoutubeAuth::Login(QWidget *owner, } #ifdef BROWSER_AVAILABLE -void YoutubeChatDock::SetWidget(QCefWidget *widget_) +void YoutubeChatDock::SetWidget(OBSBrowserQCefWidget *widget_) { lineEdit = new LineEditAutoResize(); lineEdit->setVisible(false); @@ -366,7 +366,7 @@ void YoutubeChatDock::SetWidget(QCefWidget *widget_) QVBoxLayout *layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); - layout->addWidget(widget_, 1); + layout->addWidget(widget_->qwidget(), 1); layout->addLayout(chatLayout); QWidget *widget = new QWidget(); diff --git a/UI/auth-youtube.hpp b/UI/auth-youtube.hpp index 28e17148d847d0..9f30dd11ca86ce 100644 --- a/UI/auth-youtube.hpp +++ b/UI/auth-youtube.hpp @@ -22,7 +22,7 @@ class YoutubeChatDock : public BrowserDock { public: inline YoutubeChatDock(const QString &title) : BrowserDock(title) {} - void SetWidget(QCefWidget *widget_); + void SetWidget(OBSBrowserQCefWidget *widget_); void SetApiChatId(const std::string &id); private slots: diff --git a/UI/cmake/feature-browserpanels.cmake b/UI/cmake/feature-browserpanels.cmake index bce82e4e1c5607..48ce617a7080eb 100644 --- a/UI/cmake/feature-browserpanels.cmake +++ b/UI/cmake/feature-browserpanels.cmake @@ -1,7 +1,7 @@ -if(TARGET OBS::browser-panels) +if(TARGET OBS::browser-api AND TARGET OBS::browser-panels) target_enable_feature(obs-studio "Browser panels" BROWSER_AVAILABLE) - target_link_libraries(obs-studio PRIVATE OBS::browser-panels) + target_link_libraries(obs-studio PRIVATE OBS::browser-api) target_sources( obs-studio diff --git a/UI/cmake/feature-restream.cmake b/UI/cmake/feature-restream.cmake index de3a5ac72e66b7..49ec247e99ca8d 100644 --- a/UI/cmake/feature-restream.cmake +++ b/UI/cmake/feature-restream.cmake @@ -1,5 +1,6 @@ if(RESTREAM_CLIENTID AND RESTREAM_HASH MATCHES "^(0|[a-fA-F0-9]+)$" + AND TARGET OBS::browser-api AND TARGET OBS::browser-panels) target_sources(obs-studio PRIVATE auth-restream.cpp auth-restream.hpp) target_enable_feature(obs-studio "Restream API connection" RESTREAM_ENABLED) diff --git a/UI/cmake/feature-twitch.cmake b/UI/cmake/feature-twitch.cmake index f160fb6cd6fe02..f1de376565ca92 100644 --- a/UI/cmake/feature-twitch.cmake +++ b/UI/cmake/feature-twitch.cmake @@ -1,5 +1,6 @@ if(TWITCH_CLIENTID AND TWITCH_HASH MATCHES "^(0|[a-fA-F0-9]+)$" + AND TARGET OBS::browser-api AND TARGET OBS::browser-panels) target_sources(obs-studio PRIVATE auth-twitch.cpp auth-twitch.hpp) target_enable_feature(obs-studio "Twitch API connection" TWITCH_ENABLED) diff --git a/UI/cmake/feature-whatsnew.cmake b/UI/cmake/feature-whatsnew.cmake index 3d093ae46cc059..f23f9c53948e28 100644 --- a/UI/cmake/feature-whatsnew.cmake +++ b/UI/cmake/feature-whatsnew.cmake @@ -2,7 +2,9 @@ include_guard(DIRECTORY) option(ENABLE_WHATSNEW "Enable WhatsNew dialog" ON) -if(ENABLE_WHATSNEW AND TARGET OBS::browser-panels) +if(ENABLE_WHATSNEW + AND TARGET OBS::browser-api + AND TARGET OBS::browser-panels) if(OS_MACOS) include(cmake/feature-macos-update.cmake) elseif(OS_LINUX) diff --git a/UI/cmake/feature-youtube.cmake b/UI/cmake/feature-youtube.cmake index 97be6ee7377589..8ba54dfc9ab8ac 100644 --- a/UI/cmake/feature-youtube.cmake +++ b/UI/cmake/feature-youtube.cmake @@ -2,6 +2,7 @@ if(YOUTUBE_CLIENTID AND YOUTUBE_SECRET AND YOUTUBE_CLIENTID_HASH MATCHES "^(0|[a-fA-F0-9]+)$" AND YOUTUBE_SECRET_HASH MATCHES "^(0|[a-fA-F0-9]+)$" + AND TARGET OBS::browser-api AND TARGET OBS::browser-panels) target_sources( obs-studio diff --git a/UI/cmake/legacy.cmake b/UI/cmake/legacy.cmake index 8221b9b8e506b7..0c7c7e4df60f2e 100644 --- a/UI/cmake/legacy.cmake +++ b/UI/cmake/legacy.cmake @@ -8,16 +8,6 @@ endif() project(obs) -# Legacy support -if(TARGET obs-browser - AND NOT TARGET OBS::browser-panels - AND BROWSER_PANEL_SUPPORT_ENABLED) - add_library(obs-browser-panels INTERFACE) - add_library(OBS::browser-panels ALIAS obs-browser-panels) - - target_include_directories(obs-browser-panels INTERFACE ${CMAKE_SOURCE_DIR}/plugins/obs-browser/panel) -endif() - set(OAUTH_BASE_URL "https://auth.obsproject.com/" CACHE STRING "Default OAuth base URL") @@ -28,6 +18,7 @@ if(NOT DEFINED TWITCH_CLIENTID OR "${TWITCH_CLIENTID}" STREQUAL "" OR NOT DEFINED TWITCH_HASH OR "${TWITCH_HASH}" STREQUAL "" + OR NOT TARGET OBS::browser-api OR NOT TARGET OBS::browser-panels) set(TWITCH_ENABLED OFF) set(TWITCH_CLIENTID "") @@ -40,6 +31,7 @@ if(NOT DEFINED RESTREAM_CLIENTID OR "${RESTREAM_CLIENTID}" STREQUAL "" OR NOT DEFINED RESTREAM_HASH OR "${RESTREAM_HASH}" STREQUAL "" + OR NOT TARGET OBS::browser-api OR NOT TARGET OBS::browser-panels) set(RESTREAM_ENABLED OFF) set(RESTREAM_CLIENTID "") @@ -291,12 +283,11 @@ target_link_libraries(obs PRIVATE CURL::libcurl FFmpeg::avcodec FFmpeg::avutil F set_target_properties(obs PROPERTIES FOLDER "frontend") -if(TARGET OBS::browser-panels) - get_target_property(_PANEL_INCLUDE_DIRECTORY OBS::browser-panels INTERFACE_INCLUDE_DIRECTORIES) - target_include_directories(obs PRIVATE ${_PANEL_INCLUDE_DIRECTORY}) - +if(TARGET OBS::browser-api AND TARGET OBS::browser-panels) target_compile_definitions(obs PRIVATE BROWSER_AVAILABLE) + target_link_libraries(obs PRIVATE OBS::browser-api) + target_sources(obs PRIVATE window-dock-browser.cpp window-dock-browser.hpp window-extra-browsers.cpp window-extra-browsers.hpp) diff --git a/UI/update/shared-update.cpp b/UI/update/shared-update.cpp index ef1b0b07511c0a..2b0c6f1f8b82ca 100644 --- a/UI/update/shared-update.cpp +++ b/UI/update/shared-update.cpp @@ -17,10 +17,9 @@ #include #ifdef BROWSER_AVAILABLE -#include +#include -struct QCef; -extern QCef *cef; +extern std::shared_ptr cef; #endif #ifndef MAC_WHATSNEW_URL @@ -309,7 +308,7 @@ try { void WhatsNewBrowserInitThread::run() { #ifdef BROWSER_AVAILABLE - cef->wait_for_browser_init(); + cef->waitForBrowserInit(); #endif emit Result(url); } diff --git a/UI/update/win-update.cpp b/UI/update/win-update.cpp index 5b21d34d843e0c..204f59cecb6acf 100644 --- a/UI/update/win-update.cpp +++ b/UI/update/win-update.cpp @@ -19,10 +19,6 @@ #include #include -#ifdef BROWSER_AVAILABLE -#include -#endif - using namespace std; using namespace updater; diff --git a/UI/window-basic-auto-config.cpp b/UI/window-basic-auto-config.cpp index 51947e4773c175..ae59c67853474f 100644 --- a/UI/window-basic-auto-config.cpp +++ b/UI/window-basic-auto-config.cpp @@ -14,7 +14,7 @@ #include "ui_AutoConfigStreamPage.h" #ifdef BROWSER_AVAILABLE -#include +#include #endif #include "auth-oauth.hpp" @@ -23,11 +23,13 @@ #include "youtube-api-wrappers.hpp" #endif -struct QCef; -struct QCefCookieManager; +#ifndef BROWSER_AVAILABLE +class OBSBrowserQCef; +class OBSBrowserQCefCookieManager; +#endif -extern QCef *cef; -extern QCefCookieManager *panel_cookies; +extern std::shared_ptr cef; +extern std::shared_ptr panel_cookies; #define wiz reinterpret_cast(wizard()) diff --git a/UI/window-basic-main-browser.cpp b/UI/window-basic-main-browser.cpp index ec99f141e4987b..45ea6918e6c686 100644 --- a/UI/window-basic-main-browser.cpp +++ b/UI/window-basic-main-browser.cpp @@ -24,14 +24,14 @@ #include #ifdef BROWSER_AVAILABLE -#include +#include +#else +class OBSBrowserQCef; +class OBSBrowserQCefCookieManager; #endif -struct QCef; -struct QCefCookieManager; - -extern QCef *cef; -extern QCefCookieManager *panel_cookies; +extern std::shared_ptr cef; +extern std::shared_ptr panel_cookies; static std::string GenId() { @@ -74,7 +74,7 @@ static void InitPanelCookieManager() sub_path += "obs_profile_cookies/"; sub_path += cookie_id; - panel_cookies = cef->create_cookie_manager(sub_path); + panel_cookies = cef->createCookieManager(sub_path.c_str()); } #endif @@ -82,9 +82,8 @@ void DestroyPanelCookieManager() { #ifdef BROWSER_AVAILABLE if (panel_cookies) { - panel_cookies->FlushStore(); - delete panel_cookies; - panel_cookies = nullptr; + panel_cookies->flushStore(); + panel_cookies.reset(); } #endif } @@ -93,7 +92,7 @@ void DeleteCookies() { #ifdef BROWSER_AVAILABLE if (panel_cookies) { - panel_cookies->DeleteCookies("", ""); + panel_cookies->deleteCookies("", ""); } #endif } @@ -116,8 +115,8 @@ void DuplicateCurrentCookieProfile(ConfigFile &config) dst_path += "obs_profile_cookies/"; dst_path += new_id; - BPtr src_path_full = cef->get_cookie_path(src_path); - BPtr dst_path_full = cef->get_cookie_path(dst_path); + BPtr src_path_full = cef->getCookiePath(src_path.c_str()); + BPtr dst_path_full = cef->getCookiePath(dst_path.c_str()); QDir srcDir(src_path_full.Get()); QDir dstDir(dst_path_full.Get()); @@ -151,12 +150,12 @@ void OBSBasic::InitBrowserPanelSafeBlock() #ifdef BROWSER_AVAILABLE if (!cef) return; - if (cef->init_browser()) { + if (cef->initBrowser()) { InitPanelCookieManager(); return; } - ExecThreadedWithoutBlocking([] { cef->wait_for_browser_init(); }, + ExecThreadedWithoutBlocking([] { cef->waitForBrowserInit(); }, QTStr("BrowserPanelInit.Title"), QTStr("BrowserPanelInit.Text")); InitPanelCookieManager(); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index c1911f8d269ea2..f2a24c75336095 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -108,16 +108,18 @@ using namespace std; #ifdef BROWSER_AVAILABLE -#include +#include #endif #include "ui-config.h" -struct QCef; -struct QCefCookieManager; +#ifndef BROWSER_AVAILABLE +class OBSBrowserQCef; +class OBSBrowserQCefCookieManager; +#endif -QCef *cef = nullptr; -QCefCookieManager *panel_cookies = nullptr; +std::shared_ptr cef = {}; +std::shared_ptr panel_cookies = {}; bool cef_js_avail = false; void DestroyPanelCookieManager(); @@ -2063,8 +2065,8 @@ void OBSBasic::OBSInit() BPtr failed_modules = mfi.failed_modules; #ifdef BROWSER_AVAILABLE - cef = obs_browser_init_panel(); - cef_js_avail = cef && obs_browser_qcef_version() >= 3; + cef = OBSBrowserQCef::createOBSBrowserQCef(); + cef_js_avail = cef && obs_browser_get_gcef_version() >= 3; #endif OBSDataAutoRelease obsData = obs_get_private_data(); @@ -2517,7 +2519,7 @@ void OBSBasic::ReceivedIntroJson(const QString &text) info_increment); config_save_safe(App()->GlobalConfig(), "tmp", nullptr); - cef->init_browser(); + cef->initBrowser(); WhatsNewBrowserInitThread *wnbit = new WhatsNewBrowserInitThread(QT_UTF8(info_url.c_str())); @@ -2550,7 +2552,8 @@ void OBSBasic::ShowWhatsNew(const QString &url) Qt::WindowFlags helpFlag = Qt::WindowContextHelpButtonHint; dlg->setWindowFlags(flags & (~helpFlag)); - QCefWidget *cefWidget = cef->create_widget(nullptr, info_url); + OBSBrowserQCefWidget *cefWidget = + cef->createWidget(nullptr, info_url.c_str()); if (!cefWidget) { return; } @@ -2567,7 +2570,7 @@ void OBSBasic::ShowWhatsNew(const QString &url) bottomLayout->addStretch(); QVBoxLayout *topLayout = new QVBoxLayout(dlg); - topLayout->addWidget(cefWidget); + topLayout->addWidget(cefWidget->qwidget()); topLayout->addLayout(bottomLayout); dlg->show(); @@ -3014,8 +3017,7 @@ OBSBasic::~OBSBasic() #ifdef BROWSER_AVAILABLE DestroyPanelCookieManager(); - delete cef; - cef = nullptr; + cef.reset(); #endif } diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 6c683ddb782222..9e1f4cc6770159 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -9,7 +9,7 @@ #include "url-push-button.hpp" #ifdef BROWSER_AVAILABLE -#include +#include #endif #include "auth-oauth.hpp" @@ -20,11 +20,13 @@ #include "youtube-api-wrappers.hpp" #endif -struct QCef; -struct QCefCookieManager; +#ifndef BROWSER_AVAILABLE +class OBSBrowserQCef; +class OBSBrowserQCefCookieManager; +#endif -extern QCef *cef; -extern QCefCookieManager *panel_cookies; +extern std::shared_ptr cef; +extern std::shared_ptr panel_cookies; enum class ListOpt : int { ShowAll = 1, diff --git a/UI/window-dock-browser.cpp b/UI/window-dock-browser.cpp index 30e1de1bce361f..a5e30ccc2115cd 100644 --- a/UI/window-dock-browser.cpp +++ b/UI/window-dock-browser.cpp @@ -11,7 +11,7 @@ void BrowserDock::closeEvent(QCloseEvent *event) static int panel_version = -1; if (panel_version == -1) { - panel_version = obs_browser_qcef_version(); + panel_version = obs_browser_get_gcef_version(); } if (panel_version >= 2 && !!cefWidget) { diff --git a/UI/window-dock-browser.hpp b/UI/window-dock-browser.hpp index 750ed42bd7370f..59faf83e799113 100644 --- a/UI/window-dock-browser.hpp +++ b/UI/window-dock-browser.hpp @@ -3,9 +3,10 @@ #include "window-dock.hpp" #include -#include -extern QCef *cef; -extern QCefCookieManager *panel_cookies; +#include + +extern std::shared_ptr cef; +extern std::shared_ptr panel_cookies; class BrowserDock : public OBSDock { private: @@ -19,11 +20,11 @@ class BrowserDock : public OBSDock { setAttribute(Qt::WA_NativeWindow); } - QScopedPointer cefWidget; + QScopedPointer cefWidget; - inline void SetWidget(QCefWidget *widget_) + inline void SetWidget(OBSBrowserQCefWidget *widget_) { - setWidget(widget_); + setWidget(widget_->qwidget()); cefWidget.reset(widget_); } diff --git a/UI/window-dock-youtube-app.cpp b/UI/window-dock-youtube-app.cpp index 79835bbc6b686d..6ce1effdb2db69 100644 --- a/UI/window-dock-youtube-app.cpp +++ b/UI/window-dock-youtube-app.cpp @@ -36,7 +36,7 @@ YouTubeAppDock::YouTubeAppDock(const QString &title) dockBrowser(nullptr), cookieManager(nullptr) { - cef->init_browser(); + cef->initBrowser(); OBSBasic::InitBrowserPanelSafeBlock(); AddYouTubeAppDock(); } @@ -44,8 +44,8 @@ YouTubeAppDock::YouTubeAppDock(const QString &title) YouTubeAppDock::~YouTubeAppDock() { if (cookieManager) { - cookieManager->FlushStore(); - delete cookieManager; + cookieManager->flushStore(); + cookieManager.reset(); } } @@ -79,7 +79,7 @@ void YouTubeAppDock::SettingsUpdated(bool cleanup) // definitely cleanup if YT switched off if (!ytservice || cleanup) { if (cookieManager) - cookieManager->DeleteCookies("", ""); + cookieManager->deleteCookies("", ""); } if (ytservice) Update(); @@ -138,17 +138,15 @@ void YouTubeAppDock::CreateBrowserWidget(const std::string &url) std::string dir_name = std::string("obs_profile_cookies_youtube/") + config_get_string(OBSBasic::Get()->Config(), "Panels", "CookieId"); - if (cookieManager) - delete cookieManager; - cookieManager = cef->create_cookie_manager(dir_name, true); + cookieManager = cef->createCookieManager(dir_name.c_str(), true); if (dockBrowser) delete dockBrowser; - dockBrowser = cef->create_widget(this, url, cookieManager); + dockBrowser = cef->createWidget(this, url.c_str(), cookieManager.get()); if (!dockBrowser) return; - if (obs_browser_qcef_version() >= 1) + if (obs_browser_get_gcef_version() >= 1) dockBrowser->allowAllPopups(true); this->SetWidget(dockBrowser); @@ -288,7 +286,7 @@ void YouTubeAppDock::DispatchYTEvent(const char *event, const char *video_id, .arg(stream_key) .toStdString(); } - dockBrowser->executeJavaScript(script); + dockBrowser->executeJavaScript(script.c_str()); // in case of user still not logged in in dock panel, remember last event SetInitEvent(mode, event, video_id, channelId.toStdString().c_str()); @@ -301,7 +299,7 @@ void YouTubeAppDock::Update() if (!dockBrowser) { CreateBrowserWidget(url); } else { - dockBrowser->setURL(url); + dockBrowser->setUrl(url.c_str()); } // if streaming already run, let's notify YT about past event @@ -400,7 +398,7 @@ void YouTubeAppDock::SetInitEvent(streaming_mode_t mode, const char *event, : "'STREAM_KEY'") .arg(api_event) .toStdString(); - dockBrowser->setStartupScript(script); + dockBrowser->setStartupScript(script.c_str()); } YoutubeApiWrappers *YouTubeAppDock::GetYTApi() diff --git a/UI/window-dock-youtube-app.hpp b/UI/window-dock-youtube-app.hpp index f09544fa1e1925..86d04eeea313c1 100644 --- a/UI/window-dock-youtube-app.hpp +++ b/UI/window-dock-youtube-app.hpp @@ -4,7 +4,6 @@ #include "youtube-api-wrappers.hpp" class QAction; -class QCefWidget; class YouTubeAppDock : public BrowserDock { Q_OBJECT @@ -48,6 +47,7 @@ class YouTubeAppDock : public BrowserDock { const char *channelId = nullptr); QString channelId; - QPointer dockBrowser; - QCefCookieManager *cookieManager; // is not a Qt object + QPointer dockBrowser; + std::shared_ptr + cookieManager; // is not a Qt object }; diff --git a/UI/window-extra-browsers.cpp b/UI/window-extra-browsers.cpp index 5ee8c686c73edd..8db03d794e8540 100644 --- a/UI/window-extra-browsers.cpp +++ b/UI/window-extra-browsers.cpp @@ -185,7 +185,7 @@ void ExtraBrowsersModel::UpdateItem(Item &item) } if (main->extraBrowserDockTargets[idx] != item.url) { - dock->cefWidget->setURL(QT_TO_UTF8(item.url)); + dock->cefWidget->setUrl(QT_TO_UTF8(item.url)); main->extraBrowserDockTargets[idx] = item.url; } } @@ -532,7 +532,7 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, { static int panel_version = -1; if (panel_version == -1) { - panel_version = obs_browser_qcef_version(); + panel_version = obs_browser_get_gcef_version(); } BrowserDock *dock = new BrowserDock(title); @@ -545,8 +545,8 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, dock->setWindowTitle(title); dock->setAllowedAreas(Qt::AllDockWidgetAreas); - QCefWidget *browser = - cef->create_widget(dock, QT_TO_UTF8(url), nullptr); + OBSBrowserQCefWidget *browser = + cef->createWidget(dock, QT_TO_UTF8(url), nullptr); if (browser && panel_version >= 1) browser->allowAllPopups(true); @@ -566,7 +566,7 @@ void OBSBasic::AddExtraBrowserDock(const QString &title, const QString &url, script += QT_TO_UTF8(username); script += "/dashboard/live"; script += "'});"; - browser->setStartupScript(script); + browser->setStartupScript(script.c_str()); } } From 2b8eda5ac2f96c3cdfc53c45b687002992e04d0e Mon Sep 17 00:00:00 2001 From: tytan652 Date: Sat, 13 Jan 2024 15:48:59 +0100 Subject: [PATCH 5/5] obs-websocket: Export obs-websocket-api target This enables the installation of the header in the include directory --- plugins/obs-websocket | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/obs-websocket b/plugins/obs-websocket index b61a5c24313768..6c086612edc499 160000 --- a/plugins/obs-websocket +++ b/plugins/obs-websocket @@ -1 +1 @@ -Subproject commit b61a5c243137681a206bca2cef0f92e20598353a +Subproject commit 6c086612edc4996e9fe3de7eb16499bfdaf8f61f