diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index a04f9f70..e300f5dd 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -227,7 +227,9 @@ AdvSceneSwitcher.networkTab.Disabledwarning="Diese Funktionalität musste unter AdvSceneSwitcher.networkTab.server="Server starten (Sendet Szenenwechselnachrichten zu allen verbundenen Clients)" AdvSceneSwitcher.networkTab.server.port="Port" AdvSceneSwitcher.networkTab.server.lockToIPv4="Nur IPv4 verwenden (deaktiviert IPv6)" -AdvSceneSwitcher.networkTab.server.restrictSendToAutomatedSwitches="Sende nur Szenenwechselnachrichten für automatisierte Szenenwechsel" +AdvSceneSwitcher.networkTab.server.sendSceneChange="Sende Nachrichten für Szenenwechsel" +AdvSceneSwitcher.networkTab.server.restrictSendToAutomatedSwitches="Sende nur Szenenwechselnachrichten für automatisierte Szenenwechsel" +AdvSceneSwitcher.networkTab.server.sendPreview="Sende Nachrichten für Vorschau Szenenwechsel im Studio-Modus" AdvSceneSwitcher.networkTab.startFailed.message="Der WebSocket-Server konnte nicht gestartet werden, mögliche Gründe:\n - Der TCP-Port %1 wird möglicherweise gerade von einem anderen Programm verwendet. Versuchen Sie einen anderen Port in den Websocket-Servereinstellungen zu setzen oder alle Programme zu beenden, die den Port möglicherweise verwenden.\n - Fehler: %2" AdvSceneSwitcher.networkTab.server.status.currentStatus="Aktueller Status" AdvSceneSwitcher.networkTab.server.status.notRunning="Nicht gestartet" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 00385fbf..9e77cc01 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -361,8 +361,9 @@ AdvSceneSwitcher.networkTab.DisabledWarning="This functionality unfortunately ha AdvSceneSwitcher.networkTab.server="Start server (Sends scene switch messages to all connected clients)" AdvSceneSwitcher.networkTab.server.port="Port" AdvSceneSwitcher.networkTab.server.lockToIPv4="Lock server to only using IPv4" +AdvSceneSwitcher.networkTab.server.sendSceneChange="Send messages for scene changes" AdvSceneSwitcher.networkTab.server.restrictSendToAutomatedSwitches="Only send messages for automated scene switches" -AdvSceneSwitcher.networkTab.server.sendPreview="Synchronize preview scene when running in Studio mode" +AdvSceneSwitcher.networkTab.server.sendPreview="Send messages for preview scene change when running in Studio mode" AdvSceneSwitcher.networkTab.startFailed.message="The WebSockets server failed to start, maybe because:\n - TCP port %1 may currently be in use elsewhere on this system, possibly by another application. Try setting a different TCP port in the WebSocket server settings, or stop any application that could be using this port.\n - Error message: %2" AdvSceneSwitcher.networkTab.server.status.currentStatus="Current status" AdvSceneSwitcher.networkTab.server.status.notRunning="Not running" diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui index f2297f9b..56469ecd 100644 --- a/forms/advanced-scene-switcher.ui +++ b/forms/advanced-scene-switcher.ui @@ -3727,7 +3727,21 @@ - + + + + AdvSceneSwitcher.networkTab.server.restrictSendToAutomatedSwitches + + + + + + + AdvSceneSwitcher.networkTab.server.status.currentStatus + + + + AdvSceneSwitcher.networkTab.server.status.notRunning @@ -3747,13 +3761,6 @@ - - - - AdvSceneSwitcher.networkTab.server.lockToIPv4 - - - @@ -3761,27 +3768,27 @@ - - + + - AdvSceneSwitcher.networkTab.server.restrictSendToAutomatedSwitches + AdvSceneSwitcher.networkTab.server.lockToIPv4 - - - - AdvSceneSwitcher.networkTab.server.status.currentStatus - - - - + AdvSceneSwitcher.networkTab.server.sendPreview + + + + AdvSceneSwitcher.networkTab.server.sendSceneChange + + + diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 2839d88b..46ab5c1f 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -343,7 +343,7 @@ void switchScene(const sceneSwitchInfo &sceneSwitch) blog(LOG_INFO, "switched scene"); } - if (switcher->networkConfig.ServerEnabled) { + if (switcher->networkConfig.ShouldSendSceneChange()) { switcher->server.sendMessage(sceneSwitch); } } @@ -449,8 +449,7 @@ void handleSceneChange() switcher->checkTriggers(); switcher->checkDefaultSceneTransitions(); - if (switcher->networkConfig.ServerEnabled && - switcher->networkConfig.SendAll) { + if (switcher->networkConfig.ShouldSendFrontendSceneChange()) { switcher->server.sendMessage({ws, nullptr, 0}); } } @@ -481,8 +480,7 @@ void checkAutoStartStreaming() void handlePeviewSceneChange() { - if (switcher->networkConfig.ServerEnabled && - switcher->networkConfig.SendPreview) { + if (switcher->networkConfig.ShouldSendPrviewSceneChange()) { auto source = obs_frontend_get_current_preview_scene(); auto weak = obs_source_get_weak_source(source); switcher->server.sendMessage({weak, nullptr, 0}, true); diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index e197fd1a..43124e8e 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -211,6 +211,7 @@ public slots: void on_clientSettings_toggled(bool on); void on_clientHostname_textChanged(const QString &text); void on_clientPort_valueChanged(int value); + void on_sendSceneChange_stateChanged(int state); void on_restrictSend_stateChanged(int state); void on_sendPreview_stateChanged(int state); void on_clientReconnect_clicked(); diff --git a/src/headers/switch-network.hpp b/src/headers/switch-network.hpp index 2a834df4..20d75552 100644 --- a/src/headers/switch-network.hpp +++ b/src/headers/switch-network.hpp @@ -33,6 +33,10 @@ public: std::string GetClientUri(); + bool ShouldSendSceneChange(); + bool ShouldSendFrontendSceneChange(); + bool ShouldSendPrviewSceneChange(); + // Server bool ServerEnabled; uint64_t ServerPort; @@ -42,7 +46,8 @@ public: bool ClientEnabled; std::string Address; uint64_t ClientPort; - bool SendAll; + bool SendSceneChange; + bool SendSceneChangeAll; bool SendPreview; }; diff --git a/src/switch-network.cpp b/src/switch-network.cpp index 068d7b6b..232cb7ee 100644 --- a/src/switch-network.cpp +++ b/src/switch-network.cpp @@ -17,7 +17,8 @@ Most of this code is based on https://github.com/Palakis/obs-websocket #define PARAM_CLIENT_ENABLE "ClientEnabled" #define PARAM_CLIENT_PORT "ClientPort" #define PARAM_ADDRESS "Address" -#define PARAM_CLIENT_SENDALL "SendAll" +#define PARAM_CLIENT_SEND_SCENE_CHANGE "SendSceneChange" +#define PARAM_CLIENT_SEND_SCENE_CHANGE_ALL "SendSceneChangeAll" #define PARAM_CLIENT_SENDPREVIEW "SendPreview" #define RECONNECT_DELAY 10 @@ -38,7 +39,8 @@ NetworkConfig::NetworkConfig() ClientEnabled(false), Address(""), ClientPort(55555), - SendAll(true), + SendSceneChange(true), + SendSceneChangeAll(true), SendPreview(true) { } @@ -54,7 +56,10 @@ void NetworkConfig::Load(obs_data_t *obj) ClientEnabled = obs_data_get_bool(obj, PARAM_CLIENT_ENABLE); Address = obs_data_get_string(obj, PARAM_ADDRESS); ClientPort = obs_data_get_int(obj, PARAM_CLIENT_PORT); - SendAll = obs_data_get_bool(obj, PARAM_CLIENT_SENDALL); + SendSceneChange = + obs_data_get_bool(obj, PARAM_CLIENT_SEND_SCENE_CHANGE); + SendSceneChangeAll = + obs_data_get_bool(obj, PARAM_CLIENT_SEND_SCENE_CHANGE_ALL); SendPreview = obs_data_get_bool(obj, PARAM_CLIENT_SENDPREVIEW); } @@ -67,7 +72,9 @@ void NetworkConfig::Save(obs_data_t *obj) obs_data_set_bool(obj, PARAM_CLIENT_ENABLE, ClientEnabled); obs_data_set_string(obj, PARAM_ADDRESS, Address.c_str()); obs_data_set_int(obj, PARAM_CLIENT_PORT, ClientPort); - obs_data_set_bool(obj, PARAM_CLIENT_SENDALL, SendAll); + obs_data_set_bool(obj, PARAM_CLIENT_SEND_SCENE_CHANGE, SendSceneChange); + obs_data_set_bool(obj, PARAM_CLIENT_SEND_SCENE_CHANGE_ALL, + SendSceneChangeAll); obs_data_set_bool(obj, PARAM_CLIENT_SENDPREVIEW, SendPreview); } @@ -80,7 +87,10 @@ void NetworkConfig::SetDefaults(obs_data_t *obj) obs_data_set_default_bool(obj, PARAM_CLIENT_ENABLE, ClientEnabled); obs_data_set_default_string(obj, PARAM_ADDRESS, Address.c_str()); obs_data_set_default_int(obj, PARAM_CLIENT_PORT, ClientPort); - obs_data_set_default_bool(obj, PARAM_CLIENT_SENDALL, SendAll); + obs_data_set_default_bool(obj, PARAM_CLIENT_SEND_SCENE_CHANGE, + SendSceneChange); + obs_data_set_default_bool(obj, PARAM_CLIENT_SEND_SCENE_CHANGE_ALL, + SendSceneChangeAll); obs_data_set_default_bool(obj, PARAM_CLIENT_SENDPREVIEW, SendPreview); } @@ -89,6 +99,21 @@ std::string NetworkConfig::GetClientUri() return "ws://" + Address + ":" + std::to_string(ClientPort); } +bool NetworkConfig::ShouldSendSceneChange() +{ + return ServerEnabled && SendSceneChange; +} + +bool NetworkConfig::ShouldSendFrontendSceneChange() +{ + return ShouldSendSceneChange() && SendSceneChangeAll; +} + +bool NetworkConfig::ShouldSendPrviewSceneChange() +{ + return ServerEnabled && SendPreview; +} + WSServer::WSServer() : QObject(nullptr), _connections(), _clMutex(QMutex::Recursive) { @@ -490,8 +515,12 @@ void AdvSceneSwitcher::setupNetworkTab() ui->clientSettings->setChecked(switcher->networkConfig.ClientEnabled); ui->clientHostname->setText(switcher->networkConfig.Address.c_str()); ui->clientPort->setValue(switcher->networkConfig.ClientPort); - ui->restrictSend->setChecked(!switcher->networkConfig.SendAll); + ui->sendSceneChange->setChecked( + switcher->networkConfig.SendSceneChange); + ui->restrictSend->setChecked( + !switcher->networkConfig.SendSceneChangeAll); ui->sendPreview->setChecked(switcher->networkConfig.SendPreview); + ui->restrictSend->setDisabled(!switcher->networkConfig.SendSceneChange); QTimer *statusTimer = new QTimer(this); connect(statusTimer, SIGNAL(timeout()), this, @@ -605,6 +634,17 @@ void AdvSceneSwitcher::on_clientPort_valueChanged(int value) switcher->networkConfig.ClientPort = value; } +void AdvSceneSwitcher::on_sendSceneChange_stateChanged(int state) +{ + if (loading) { + return; + } + + std::lock_guard lock(switcher->m); + switcher->networkConfig.SendSceneChange = state; + ui->restrictSend->setDisabled(!state); +} + void AdvSceneSwitcher::on_restrictSend_stateChanged(int state) { if (loading) { @@ -612,7 +652,7 @@ void AdvSceneSwitcher::on_restrictSend_stateChanged(int state) } std::lock_guard lock(switcher->m); - switcher->networkConfig.SendAll = !state; + switcher->networkConfig.SendSceneChangeAll = !state; } void AdvSceneSwitcher::on_sendPreview_stateChanged(int state)