diff --git a/.github/workflows/clang-format.yml b/.github/workflows/clang-format.yml index 137e1e015..5baf0ddf8 100644 --- a/.github/workflows/clang-format.yml +++ b/.github/workflows/clang-format.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-22.04 steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: submodules: 'recursive' diff --git a/CMakeLists.txt b/CMakeLists.txt index bef54262e..6e048f9b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ if(NOT ENABLE_BROWSER) return() endif() -find_package(CEF REQUIRED) +find_package(CEF REQUIRED 95) find_package(nlohmann_json REQUIRED) add_library(obs-browser MODULE) @@ -20,26 +20,28 @@ add_library(OBS::browser ALIAS obs-browser) option(ENABLE_BROWSER_PANELS "Enable Qt web browser panel support" ON) mark_as_advanced(ENABLE_BROWSER_PANELS) -set(obs-browser_SOURCES - obs-browser-plugin.cpp - obs-browser-source.cpp - obs-browser-source.hpp - obs-browser-source-audio.cpp - browser-app.cpp - browser-app.hpp - browser-client.cpp - browser-client.hpp - browser-scheme.cpp - browser-scheme.hpp - browser-version.h - cef-headers.hpp - deps/base64/base64.cpp - deps/base64/base64.hpp - deps/wide-string.cpp - deps/wide-string.hpp - deps/signal-restore.cpp - deps/signal-restore.hpp - deps/obs-websocket-api/obs-websocket-api.h browser-mac.mm browser-mac.h) +target_sources( + obs-browser + PRIVATE # cmake-format: sortable + browser-app.cpp + browser-app.hpp + browser-client.cpp + browser-client.hpp + browser-scheme.cpp + browser-scheme.hpp + browser-version.h + cef-headers.hpp + deps/base64/base64.cpp + deps/base64/base64.hpp + deps/obs-websocket-api/obs-websocket-api.h + deps/signal-restore.cpp + deps/signal-restore.hpp + deps/wide-string.cpp + deps/wide-string.hpp + obs-browser-plugin.cpp + obs-browser-source-audio.cpp + obs-browser-source.cpp + obs-browser-source.hpp) if(OS_MACOS) list(APPEND obs-browser_SOURCES diff --git a/README.md b/README.md index c05512ba0..3e1732802 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,9 @@ window.addEventListener('obsSceneChanged', function(event) { Descriptions for these events can be [found here](https://obsproject.com/docs/reference-frontend-api.html?highlight=paused#c.obs_frontend_event). * obsSceneChanged +* obsSceneListChanged +* obsTransitionChanged +* obsTransitionListChanged * obsSourceVisibleChanged * obsSourceActiveChanged * obsStreamingStarting diff --git a/browser-app.cpp b/browser-app.cpp index e831dc5ea..6bd6cc659 100644 --- a/browser-app.cpp +++ b/browser-app.cpp @@ -296,6 +296,56 @@ void BrowserApp::SetDocumentVisibility(CefRefPtr browser, } #endif +CefRefPtr CefValueToCefV8Value(CefRefPtr value) +{ + CefRefPtr result; + switch (value->GetType()) { + case VTYPE_INVALID: + result = CefV8Value::CreateNull(); + break; + case VTYPE_NULL: + result = CefV8Value::CreateNull(); + break; + case VTYPE_BOOL: + result = CefV8Value::CreateBool(value->GetBool()); + break; + case VTYPE_INT: + result = CefV8Value::CreateInt(value->GetInt()); + break; + case VTYPE_DOUBLE: + result = CefV8Value::CreateDouble(value->GetDouble()); + break; + case VTYPE_STRING: + result = CefV8Value::CreateString(value->GetString()); + break; + case VTYPE_BINARY: + result = CefV8Value::CreateNull(); + break; + case VTYPE_DICTIONARY: { + result = CefV8Value::CreateObject(nullptr, nullptr); + CefRefPtr dict = value->GetDictionary(); + CefDictionaryValue::KeyList keys; + dict->GetKeys(keys); + for (unsigned int i = 0; i < keys.size(); i++) { + CefString key = keys[i]; + result->SetValue( + key, CefValueToCefV8Value(dict->GetValue(key)), + V8_PROPERTY_ATTRIBUTE_NONE); + } + } break; + case VTYPE_LIST: { + CefRefPtr list = value->GetList(); + size_t size = list->GetSize(); + result = CefV8Value::CreateArray((int)size); + for (size_t i = 0; i < size; i++) { + result->SetValue((int)i, CefValueToCefV8Value( + list->GetValue(i))); + } + } break; + } + return result; +} + bool BrowserApp::OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, @@ -369,8 +419,6 @@ bool BrowserApp::OnProcessMessageReceived(CefRefPtr browser, } else if (message->GetName() == "executeCallback") { CefRefPtr context = browser->GetMainFrame()->GetV8Context(); - CefRefPtr retval; - CefRefPtr exception; context->Enter(); @@ -378,16 +426,13 @@ bool BrowserApp::OnProcessMessageReceived(CefRefPtr browser, int callbackID = arguments->GetInt(0); CefString jsonString = arguments->GetString(1); - std::string script; - script += "JSON.parse('"; - script += arguments->GetString(1).ToString(); - script += "');"; + CefRefPtr json = + CefParseJSON(arguments->GetString(1).ToString(), {}); CefRefPtr callback = callbackMap[callbackID]; CefV8ValueList args; - context->Eval(script, browser->GetMainFrame()->GetURL(), 0, - retval, exception); + CefRefPtr retval = CefValueToCefV8Value(json); args.push_back(retval); diff --git a/browser-client.cpp b/browser-client.cpp index c68e36677..5148fdc88 100644 --- a/browser-client.cpp +++ b/browser-client.cpp @@ -201,7 +201,7 @@ bool BrowserClient::OnProcessMessageReceived( if (name == "getScenes") { struct obs_frontend_source_list list = {}; obs_frontend_get_scenes(&list); - std::vector scenes_vector; + std::vector scenes_vector; for (size_t i = 0; i < list.sources.num; i++) { obs_source_t *source = list.sources.array[i]; scenes_vector.push_back( @@ -227,7 +227,7 @@ bool BrowserClient::OnProcessMessageReceived( } else if (name == "getTransitions") { struct obs_frontend_source_list list = {}; obs_frontend_get_transitions(&list); - std::vector transitions_vector; + std::vector transitions_vector; for (size_t i = 0; i < list.sources.num; i++) { obs_source_t *source = list.sources.array[i]; transitions_vector.push_back( @@ -668,8 +668,9 @@ void BrowserClient::OnLoadEnd(CefRefPtr, CefRefPtr frame, std::string script; script += "const obsCSS = document.createElement('style');"; - script += "obsCSS.innerHTML = decodeURIComponent(\"" + - uriEncodedCSS + "\");"; + script += "obsCSS.appendChild(document.createTextNode(" + "decodeURIComponent(\"" + + uriEncodedCSS + "\")));"; script += "document.querySelector('head').appendChild(obsCSS);"; frame->ExecuteJavaScript(script, "", 0); diff --git a/browser-version.h b/browser-version.h index e9965c6e4..22263dbc1 100644 --- a/browser-version.h +++ b/browser-version.h @@ -1,8 +1,8 @@ #pragma once #define OBS_BROWSER_VERSION_MAJOR 2 -#define OBS_BROWSER_VERSION_MINOR 21 -#define OBS_BROWSER_VERSION_PATCH 1 +#define OBS_BROWSER_VERSION_MINOR 23 +#define OBS_BROWSER_VERSION_PATCH 6 #ifndef MAKE_SEMANTIC_VERSION #define MAKE_SEMANTIC_VERSION(major, minor, patch) \ diff --git a/cmake/feature-panels.cmake b/cmake/feature-panels.cmake index 769d04823..32ad506e3 100644 --- a/cmake/feature-panels.cmake +++ b/cmake/feature-panels.cmake @@ -1,4 +1,4 @@ -find_qt(COMPONENTS Widgets) +find_package(Qt6 REQUIRED Widgets) add_library(browser-panels INTERFACE) add_library(OBS::browser-panels ALIAS browser-panels) @@ -9,8 +9,11 @@ target_include_directories(browser-panels INTERFACE "${CMAKE_CURRENT_SOURCE_DIR} target_compile_definitions(browser-panels INTERFACE BROWSER_AVAILABLE) -target_sources(obs-browser PRIVATE panel/browser-panel-client.hpp panel/browser-panel-internal.hpp - panel/browser-panel.cpp panel/browser-panel-client.cpp) +target_sources( + obs-browser + PRIVATE # cmake-format: sortable + panel/browser-panel-client.cpp panel/browser-panel-client.hpp panel/browser-panel-internal.hpp + panel/browser-panel.cpp) target_link_libraries(obs-browser PRIVATE OBS::browser-panels Qt::Widgets) @@ -19,3 +22,7 @@ set_target_properties( PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON) + +if(OS_WINDOWS) + set_property(SOURCE browser-app.hpp PROPERTY SKIP_AUTOMOC TRUE) +endif() diff --git a/cmake/legacy.cmake b/cmake/legacy.cmake index 4ce671643..f4db4afdc 100644 --- a/cmake/legacy.cmake +++ b/cmake/legacy.cmake @@ -25,7 +25,7 @@ option(ENABLE_BROWSER_QT_LOOP "Enable running CEF on the main UI thread alongsid mark_as_advanced(ENABLE_BROWSER_LEGACY ENABLE_BROWSER_SHARED_TEXTURE ENABLE_BROWSER_PANELS ENABLE_BROWSER_QT_LOOP) -find_package(CEF REQUIRED) +find_package(CEF REQUIRED 95) if(NOT TARGET CEF::Wrapper) message( diff --git a/cmake/os-linux.cmake b/cmake/os-linux.cmake index 1506a4a74..7c95a9efe 100644 --- a/cmake/os-linux.cmake +++ b/cmake/os-linux.cmake @@ -6,8 +6,9 @@ set_target_properties(obs-browser PROPERTIES BUILD_RPATH "$ORIGIN/" INSTALL_RPAT add_executable(browser-helper) add_executable(OBS::browser-helper ALIAS browser-helper) -target_sources(browser-helper PRIVATE cef-headers.hpp obs-browser-page/obs-browser-page-main.cpp browser-app.cpp - browser-app.hpp deps/json11/json11.cpp deps/json11/json11.hpp) +target_sources( + browser-helper PRIVATE # cmake-format: sortable + browser-app.cpp browser-app.hpp cef-headers.hpp obs-browser-page/obs-browser-page-main.cpp) target_include_directories(browser-helper PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps" "${CMAKE_CURRENT_SOURCE_DIR}/obs-browser-page") @@ -15,6 +16,8 @@ target_include_directories(browser-helper PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/d target_link_libraries(browser-helper PRIVATE CEF::Wrapper CEF::Library) set(OBS_EXECUTABLE_DESTINATION "${OBS_PLUGIN_DESTINATION}") + +# cmake-format: off set_target_properties_obs( browser-helper PROPERTIES FOLDER plugins/obs-browser @@ -22,4 +25,4 @@ set_target_properties_obs( INSTALL_RPATH "$ORIGIN/" PREFIX "" OUTPUT_NAME obs-browser-page) - \ No newline at end of file +# cmake-format: on diff --git a/cmake/os-macos.cmake b/cmake/os-macos.cmake index e6a2bb196..8a66f76be 100644 --- a/cmake/os-macos.cmake +++ b/cmake/os-macos.cmake @@ -1,15 +1,13 @@ -find_qt(COMPONENTS Widgets) - -find_library(COREFOUNDATION CoreFoundation) -find_library(APPKIT AppKit) -mark_as_advanced(COREFOUNDATION APPKIT) +find_package(Qt6 REQUIRED Widgets) target_compile_definitions(obs-browser PRIVATE ENABLE_BROWSER_SHARED_TEXTURE ENABLE_BROWSER_QT_LOOP) + if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0.3) target_compile_options(obs-browser PRIVATE -Wno-error=unqualified-std-cast-call) endif() -target_link_libraries(obs-browser PRIVATE Qt::Widgets ${COREFOUNDATION} ${APPKIT} CEF::Wrapper) +target_link_libraries(obs-browser PRIVATE Qt::Widgets CEF::Wrapper "$" + "$") set(helper_basename browser-helper) set(helper_output_name "obs64 Helper") @@ -31,9 +29,12 @@ foreach(helper IN LISTS helper_suffixes) add_executable(${target_name} MACOSX_BUNDLE EXCLUDE_FROM_ALL) add_executable(OBS::${target_name} ALIAS ${target_name}) - target_sources(${target_name} PRIVATE browser-app.cpp browser-app.hpp obs-browser-page/obs-browser-page-main.cpp - cef-headers.hpp browser-mac.mm browser-mac.h) + target_sources( + ${target_name} PRIVATE # cmake-format: sortable + browser-app.cpp browser-app.hpp browser-mac.mm browser-mac.h cef-headers.hpp obs-browser-page/obs-browser-page-main.cpp) + target_compile_definitions(${target_name} PRIVATE ENABLE_BROWSER_SHARED_TEXTURE) + if(CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 14.0.3) target_compile_options(${target_name} PRIVATE -Wno-error=unqualified-std-cast-call) endif() diff --git a/cmake/os-windows.cmake b/cmake/os-windows.cmake index bbe9c7bd9..db3c18760 100644 --- a/cmake/os-windows.cmake +++ b/cmake/os-windows.cmake @@ -9,11 +9,9 @@ add_executable(OBS::browser-helper ALIAS obs-browser-helper) target_sources( obs-browser-helper - PRIVATE cef-headers.hpp - obs-browser-page/obs-browser-page-main.cpp - browser-app.cpp - browser-app.hpp - obs-browser-page.manifest) + PRIVATE # cmake-format: sortable + browser-app.cpp browser-app.hpp cef-headers.hpp obs-browser-page.manifest + obs-browser-page/obs-browser-page-main.cpp) target_include_directories(obs-browser-helper PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/deps" "${CMAKE_CURRENT_SOURCE_DIR}/obs-browser-page") diff --git a/data/locale/af-ZA.ini b/data/locale/af-ZA.ini index 370207471..778e92fc3 100644 --- a/data/locale/af-ZA.ini +++ b/data/locale/af-ZA.ini @@ -1,12 +1,40 @@ LocalFile="Lokale lêer" Width="Breedte" Height="Hoogte" +FPS="RPS" +CSS="Pasgemaakte CSS" BrowserSource="Blaaier" +CustomFrameRate="Gebruik pasgemaakte beeldduur" +RerouteAudio="Beheer oudio d.m.v. OBS" +Inspect="Inspekteer" +DevTools="Inspekteer blaaierdok ‘%1’" CopyUrl="Kopieer huidige adres" WebpageControlLevel="Bladtoestemmings" WebpageControlLevel.Level.None="Geen toegang tot OBS" +WebpageControlLevel.Level.ReadObs="Leestoegang tot OBS-statusinligting" +WebpageControlLevel.Level.ReadUser="Leestoegang tot gebruikerinligting (huidige toneelversameling, oorgange)" +WebpageControlLevel.Level.Basic="Basiese toegang tot OBS (bewaar terugspeelbuffer, ens.)" WebpageControlLevel.Level.Advanced="Gevorderde toegang tot OBS (Verander tonele, Begin/stop herhaalbuffer, ens.)" +WebpageControlLevel.Level.All="Volle toegang tot OBS (begin/stop stroming sonder waarskuwing, ens.)" +Dialog.Alert="JavaScript-waarskuwing" +Dialog.Confirm="JavaScript-bevestiging" +Dialog.Prompt="JavaScript-melding" +Dialog.BrowserDock="Blaaierdok" Dialog.ReceivedFrom="Ontvang van ‘%1’" +Error.Title="Kon nie daardie blad laai nie!" +Error.Description="Maak seker die adres is korrek en dat die werf nie probleme ervaar nie." +Error.Retry="Klik hier om weer te probeer" Error.Code="Fout: %1" +Zoom.Reset="Herstel zoem" +Zoom.Out="Zoem uit" +Zoom.In="Zoem in" ErrorCode.ERR_CONNECTION_REFUSED="Bediener het die koppeling geweier" +ErrorCode.ERR_NAME_NOT_RESOLVED="Bediener se IP-adres nie gevind nie" +ErrorCode.ERR_CONNECTION_TIMED_OUT="Verbinding het uitgetel" +ErrorCode.ERR_TIMED_OUT="Bewerking het uitgetel" ErrorCode.ERR_FILE_NOT_FOUND="Lêer nie gevind nie" +ErrorCode.ERR_FAILED="Kon nie koppel nie" +ErrorCode.ERR_NETWORK_CHANGED="Netwerk het verander" +ErrorCode.ERR_SSL_VERSION_INTERFERENCE="SSL-weergawekoppelvlak. TLS 1.3 is dalk versper of gewysig." +ErrorCode.ERR_SSL_PROTOCOL_ERROR="SSL-protokolfout. Kon nie ’n beveiligde verbinding maak nie." +ErrorCode.ERR_CERT_DATE_INVALID="Bediener se SSL-sertifikaat is verouderd of u rekenaar se tyd is verkeerd." diff --git a/data/locale/be-BY.ini b/data/locale/be-BY.ini new file mode 100644 index 000000000..0a7d37116 --- /dev/null +++ b/data/locale/be-BY.ini @@ -0,0 +1,42 @@ +LocalFile="Файл на дыску" +Width="Шырыня" +Height="Вышыня" +CSS="Уласны CSS" +ShutdownSourceNotVisible="Адключаць крыніцу, калі яе не відаць" +RefreshBrowserActive="Абнаўляць браўзер пры актывацыі сцэны" +RefreshNoCache="Абнавіць кэш бягучай старонкі" +BrowserSource="Браўзер" +CustomFrameRate="Уласная частата кадраў" +RerouteAudio="Кіраваць гукам праз OBS" +Inspect="Аглядзець" +DevTools="Аглядзець браўзерны док «%1»" +CopyUrl="Скапіяваць адрас" +WebpageControlLevel="Дазволы старонкі" +WebpageControlLevel.Level.None="Без доступу да OBS" +WebpageControlLevel.Level.ReadObs="Чытанне звестак аб стане OBS" +WebpageControlLevel.Level.ReadUser="Чытанне звестак аб карыстальніку (бягучай калекцыі сцэн, пераходах)" +WebpageControlLevel.Level.Basic="Базавы доступ да OBS (захаванне буфера паўтору і г. д.)" +WebpageControlLevel.Level.Advanced="Пашыраны доступ да OBS (змяненне сцэн, пачынанне/спыненне буфера паўтору і г. д.)" +WebpageControlLevel.Level.All="Поўны доступ да OBS (пачынанне/спыненне стрымаў без папаярэджання і г. д.)" +Dialog.Alert="Апавяшчэнне JavaScript" +Dialog.Confirm="Пацвярджэнне JavaScript" +Dialog.Prompt="Радок JavaScript" +Dialog.BrowserDock="браўзерны док" +Dialog.ReceivedFrom="Атрымана ад «%1»" +Error.Title="Не атрымалася загрузіць старонку!" +Error.Description="Пераканайцеся, што адрас правільны і што сайт працуе без праблем." +Error.Retry="Націсніце, каб паўтарыць спробу" +Error.Code="Памылка: %1" +Zoom.Reset="Скінуць маштаб" +Zoom.Out="Паменшыць" +Zoom.In="Павялічыць" +ErrorCode.ERR_CONNECTION_REFUSED="Сервер адмовіў у злучэнні" +ErrorCode.ERR_NAME_NOT_RESOLVED="IP-адрас сервера не знойдзены" +ErrorCode.ERR_CONNECTION_TIMED_OUT="Час чакання злучэння скончыўся" +ErrorCode.ERR_TIMED_OUT="Час чакання аперацыі скончыўся" +ErrorCode.ERR_FILE_NOT_FOUND="Файл не знойдзены" +ErrorCode.ERR_FAILED="Не атрымалася злучыцца" +ErrorCode.ERR_NETWORK_CHANGED="Сетка змянілася" +ErrorCode.ERR_SSL_VERSION_INTERFERENCE="Канфлікт версій SSL. Магчымае блакіраванне або мадыфікацыя TLS 1.3." +ErrorCode.ERR_SSL_PROTOCOL_ERROR="Памылка пратакола SSL. Не атрымалася наладзіць бяспечнае злучэнне." +ErrorCode.ERR_CERT_DATE_INVALID="Серверны сертыфікат SSL састарэў, або на вашым камп'ютары няправільна зададзены час." diff --git a/data/locale/bg-BG.ini b/data/locale/bg-BG.ini index eb62f924d..0a117952c 100644 --- a/data/locale/bg-BG.ini +++ b/data/locale/bg-BG.ini @@ -11,16 +11,26 @@ BrowserSource="Браузър" CustomFrameRate="Използване на настроена кадрова честота" RerouteAudio="Управление на звука чрез OBS" RerouteAudioStreamlabs="Управление на звука чрез Streamlabs Desktop" +Inspect="Погледни" +CopyUrl="Копирай текущия адрес" WebpageControlLevel="Позволения на страницата" WebpageControlLevel.Level.None="Няма достъп до OBS" WebpageControlLevel.Level.ReadObs="Прочети достъп до OBS статус информация" WebpageControlLevel.Level.ReadUser="Прочети достъп до информация за потребителя (текуща Сценна Колекция, Транзиция)" +WebpageControlLevel.Level.All="Пълен достъп към OBS (Стартиране/Спиране на стрийма без предупреждение и др.)" +Dialog.ReceivedFrom="Получено от '%1'" Error.Title="Страницата не би могла да се зареди!" Error.Description="Уверете се в правилността на адреса и че сайтът няма проблеми." Error.Retry="Щракнете тук за нов опит" Error.Code="Грешка: %1" Error.URL="URL адрес: %2" +ErrorCode.ERR_CONNECTION_REFUSED="Сървърът отказа свързването" +ErrorCode.ERR_NAME_NOT_RESOLVED="IP адреса на сървъра не можа да бъде намерен" +ErrorCode.ERR_CONNECTION_TIMED_OUT="Времето за изчакване изтече" +ErrorCode.ERR_TIMED_OUT="Операцията изтече" ErrorCode.ERR_FILE_NOT_FOUND="Файлът не е намерен" ErrorCode.ERR_FAILED="Неуспех при свързването" ErrorCode.ERR_NETWORK_CHANGED="Променена мрежа" +ErrorCode.ERR_SSL_VERSION_INTERFERENCE="SSL интерфейс версия. TLS 1.3 може би е блокиран или променен" ErrorCode.ERR_SSL_PROTOCOL_ERROR="Грешка на протокол SSL. Не би могло да се осъществи сигурно свързване." +ErrorCode.ERR_CERT_DATE_INVALID="SSL сертификата на сървъра е стар или времето на вашия компютър е грешен." diff --git a/data/locale/da-DK.ini b/data/locale/da-DK.ini index a88913da7..aabee3b91 100644 --- a/data/locale/da-DK.ini +++ b/data/locale/da-DK.ini @@ -24,6 +24,9 @@ Error.Title="Siden kunne ikke indlæses!" Error.Description="Sørg for, at adressen er korrekt, og at webstedet ikke har problemer." Error.Retry="Klik hér, for at prøve igen" Error.Code="Fejl: %1" +Zoom.Reset="Nulstil zoom" +Zoom.Out="Zoom ud" +Zoom.In="Zoom ind" ErrorCode.ERR_CONNECTION_REFUSED="Server afviste forbindelsen" ErrorCode.ERR_NAME_NOT_RESOLVED="Server IP-adressen ikke fundet" ErrorCode.ERR_CONNECTION_TIMED_OUT="Forbindelsen fik timeout." diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index b608f6c09..65c78b62b 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -5,7 +5,7 @@ CSS="Benutzerdefiniertes CSS" ShutdownSourceNotVisible="Deaktivieren, wenn Quelle nicht sichtbar ist" RefreshBrowserActive="Browser bei Szenenaktivierung aktualisieren" RefreshNoCache="Cache der aktuellen Seite aktualisieren" -CustomFrameRate="Benutzerdefinierte FPS verwenden" +CustomFrameRate="Benutzerdefinierte Framerate verwenden" RerouteAudio="Audio über OBS steuern" RerouteAudioStreamlabs="Audio über Streamlabs Desktop steuern" Inspect="Untersuchen" diff --git a/data/locale/eu-ES.ini b/data/locale/eu-ES.ini index 5c85a46f9..37375654c 100644 --- a/data/locale/eu-ES.ini +++ b/data/locale/eu-ES.ini @@ -9,6 +9,9 @@ BrowserSource="Nabigatzailea" CustomFrameRate="Erabili fotograma-emari pertsonalizatua" RerouteAudio="Kontrolatu audioa OBS bidez" RerouteAudioStreamlabs="Kontrolatu audioa Streamlabs Desktop bidez" +Inspect="Ikuskatu" +DevTools="Ikuskatu nabigatzailearen '%1' panela" +CopyUrl="Kopiatu uneko helbidea" WebpageControlLevel="Orrialde baimenak" WebpageControlLevel.Level.None="Ez dago sarbiderik OBSra" WebpageControlLevel.Level.ReadObs="Irakurri OBSrako sarbidearen informazio maila" @@ -25,6 +28,9 @@ Error.Title="Ezin izan da orri hori kargatu!" Error.Description="Ziurtatu helbidea zuzena dela, eta ez lekua ez daukala arazorik." Error.Retry="Egin klik hemen berriro saiatzeko" Error.Code="Errorea: %1" +Zoom.Reset="Berrezarri zooma" +Zoom.Out="Txikiagotu" +Zoom.In="Handiagotu" ErrorCode.ERR_CONNECTION_REFUSED="Zerbitzariak konexioa errefuxatu du" ErrorCode.ERR_NAME_NOT_RESOLVED="Zerbitzariaren IP helbidea ez da aurkitu" ErrorCode.ERR_CONNECTION_TIMED_OUT="Konexioaren denbora bukatu da" diff --git a/data/locale/hr-HR.ini b/data/locale/hr-HR.ini index bf43f4fc0..417d05676 100644 --- a/data/locale/hr-HR.ini +++ b/data/locale/hr-HR.ini @@ -12,6 +12,23 @@ RerouteAudio="Kontrolirajte zvuk preko OBS-a" RerouteAudioStreamlabs="Kontrolirajte zvuk preko Streamlabs Desktop-a" Inspect="Provjeri" CopyUrl="Kopirajte trenutačnu adresu" +WebpageControlLevel="Dozvole stranice" +WebpageControlLevel.Level.None="Bez pristupa OBS-u" +WebpageControlLevel.Level.ReadObs="Pristup čitanju informacija stanja OBS-a" +Dialog.Alert="JavaScript upozorenje" +Dialog.Confirm="JavaScript potvrda" +Dialog.Prompt="JavaScript upit" +Dialog.ReceivedFrom="Primljeno od '%1'" +Error.Title="Stranica se nije mogla učitati!" +Error.Description="Provjeri je li adresa točna i je li stranica sadrži probleme." +Error.Retry="Pritisni ovdje za ponovni pokušaj" +Error.Code="Greška: %1" Zoom.Reset="Ponovno postavi uvećanje" Zoom.Out="Smanji" Zoom.In="Povećaj" +ErrorCode.ERR_CONNECTION_REFUSED="Server je odbio vezu" +ErrorCode.ERR_NAME_NOT_RESOLVED="IP adresa servera nije pronađena" +ErrorCode.ERR_CONNECTION_TIMED_OUT="Vrijeme veze je isteklo" +ErrorCode.ERR_TIMED_OUT="Vrijeme operacije je isteklo" +ErrorCode.ERR_FILE_NOT_FOUND="Datoteka nije pronađena" +ErrorCode.ERR_FAILED="Neuspjelo povezivanje" diff --git a/data/locale/ms-MY.ini b/data/locale/ms-MY.ini index a70116315..b3e624dec 100644 --- a/data/locale/ms-MY.ini +++ b/data/locale/ms-MY.ini @@ -8,6 +8,8 @@ RefreshNoCache="Segar semula cache bagi halaman semasa" BrowserSource="Pelayar" CustomFrameRate="Guna kadar bingkai suai" RerouteAudio="Kawal audio melalui OBS" +Inspect="Periksa" +DevTools="Periksa Labuh Pelayar '%1'" CopyUrl="Salin adres semasa" WebpageControlLevel="Keizinan halaman" WebpageControlLevel.Level.None="Tiada capaian ke OBS" diff --git a/data/locale/nb-NO.ini b/data/locale/nb-NO.ini index 12b5a7b39..d011c4b8a 100644 --- a/data/locale/nb-NO.ini +++ b/data/locale/nb-NO.ini @@ -9,18 +9,25 @@ BrowserSource="Nettleser" CustomFrameRate="Bruk tilpasset bildefrekvens" RerouteAudio="Kontroller lyden gjennom OBS" RerouteAudioStreamlabs="Kontroller lyden gjennom Streamlabs Desktop" +Inspect="Inspiser" +CopyUrl="Kopier nåværende adresse" WebpageControlLevel="Side tillatelser" WebpageControlLevel.Level.None="Ingen tilgang til OBS" WebpageControlLevel.Level.Basic="Basistilgang til OBS (Lagre omspillingsbuffer, osv.)" WebpageControlLevel.Level.Advanced="Avansert tilgang til OBS (endre sener, start/stopp omspillingsbuffer, osv.)" WebpageControlLevel.Level.All="Full tilgang til OBS (Start/stopp kringkasting uten advarsel, osv.)" +Dialog.ReceivedFrom="Mottatt fra «%1»" Error.Title="Kunne ikke laste inn den siden!" Error.Description="Kontroller at adressen er riktig, og at nettstedet ikke har problemer." Error.Retry="Klikk her for å prøve igjen." Error.Code="Feil: %1" +Zoom.Reset="Tilbakestill forstørring" +Zoom.Out="Forminsk" +Zoom.In="Forstørr" ErrorCode.ERR_CONNECTION_REFUSED="Serveren nektet tilkoblingen" ErrorCode.ERR_NAME_NOT_RESOLVED="Serverens IP-adresse ble ikke funnet" ErrorCode.ERR_CONNECTION_TIMED_OUT="Tilkoblingen ble tidsavbrutt" +ErrorCode.ERR_TIMED_OUT="Handlingen ble tidsavbrutt" ErrorCode.ERR_FILE_NOT_FOUND="Fant ikke filen" ErrorCode.ERR_FAILED="Tilkobling mislyktes" ErrorCode.ERR_NETWORK_CHANGED="Nettverk er endret" diff --git a/data/locale/pl-PL.ini b/data/locale/pl-PL.ini index f71859e2e..b41276a9e 100644 --- a/data/locale/pl-PL.ini +++ b/data/locale/pl-PL.ini @@ -2,12 +2,13 @@ LocalFile="Plik lokalny" URL="Adres URL" Width="Szerokość" Height="Wysokość" +FPS="FPS (kl./s)" CSS="Własny CSS" ShutdownSourceNotVisible="Zamknij źródło, gdy niewidoczne" RefreshBrowserActive="Odśwież przeglądarkę, gdy scena zostanie aktywowana" RefreshNoCache="Odśwież pamięć podręczną bieżącej strony" BrowserSource="Przeglądarka" -CustomFrameRate="Własne ustawienia FPS" +CustomFrameRate="Własne ustawienia FPS (kl./s)" RerouteAudio="Kontroluj audio przez OBSa" RerouteAudioStreamlabs="Kontroluj audio przez Streamlabs Desktopa" Inspect="Zbadaj" diff --git a/data/locale/pt-PT.ini b/data/locale/pt-PT.ini index ae5a480d5..2431a6e7a 100644 --- a/data/locale/pt-PT.ini +++ b/data/locale/pt-PT.ini @@ -13,14 +13,14 @@ DevTools="Inspecionar doca do navegador '%1'" CopyUrl="Copiar endereço atual" WebpageControlLevel="Permissões da página" WebpageControlLevel.Level.None="Sem acesso ao OBS" -WebpageControlLevel.Level.ReadObs="Permissão de leitura às informações de estado do OBS" -WebpageControlLevel.Level.ReadUser="Permissão de leitura às informações do utilizador (coleção de cenas atual, transições)" +WebpageControlLevel.Level.ReadObs="Acesso de leitura às informações de estado do OBS" +WebpageControlLevel.Level.ReadUser="Acesso de leitura às informações do utilizador (coleção de cenas atual, transições)" WebpageControlLevel.Level.Basic="Acesso básico ao OBS (guardar memória de repetição, etc.)" WebpageControlLevel.Level.Advanced="Acesso avançado ao OBS (mudar cenas, iniciar/parar memória de reprodução, etc.)" WebpageControlLevel.Level.All="Acesso completo ao OBS (iniciar/parar transmissão sem aviso, etc.)" -Dialog.Alert="Alerta de Javascript" -Dialog.Confirm="Confirmação do Javascript" -Dialog.Prompt="Diálogo Javascript" +Dialog.Alert="Alerta de JavaScript" +Dialog.Confirm="Confirmação do JavaScript" +Dialog.Prompt="Diálogo JavaScript" Dialog.BrowserDock="Doca de navegador" Dialog.ReceivedFrom="Recebido de '%1'" Error.Title="Impossível carregar a página!" diff --git a/data/locale/ro-RO.ini b/data/locale/ro-RO.ini index af7df2a46..fa004630e 100644 --- a/data/locale/ro-RO.ini +++ b/data/locale/ro-RO.ini @@ -9,7 +9,7 @@ CustomFrameRate="Folosește o frecvență de cadre personalizată" RerouteAudio="Controlează sistemul audio prin OBS" RerouteAudioStreamlabs="Controlează sistemul audio prin Streamlabs Desktop" Inspect="Inspectează" -DevTools="Inspectează andocarea browser-ului '%1'" +DevTools="Inspectează andocarea de browser '%1'" CopyUrl="Copiază adresa actuală" WebpageControlLevel="Permisiunile paginii" WebpageControlLevel.Level.None="Fără acces la OBS" @@ -17,15 +17,15 @@ WebpageControlLevel.Level.ReadObs="Acces de citire a informațiilor de stare OBS WebpageControlLevel.Level.ReadUser="Acces de citire a informațiilor utilizatorului (colecția de scene actuală, tranziții)" WebpageControlLevel.Level.Basic="Acces de bază la OBS (salvarea bufferului de reluări etc.)" WebpageControlLevel.Level.Advanced="Acces avansat la OBS (schimbarea scenelor, pornirea/oprirea bufferului de reluări etc.)" -WebpageControlLevel.Level.All="Acces complet la OBS (pornirea/oprirea transmisiunii fără avertisment etc.)" +WebpageControlLevel.Level.All="Acces complet la OBS (pornirea/oprirea streamingului fără avertisment etc.)" Dialog.Alert="Alertă JavaScript" Dialog.Confirm="Confirmare JavaScript" Dialog.Prompt="Prompt JavaScript" -Dialog.BrowserDock="Andocare browser" +Dialog.BrowserDock="Andocare de browser" Dialog.ReceivedFrom="Primit de la '%1'" Error.Title="Nu s-a putut încărca acea pagină!" Error.Description="Asigurați-vă că adresa este corectă și că site-ul nu are probleme." -Error.Retry="Click aici pentru a reîncerca" +Error.Retry="Clic aici pentru a reîncerca" Error.Code="Eroare: %1" Zoom.Reset="Resetează mărire" Zoom.Out="Micșorare" diff --git a/data/locale/ru-RU.ini b/data/locale/ru-RU.ini index 548599749..6016c0a4d 100644 --- a/data/locale/ru-RU.ini +++ b/data/locale/ru-RU.ini @@ -11,14 +11,14 @@ CustomFrameRate="Использовать настраиваемую часто RerouteAudio="Управление аудио через OBS" RerouteAudioStreamlabs="Управление аудио через Streamlabs Desktop" Inspect="Осмотреть" -DevTools="Осмотреть док-панель браузера '%1'" +DevTools="Осмотреть док-панель браузера «%1»" CopyUrl="Копировать текущий адрес" WebpageControlLevel="Разрешение страницы" WebpageControlLevel.Level.None="Нет доступа к OBS" WebpageControlLevel.Level.ReadObs="Доступ чтения информации о состоянии OBS" WebpageControlLevel.Level.ReadUser="Доступ чтения пользовательской информации (текущая коллекция сцен, переходы)" WebpageControlLevel.Level.Basic="Базовый доступ к OBS (Сохранение буфер видео и т.д.)" -WebpageControlLevel.Level.Advanced="Продвинутый доступ к OBS (Изменение сцен, Запуск/Остановка буфера записи и пр.)" +WebpageControlLevel.Level.Advanced="Продвинутый доступ к OBS (Изменение сцен, запуск/остановка буфера записи и пр.)" WebpageControlLevel.Level.All="Полный доступ к OBS (Запуск/Остановка прямого эфира без предупреждения и пр.)" Dialog.Alert="Предупреждение JavaScript" Dialog.Confirm="Подтверждение JavaScript" @@ -40,6 +40,6 @@ ErrorCode.ERR_TIMED_OUT="Время ожидания операции истек ErrorCode.ERR_FILE_NOT_FOUND="Файл не найден" ErrorCode.ERR_FAILED="Не удалось подключиться" ErrorCode.ERR_NETWORK_CHANGED="Сеть изменена" -ErrorCode.ERR_SSL_VERSION_INTERFERENCE="Вмешательство в версию SSL. Возможно TLS 1.3 заблокирован или модифицирован." -ErrorCode.ERR_SSL_PROTOCOL_ERROR="Ошибка протокола SSL. Не удалось установить защищенное соединение." +ErrorCode.ERR_SSL_VERSION_INTERFERENCE="Вмешательство в версию SSL. Возможно, TLS 1.3 заблокирован или модифицирован." +ErrorCode.ERR_SSL_PROTOCOL_ERROR="Ошибка протокола SSL. Не удалось установить защищённое соединение." ErrorCode.ERR_CERT_DATE_INVALID="SSL-сертификат сервера устарел, или на вашем компьютере неверно указано время." diff --git a/data/locale/sk-SK.ini b/data/locale/sk-SK.ini index 9c68b5e02..97fdd19db 100644 --- a/data/locale/sk-SK.ini +++ b/data/locale/sk-SK.ini @@ -1,11 +1,10 @@ LocalFile="Lokálny súbor" -URL="URL adresa" Width="Šírka" Height="Výška" CSS="Vlastné CSS" ShutdownSourceNotVisible="Vypnúť zdroj, keď nie je viditeľný" RefreshBrowserActive="Obnoviť prehliadač, keď sa scéna stane aktívna" -RefreshNoCache="Vyčistiť medzi-pamäť aktuálnej stránky" +RefreshNoCache="Vyčistiť cache aktuálnej stránky" BrowserSource="Prehliadač" CustomFrameRate="Použiť vlastnú snímkovú rýchlosť" RerouteAudio="Ovládať zvuk cez OBS" @@ -16,10 +15,10 @@ CopyUrl="Kopírovať aktuálnu adresu" WebpageControlLevel="Oprávnenia stránky" WebpageControlLevel.Level.None="Žiaden prístup k OBS" WebpageControlLevel.Level.ReadObs="Povolenie čítať informácie o stave OBS" -WebpageControlLevel.Level.ReadUser="Povolenie čítať uživateľské informácie (aktuálna kolekcia scén, prechody)" +WebpageControlLevel.Level.ReadUser="Povolenie čítať použivateľské informácie (aktuálna sada scén, prechody)" WebpageControlLevel.Level.Basic="Základný prístup k OBS (Uložiť záznam do pamäte, atď.)" -WebpageControlLevel.Level.Advanced="Pokročilý prístup k OBS (Zmeniť scény, Začať/Zastaviť záznam do pamäte, atď.)" -WebpageControlLevel.Level.All="Plný prístup k OBS (Začať/Zastaviť streamovanie bez varovania, atď.)" +WebpageControlLevel.Level.Advanced="Pokročilý prístup k OBS (Meniť scény, Spustiť/Zastaviť záznam do pamäte, atď.)" +WebpageControlLevel.Level.All="Plný prístup k OBS (Spustiť/Zastaviť streamovanie bez upozornenia, atď.)" Dialog.Alert="JavaScript Výstraha" Dialog.Confirm="JavaScript Potvrdenie" Dialog.Prompt="Javascript Výzva" @@ -29,7 +28,7 @@ Error.Title="Nepodarilo sa načítať túto stránku!" Error.Description="Uistite sa, že adresa je správna a že stránka nemá problémy." Error.Retry="Ak to chcete skúsiť znova, kliknite sem" Error.Code="Chyba: %1" -Zoom.Reset="Resetovať priblíženie" +Zoom.Reset="Obnoviť priblíženie" Zoom.Out="Oddialiť" Zoom.In="Priblížiť" ErrorCode.ERR_CONNECTION_REFUSED="Server odmietol pripojenie" diff --git a/data/locale/sv-SE.ini b/data/locale/sv-SE.ini index 91e3a36f6..1c9a36816 100644 --- a/data/locale/sv-SE.ini +++ b/data/locale/sv-SE.ini @@ -20,7 +20,7 @@ WebpageControlLevel.Level.ReadUser="Läsåtkomst till användarinformation (nuva WebpageControlLevel.Level.Basic="Grundläggande åtkomst till OBS (spara reprisbuffert, etc.)" WebpageControlLevel.Level.Advanced="Avancerad åtkomst till OBS (ändra scener, starta/stoppa reprisbuffert, osv.)" WebpageControlLevel.Level.All="Full åtkomst till OBS (starta/stoppa strömmar utan förvarning, etc.)" -Dialog.Alert="JavaScript-avisering" +Dialog.Alert="JavaScript-meddelande" Dialog.Confirm="JavaScript-bekräftelse" Dialog.Prompt="JavaScript-fråga" Dialog.BrowserDock="Flytande webbläsarfönster" diff --git a/data/locale/tt-RU.ini b/data/locale/tt-RU.ini new file mode 100644 index 000000000..3e62bd502 --- /dev/null +++ b/data/locale/tt-RU.ini @@ -0,0 +1,7 @@ +LocalFile="Локаль файл" +Width="Киңлек" +Height="Биеклек" +Error.Code="Хата: %1" +ErrorCode.ERR_FILE_NOT_FOUND="Файл табылмады" +ErrorCode.ERR_FAILED="Тоташылып булмады" +ErrorCode.ERR_NETWORK_CHANGED="Челтәр үзгәртелде" diff --git a/data/locale/ug-CN.ini b/data/locale/ug-CN.ini new file mode 100644 index 000000000..3c5d14d44 --- /dev/null +++ b/data/locale/ug-CN.ini @@ -0,0 +1,45 @@ +LocalFile="يەرلىك ھۆججەت" +URL="تور ئادرېس" +Width="كەڭلىك" +Height="ئېگىزلىك" +FPS="fps" +CSS="CSS نى خاسلاشتۇرۇش" +ShutdownSourceNotVisible="كۆرگىلى بولمىسا مەنبەنى تاقايدۇ" +RefreshBrowserActive="كۆرۈنۈش ئاكتىپلانغاندا توركۆرگۈنى يېڭىلايدۇ" +RefreshNoCache="نۆۋەتتىكى بەتنىڭ غەملىكىنى يېڭىلايدۇ" +BrowserSource="توركۆرگۈ" +CustomFrameRate="ئىختىيارى كاندۇك نىسىبىتىنى ئىشلىتىدۇ" +RerouteAudio="ئۈننى OBS ئارقىلىق تىزگىنلەيدۇ" +Inspect="تەكشۈر" +DevTools="توركۆرگۈ سۇپىسى «%1» نى تەكشۈرىدۇ" +CopyUrl="نۆۋەتتىكى ئادرېسنى كۆچۈر" +WebpageControlLevel="بەت ئىجازىتى" +WebpageControlLevel.Level.None="OBS زىيارەت ئىجازىتى يوق" +WebpageControlLevel.Level.ReadObs="OBS ھالەت ئۇچۇرىنى ئوقۇش ئىجازىتى" +WebpageControlLevel.Level.ReadUser="ئىشلەتكۈچى ئوچۇرىنى ئوقۇش ئىجازىتى (نۆۋەتتىكى كۆرۈنۈش توپلىمى، ئالمىشىش ئۈنۈمى)" +WebpageControlLevel.Level.Basic="OBS ئاساسىي زىيارەت ئىجازىتى (غەملەكنى قايتا قويۇشنى ساقلاش قاتارلىق)" +WebpageControlLevel.Level.Advanced="OBS ئالىي زىيارەت ئىجازىتى (كۆرۈنۈش ئۆزگەرتىش، غەملەكنى قايتا قويۇش باشلاش/توختىتىش قاتارلىق)" +WebpageControlLevel.Level.All="OBS تولۇق زىيارەت ئىجازىتى (ئاگاھلاندۇرمايلا ئېقىم باشلاش/توختىتىش قاتارلىق)" +Dialog.Alert="JavaScript ئاگاھلاندۇرۇش" +Dialog.Confirm="JavaScript جەزملەش" +Dialog.Prompt="JavaScript ئەسكەرتىش" +Dialog.BrowserDock="توركۆرگۈچ سۇپىسى" +Dialog.ReceivedFrom="«%1» تاپشۇرۇۋالدى" +Error.Title="ئۇ بەتنى يۈكلىيەلمەيدۇ!" +Error.Description="ئادرېسنىڭ توغرىلىقى ۋە تور بېكەتتە مەسىلە يوقلۇقىنى جەزملەڭ." +Error.Retry="چېكىلسە قايتا سىنايدۇ" +Error.Code="خاتالىق: %1" +Error.URL="تور ئادرېسى: %2" +Zoom.Reset="كېڭەيت تارايتنى ئەسلىگە قايتۇر" +Zoom.Out="يىراقلات" +Zoom.In="يېقىنلات" +ErrorCode.ERR_CONNECTION_REFUSED="مۇلازىمېتىر باغلىنىشنى رەت قىلدى" +ErrorCode.ERR_NAME_NOT_RESOLVED="مۇلازىمېتىرنىڭ IP ئادرېسىنى تاپالمىدى" +ErrorCode.ERR_CONNECTION_TIMED_OUT="باغلىنىش ۋاقتى توشتى" +ErrorCode.ERR_TIMED_OUT="مەشغۇلات ۋاقتى توشتى" +ErrorCode.ERR_FILE_NOT_FOUND="ھۆججەت تېپىلمىدى" +ErrorCode.ERR_FAILED="باغلىنالمىدى" +ErrorCode.ERR_NETWORK_CHANGED="تور ئۆزگەردى" +ErrorCode.ERR_SSL_VERSION_INTERFERENCE="SSL نەشر كاشىلا مەسىلىسى. TLS 1.3 چەكلەنگەن ياكى ئۆزگەرتىلگەن بولۇشى مۇمكىن." +ErrorCode.ERR_SSL_PROTOCOL_ERROR="SSL كېلىشىم خاتالىقى. بىخەتەر باغلىنىش قۇرالمىدى." +ErrorCode.ERR_CERT_DATE_INVALID="مۇلازىمېتىرنىڭ SSL گۇۋاھنامىسىنىڭ ۋاقتى ئۆتكەن ياكى كومپيۇتېرىڭىزنىڭ ۋاقتى خاتا." diff --git a/obs-browser-plugin.cpp b/obs-browser-plugin.cpp index 39866f932..aab7da79c 100644 --- a/obs-browser-plugin.cpp +++ b/obs-browser-plugin.cpp @@ -636,55 +636,55 @@ static void handle_obs_frontend_event(enum obs_frontend_event event, void *) { switch (event) { case OBS_FRONTEND_EVENT_STREAMING_STARTING: - DispatchJSEvent("obsStreamingStarting", ""); + DispatchJSEvent("obsStreamingStarting", "null"); break; case OBS_FRONTEND_EVENT_STREAMING_STARTED: - DispatchJSEvent("obsStreamingStarted", ""); + DispatchJSEvent("obsStreamingStarted", "null"); break; case OBS_FRONTEND_EVENT_STREAMING_STOPPING: - DispatchJSEvent("obsStreamingStopping", ""); + DispatchJSEvent("obsStreamingStopping", "null"); break; case OBS_FRONTEND_EVENT_STREAMING_STOPPED: - DispatchJSEvent("obsStreamingStopped", ""); + DispatchJSEvent("obsStreamingStopped", "null"); break; case OBS_FRONTEND_EVENT_RECORDING_STARTING: - DispatchJSEvent("obsRecordingStarting", ""); + DispatchJSEvent("obsRecordingStarting", "null"); break; case OBS_FRONTEND_EVENT_RECORDING_STARTED: - DispatchJSEvent("obsRecordingStarted", ""); + DispatchJSEvent("obsRecordingStarted", "null"); break; case OBS_FRONTEND_EVENT_RECORDING_PAUSED: - DispatchJSEvent("obsRecordingPaused", ""); + DispatchJSEvent("obsRecordingPaused", "null"); break; case OBS_FRONTEND_EVENT_RECORDING_UNPAUSED: - DispatchJSEvent("obsRecordingUnpaused", ""); + DispatchJSEvent("obsRecordingUnpaused", "null"); break; case OBS_FRONTEND_EVENT_RECORDING_STOPPING: - DispatchJSEvent("obsRecordingStopping", ""); + DispatchJSEvent("obsRecordingStopping", "null"); break; case OBS_FRONTEND_EVENT_RECORDING_STOPPED: - DispatchJSEvent("obsRecordingStopped", ""); + DispatchJSEvent("obsRecordingStopped", "null"); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTING: - DispatchJSEvent("obsReplaybufferStarting", ""); + DispatchJSEvent("obsReplaybufferStarting", "null"); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STARTED: - DispatchJSEvent("obsReplaybufferStarted", ""); + DispatchJSEvent("obsReplaybufferStarted", "null"); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED: - DispatchJSEvent("obsReplaybufferSaved", ""); + DispatchJSEvent("obsReplaybufferSaved", "null"); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPING: - DispatchJSEvent("obsReplaybufferStopping", ""); + DispatchJSEvent("obsReplaybufferStopping", "null"); break; case OBS_FRONTEND_EVENT_REPLAY_BUFFER_STOPPED: - DispatchJSEvent("obsReplaybufferStopped", ""); + DispatchJSEvent("obsReplaybufferStopped", "null"); break; case OBS_FRONTEND_EVENT_VIRTUALCAM_STARTED: - DispatchJSEvent("obsVirtualcamStarted", ""); + DispatchJSEvent("obsVirtualcamStarted", "null"); break; case OBS_FRONTEND_EVENT_VIRTUALCAM_STOPPED: - DispatchJSEvent("obsVirtualcamStopped", ""); + DispatchJSEvent("obsVirtualcamStopped", "null"); break; case OBS_FRONTEND_EVENT_SCENE_CHANGED: { OBSSourceAutoRelease source = obs_frontend_get_current_scene(); @@ -704,8 +704,53 @@ static void handle_obs_frontend_event(enum obs_frontend_event event, void *) DispatchJSEvent("obsSceneChanged", json.dump()); break; } + case OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED: { + struct obs_frontend_source_list list = {}; + obs_frontend_get_scenes(&list); + std::vector scenes_vector; + for (size_t i = 0; i < list.sources.num; i++) { + obs_source_t *source = list.sources.array[i]; + scenes_vector.push_back(obs_source_get_name(source)); + } + nlohmann::json json = scenes_vector; + obs_frontend_source_list_free(&list); + + DispatchJSEvent("obsSceneListChanged", json.dump()); + break; + } + case OBS_FRONTEND_EVENT_TRANSITION_CHANGED: { + OBSSourceAutoRelease source = + obs_frontend_get_current_transition(); + + if (!source) + break; + + const char *name = obs_source_get_name(source); + if (!name) + break; + + nlohmann::json json = {{"name", name}}; + + DispatchJSEvent("obsTransitionChanged", json.dump()); + break; + } + case OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED: { + struct obs_frontend_source_list list = {}; + obs_frontend_get_transitions(&list); + std::vector transitions_vector; + for (size_t i = 0; i < list.sources.num; i++) { + obs_source_t *source = list.sources.array[i]; + transitions_vector.push_back( + obs_source_get_name(source)); + } + nlohmann::json json = transitions_vector; + obs_frontend_source_list_free(&list); + + DispatchJSEvent("obsTransitionListChanged", json.dump()); + break; + } case OBS_FRONTEND_EVENT_EXIT: - DispatchJSEvent("obsExit", ""); + DispatchJSEvent("obsExit", "null"); break; default:; } diff --git a/panel/browser-panel-client.cpp b/panel/browser-panel-client.cpp index 7523faf2b..202e15f52 100644 --- a/panel/browser-panel-client.cpp +++ b/panel/browser-panel-client.cpp @@ -395,6 +395,19 @@ bool QCefBrowserClient::OnContextMenuCommand( return false; } +void QCefBrowserClient::OnLoadStart(CefRefPtr, + CefRefPtr frame, TransitionType) +{ + if (!frame->IsMain()) + return; + + std::string script = "window.close = () => "; + script += "console.log("; + script += "'OBS browser docks cannot be closed using JavaScript.'"; + script += ");"; + frame->ExecuteJavaScript(script, "", 0); +} + void QCefBrowserClient::OnLoadEnd(CefRefPtr, CefRefPtr frame, int) { diff --git a/panel/browser-panel-client.hpp b/panel/browser-panel-client.hpp index 941b9e632..c099fd6d1 100644 --- a/panel/browser-panel-client.hpp +++ b/panel/browser-panel-client.hpp @@ -95,6 +95,10 @@ class QCefBrowserClient : public CefClient, CefContextMenuHandler::EventFlags event_flags) override; /* CefLoadHandler */ + virtual void OnLoadStart(CefRefPtr browser, + CefRefPtr frame, + TransitionType transition_type) override; + virtual void OnLoadEnd(CefRefPtr browser, CefRefPtr frame, int httpStatusCode) override;