diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 5a9cc0d62..2b6b1fc12 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -957,6 +957,8 @@ Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximum Video Bitrate: %1 kbp Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximum Audio Bitrate: %1 kbps" Basic.Settings.Stream.Recommended.MaxResolution="Maximum Resolution: %1" Basic.Settings.Stream.Recommended.MaxFPS="Maximum FPS: %1" +Basic.Settings.Stream.SpecifyCustomServer="Specify Custom Server..." +Basic.Settings.Stream.ServiceCustomServer="Custom Server" # basic mode 'output' settings Basic.Settings.Output="Output" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index cf0e4fbd5..504c48ed9 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -1271,6 +1271,19 @@ + + + Basic.Settings.Stream.ServiceCustomServer + + + serviceCustomServer + + + + + + + Basic.AutoConfig.StreamPage.StreamKey @@ -1283,7 +1296,7 @@ - + @@ -1334,7 +1347,7 @@ - + Qt::Horizontal @@ -1347,7 +1360,7 @@ - + 8 @@ -1390,21 +1403,21 @@ - + Basic.Settings.Stream.BandwidthTestMode - + Basic.Settings.Stream.Custom.UseAuthentication - + Basic.Settings.Stream.Custom.Username @@ -1414,10 +1427,10 @@ - + - + Basic.Settings.Stream.Custom.Password @@ -1427,7 +1440,7 @@ - + @@ -1459,10 +1472,10 @@ - + - + Basic.Settings.Stream.TTVAddon @@ -1472,14 +1485,14 @@ - + Basic.Settings.Stream.IgnoreRecommended - + @@ -1492,7 +1505,7 @@ - + @@ -1516,14 +1529,14 @@ - + Basic.AutoConfig.StreamPage.ConnectedAccount - + diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index e28c5b189..04cc3a3bb 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "window-basic-settings.hpp" #include "obs-frontend-api.h" @@ -20,6 +21,13 @@ #include "youtube-api-wrappers.hpp" #endif +static const QUuid &CustomServerUUID() +{ + static const QUuid uuid = QUuid::fromString( + QT_UTF8("{241da255-70f2-4bbb-bef7-509695bf8e65}")); + return uuid; +} + struct QCef; struct QCefCookieManager; @@ -108,6 +116,8 @@ void OBSBasicSettings::LoadStream1Settings() const char *service = obs_data_get_string(settings, "service"); const char *server = obs_data_get_string(settings, "server"); const char *key = obs_data_get_string(settings, "key"); + bool use_custom_server = + obs_data_get_bool(settings, "using_custom_server"); protocol = QT_UTF8(obs_service_get_protocol(service_obj)); const char *bearer_token = obs_data_get_string(settings, "bearer_token"); @@ -148,7 +158,13 @@ void OBSBasicSettings::LoadStream1Settings() UpdateServerList(); if (is_rtmp_common) { - int idx = ui->server->findData(server); + int idx = -1; + if (use_custom_server) { + idx = ui->server->findData(CustomServerUUID()); + } else { + idx = ui->server->findData(QString::fromUtf8(server)); + } + if (idx == -1) { if (server && *server) ui->server->insertItem(0, server, server); @@ -157,6 +173,9 @@ void OBSBasicSettings::LoadStream1Settings() ui->server->setCurrentIndex(idx); } + if (use_custom_server) + ui->serviceCustomServer->setText(server); + if (is_whip) ui->key->setText(bearer_token); else @@ -223,9 +242,19 @@ void OBSBasicSettings::SaveStream1Settings() obs_data_set_string(settings, "service", QT_TO_UTF8(ui->service->currentText())); obs_data_set_string(settings, "protocol", QT_TO_UTF8(protocol)); - obs_data_set_string( - settings, "server", - QT_TO_UTF8(ui->server->currentData().toString())); + if (ui->server->currentData() == CustomServerUUID()) { + obs_data_set_bool(settings, "using_custom_server", + true); + + obs_data_set_string( + settings, "server", + QT_TO_UTF8(ui->serviceCustomServer->text())); + } else { + obs_data_set_string( + settings, "server", + QT_TO_UTF8( + ui->server->currentData().toString())); + } } else { obs_data_set_string( settings, "server", @@ -675,6 +704,12 @@ void OBSBasicSettings::UpdateServerList() ui->server->addItem(name, server); } + if (serviceName == "Twitch") { + ui->server->addItem( + QTStr("Basic.Settings.Stream.SpecifyCustomServer"), + CustomServerUUID()); + } + obs_properties_destroy(props); } @@ -887,6 +922,19 @@ void OBSBasicSettings::on_useAuth_toggled() ui->authPwWidget->setVisible(use_auth); } +bool OBSBasicSettings::IsCustomServer() +{ + return ui->server->currentData() == QVariant{CustomServerUUID()}; +} + +void OBSBasicSettings::on_server_currentIndexChanged(int /*index*/) +{ + auto server_is_custom = IsCustomServer(); + + ui->serviceCustomServerLabel->setVisible(server_is_custom); + ui->serviceCustomServer->setVisible(server_is_custom); +} + void OBSBasicSettings::UpdateVodTrackSetting() { bool enableForCustomServer = config_get_bool( diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 3a719d130..775d13098 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -411,6 +411,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->service, COMBO_CHANGED, STREAM1_CHANGED); HookWidget(ui->server, COMBO_CHANGED, STREAM1_CHANGED); HookWidget(ui->customServer, EDIT_CHANGED, STREAM1_CHANGED); + HookWidget(ui->serviceCustomServer, EDIT_CHANGED, STREAM1_CHANGED); HookWidget(ui->key, EDIT_CHANGED, STREAM1_CHANGED); HookWidget(ui->bandwidthTestEnable, CHECK_CHANGED, STREAM1_CHANGED); HookWidget(ui->twitchAddonDropdown, COMBO_CHANGED, STREAM1_CHANGED); diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index e15c25934..51830c63f 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -296,6 +296,8 @@ private: /* Appearance */ void InitAppearancePage(); + bool IsCustomServer(); + private slots: void RecreateOutputResolutionWidget(); bool UpdateResFPSLimits(); @@ -306,6 +308,7 @@ private slots: void on_disconnectAccount_clicked(); void on_useStreamKey_clicked(); void on_useAuth_toggled(); + void on_server_currentIndexChanged(int index); void on_hotkeyFilterReset_clicked(); void on_hotkeyFilterSearch_textChanged(const QString text);