diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini index 16f369f8..fc816bd2 100644 --- a/data/locale/de-DE.ini +++ b/data/locale/de-DE.ini @@ -416,7 +416,6 @@ AdvSceneSwitcher.action.replay.type.save="Replay Buffer speichern" AdvSceneSwitcher.action.streaming="Stream" AdvSceneSwitcher.action.streaming.type.stop="Stream stoppen" AdvSceneSwitcher.action.streaming.type.start="Stream starten" -AdvSceneSwitcher.action.streaming.entry="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}" AdvSceneSwitcher.action.run="Ausführen" AdvSceneSwitcher.action.sceneVisibility="Sichtbarkeit von Szenenelementen" AdvSceneSwitcher.action.sceneVisibility.type.show="Anzeigen" diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 0b805cbe..0c8234b1 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -942,7 +942,8 @@ AdvSceneSwitcher.action.streaming.type.server="Set server URL" AdvSceneSwitcher.action.streaming.type.streamKey="Set stream key" AdvSceneSwitcher.action.streaming.type.username="Set username" AdvSceneSwitcher.action.streaming.type.password="Set password" -AdvSceneSwitcher.action.streaming.entry="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}" +AdvSceneSwitcher.action.streaming.getCurrentValue="Get current value" +AdvSceneSwitcher.action.streaming.layout="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}{{getCurrentValue}}" AdvSceneSwitcher.action.run="Run" AdvSceneSwitcher.action.run.wait.entry="{{wait}}Wait for process exit or at most {{timeout}}{{waitHelp}}" AdvSceneSwitcher.action.run.wait.help.tooltip="Note that macro properties won't work if you leave this unticked, as the process spawns detached from the rest of logic and there's no control over it." diff --git a/data/locale/es-ES.ini b/data/locale/es-ES.ini index 97e42473..466acb24 100644 --- a/data/locale/es-ES.ini +++ b/data/locale/es-ES.ini @@ -340,7 +340,6 @@ AdvSceneSwitcher.action.replay.type.save="Guardar búfer de reproducción" AdvSceneSwitcher.action.streaming="Transmisión" AdvSceneSwitcher.action.streaming.type.stop="Detener transmisión" AdvSceneSwitcher.action.streaming.type.start="Iniciar transmisión" -AdvSceneSwitcher.action.streaming.entry="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}" AdvSceneSwitcher.action.run="Ejecutar" AdvSceneSwitcher.action.sceneVisibility="Visibilidad del elemento de escena" AdvSceneSwitcher.action.sceneVisibility.type.show="Mostrar" diff --git a/data/locale/pt-BR.ini b/data/locale/pt-BR.ini index 331be24f..c37b4331 100644 --- a/data/locale/pt-BR.ini +++ b/data/locale/pt-BR.ini @@ -765,7 +765,6 @@ AdvSceneSwitcher.action.streaming.type.server="Definir URL do servidor" AdvSceneSwitcher.action.streaming.type.streamKey="Definir chave de transmissão" AdvSceneSwitcher.action.streaming.type.username="Definir nome de usuário" AdvSceneSwitcher.action.streaming.type.password="Definir senha" -AdvSceneSwitcher.action.streaming.entry="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}" AdvSceneSwitcher.action.run="Executar" AdvSceneSwitcher.action.run.wait.entry="{{wait}}Aguardar a saída do processo ou no máximo {{timeout}}{{waitHelp}}" AdvSceneSwitcher.action.run.wait.help.tooltip="Observe que as propriedades da macro não funcionarão se você deixar isso desmarcado, pois o processo é iniciado de forma independente do restante da lógica e não há controle sobre ele." diff --git a/data/locale/ru-RU.ini b/data/locale/ru-RU.ini index 0589b1ae..d1425056 100644 --- a/data/locale/ru-RU.ini +++ b/data/locale/ru-RU.ini @@ -135,7 +135,6 @@ AdvSceneSwitcher.action.replay.type.save="Сохранить буфер восп AdvSceneSwitcher.action.streaming="Потоковое вещание" AdvSceneSwitcher.action.streaming.type.stop="Остановить потоковое вещание" AdvSceneSwitcher.action.streaming.type.start="Начать потоковое вещание" -AdvSceneSwitcher.action.streaming.entry="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}" AdvSceneSwitcher.action.run="Запустить" diff --git a/data/locale/tr-TR.ini b/data/locale/tr-TR.ini index 5466fb0d..fbdcb35e 100644 --- a/data/locale/tr-TR.ini +++ b/data/locale/tr-TR.ini @@ -270,7 +270,6 @@ AdvSceneSwitcher.action.replay.type.save="Tekrar arabelleğini kaydet" AdvSceneSwitcher.action.streaming="Yayın" AdvSceneSwitcher.action.streaming.type.stop="Yayın durdur" AdvSceneSwitcher.action.streaming.type.start="Yayın başlat" -AdvSceneSwitcher.action.streaming.entry="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}" AdvSceneSwitcher.action.run="Çalıştır" AdvSceneSwitcher.action.sceneVisibility="Sahne öğesi görünürlüğü" AdvSceneSwitcher.action.sceneVisibility.type.show="Göster" diff --git a/data/locale/zh-CN.ini b/data/locale/zh-CN.ini index 6ed2ee25..b8cca2af 100644 --- a/data/locale/zh-CN.ini +++ b/data/locale/zh-CN.ini @@ -825,7 +825,6 @@ AdvSceneSwitcher.action.streaming.type.server="设置服务器" AdvSceneSwitcher.action.streaming.type.streamKey="设置推流码" AdvSceneSwitcher.action.streaming.type.username="设置用户名" AdvSceneSwitcher.action.streaming.type.password="设置密码" -AdvSceneSwitcher.action.streaming.entry="{{actions}}{{keyFrameInterval}}{{stringValue}}{{showPassword}}" AdvSceneSwitcher.action.run="运行" AdvSceneSwitcher.action.run.wait.entry="{{wait}}进程退出或最多等待{{timeout}}{{waitHelp}}" AdvSceneSwitcher.action.run.wait.help.tooltip="请注意,如果不勾选此选项,宏属性将不起作用,因为进程的启动会脱离逻辑的其他部分,因此无法对其进行控制." diff --git a/plugins/base/macro-action-streaming.cpp b/plugins/base/macro-action-streaming.cpp index e0bf6efe..33064e63 100644 --- a/plugins/base/macro-action-streaming.cpp +++ b/plugins/base/macro-action-streaming.cpp @@ -4,6 +4,7 @@ #include "ui-helpers.hpp" #include +#include #include namespace advss { @@ -183,6 +184,8 @@ MacroActionStreamEdit::MacroActionStreamEdit( _keyFrameInterval(new VariableSpinBox()), _stringValue(new VariableLineEdit(this)), _showPassword(new QPushButton()), + _getCurrentValue(new QPushButton(obs_module_text( + "AdvSceneSwitcher.action.streaming.getCurrentValue"))), _layout(new QHBoxLayout()) { _keyFrameInterval->setMinimum(0); @@ -208,13 +211,17 @@ MacroActionStreamEdit::MacroActionStreamEdit( SLOT(ShowPassword())); QWidget::connect(_showPassword, SIGNAL(released()), this, SLOT(HidePassword())); + QWidget::connect(_getCurrentValue, SIGNAL(clicked()), this, + SLOT(GetCurrentValueClicked())); - PlaceWidgets(obs_module_text("AdvSceneSwitcher.action.streaming.entry"), - _layout, - {{"{{actions}}", _actions}, - {"{{keyFrameInterval}}", _keyFrameInterval}, - {"{{stringValue}}", _stringValue}, - {"{{showPassword}}", _showPassword}}); + PlaceWidgets( + obs_module_text("AdvSceneSwitcher.action.streaming.layout"), + _layout, + {{"{{actions}}", _actions}, + {"{{keyFrameInterval}}", _keyFrameInterval}, + {"{{stringValue}}", _stringValue}, + {"{{showPassword}}", _showPassword}, + {"{{getCurrentValue}}", _getCurrentValue}}); setLayout(_layout); _entryData = entryData; @@ -291,6 +298,62 @@ void MacroActionStreamEdit::SetWidgetVisibility() _stringValue->setEchoMode(QLineEdit::Normal); _showPassword->hide(); } + _getCurrentValue->setVisible( + action == MacroActionStream::Action::KEYFRAME_INTERVAL || + action == MacroActionStream::Action::SERVER || + action == MacroActionStream::Action::STREAM_KEY || + action == MacroActionStream::Action::USERNAME || + action == MacroActionStream::Action::PASSWORD); +} + +void MacroActionStreamEdit::GetCurrentValueClicked() +{ + if (!_entryData) { + return; + } + switch (_entryData->_action) { + case MacroActionStream::Action::KEYFRAME_INTERVAL: { + const auto configPath = + GetPathInProfileDir("streamEncoder.json"); + OBSDataAutoRelease settings = + obs_data_create_from_json_file_safe(configPath.c_str(), + "bak"); + if (!settings) { + break; + } + _keyFrameInterval->SetFixedValue( + (int)obs_data_get_int(settings, "keyint_sec")); + break; + } + case MacroActionStream::Action::SERVER: + case MacroActionStream::Action::STREAM_KEY: + case MacroActionStream::Action::USERNAME: + case MacroActionStream::Action::PASSWORD: { + static const std::map + settingsKeys = { + {MacroActionStream::Action::SERVER, "server"}, + {MacroActionStream::Action::STREAM_KEY, "key"}, + {MacroActionStream::Action::USERNAME, + "username"}, + {MacroActionStream::Action::PASSWORD, + "password"}, + }; + auto service = obs_frontend_get_streaming_service(); + OBSDataAutoRelease settings = obs_service_get_settings(service); + if (!settings) { + obs_service_release(service); + break; + } + const char *val = obs_data_get_string( + settings, settingsKeys.at(_entryData->_action)); + if (val) { + _stringValue->setText(QString(val)); + } + break; + } + default: + break; + } } void MacroActionStreamEdit::ActionChanged(int value) diff --git a/plugins/base/macro-action-streaming.hpp b/plugins/base/macro-action-streaming.hpp index 03e6cf7e..8b7185cc 100644 --- a/plugins/base/macro-action-streaming.hpp +++ b/plugins/base/macro-action-streaming.hpp @@ -67,12 +67,14 @@ private slots: void StringValueChanged(); void ShowPassword(); void HidePassword(); + void GetCurrentValueClicked(); protected: QComboBox *_actions; VariableSpinBox *_keyFrameInterval; VariableLineEdit *_stringValue; QPushButton *_showPassword; + QPushButton *_getCurrentValue; std::shared_ptr _entryData; private: