From 41f4a0b0b9fc1db277055a84f733f1a5da51abfe Mon Sep 17 00:00:00 2001 From: Maya Venkatraman Date: Mon, 12 Oct 2020 21:20:12 -0700 Subject: [PATCH] UI: Add support for "More Info" link from service (Jim) Allows the ability to get a link from the service's settings about a specific service selection the user chooses and display it as a "More Info" button that the user can click to find out more information about that particular service. --- UI/data/locale/en-US.ini | 1 + UI/forms/AutoConfigStreamPage.ui | 27 +++++++++++++++++++- UI/forms/OBSBasicSettings.ui | 39 ++++++++++++++++++++++++++--- UI/window-basic-auto-config.cpp | 32 +++++++++++++++++++++++ UI/window-basic-auto-config.hpp | 1 + UI/window-basic-settings-stream.cpp | 32 +++++++++++++++++++++++ UI/window-basic-settings.hpp | 1 + plugins/rtmp-services/rtmp-common.c | 11 +++++++- 8 files changed, 138 insertions(+), 6 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index eb31c6601..1095f5f53 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -174,6 +174,7 @@ Basic.AutoConfig.StreamPage.DisconnectAccount="Disconnect Account" Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Disconnect Account?" Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="This change will apply immediately. Are you sure you want to disconnect your account?" Basic.AutoConfig.StreamPage.GetStreamKey="Get Stream Key" +Basic.AutoConfig.StreamPage.MoreInfo="More Info" Basic.AutoConfig.StreamPage.UseStreamKey="Use Stream Key" Basic.AutoConfig.StreamPage.Service="Service" Basic.AutoConfig.StreamPage.Service.ShowAll="Show All..." diff --git a/UI/forms/AutoConfigStreamPage.ui b/UI/forms/AutoConfigStreamPage.ui index 7eec15fa9..e5940b950 100644 --- a/UI/forms/AutoConfigStreamPage.ui +++ b/UI/forms/AutoConfigStreamPage.ui @@ -74,7 +74,32 @@ - + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + Basic.AutoConfig.StreamPage.MoreInfo + + + + + diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index f4eaa36c0..f2b91fc4c 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -824,10 +824,41 @@ - - - 20 - + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 20 + + + + + + + + 0 + 0 + + + + Basic.AutoConfig.StreamPage.MoreInfo + + + + diff --git a/UI/window-basic-auto-config.cpp b/UI/window-basic-auto-config.cpp index 466da7e15..61d291145 100644 --- a/UI/window-basic-auto-config.cpp +++ b/UI/window-basic-auto-config.cpp @@ -285,6 +285,8 @@ AutoConfigStreamPage::AutoConfigStreamPage(QWidget *parent) connect(ui->service, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateKeyLink())); + connect(ui->service, SIGNAL(currentIndexChanged(int)), this, + SLOT(UpdateMoreInfoLink())); connect(ui->key, SIGNAL(textChanged(const QString &)), this, SLOT(UpdateCompleted())); @@ -575,6 +577,35 @@ void AutoConfigStreamPage::ServiceChanged() UpdateCompleted(); } +void AutoConfigStreamPage::UpdateMoreInfoLink() +{ + if (IsCustomService()) { + ui->moreInfoButton->hide(); + return; + } + + QString serviceName = ui->service->currentText(); + obs_properties_t *props = obs_get_service_properties("rtmp_common"); + obs_property_t *services = obs_properties_get(props, "service"); + + OBSData settings = obs_data_create(); + obs_data_release(settings); + + obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName)); + obs_property_modified(services, settings); + + const char *more_info_link = + obs_data_get_string(settings, "more_info_link"); + + if (!more_info_link || (*more_info_link == '\0')) { + ui->moreInfoButton->hide(); + } else { + ui->moreInfoButton->setTargetUrl(QUrl(more_info_link)); + ui->moreInfoButton->show(); + } + obs_properties_destroy(props); +} + void AutoConfigStreamPage::UpdateKeyLink() { QString serviceName = ui->service->currentText(); @@ -814,6 +845,7 @@ AutoConfig::AutoConfig(QWidget *parent) : QWizard(parent) streamPage->UpdateServerList(); streamPage->UpdateKeyLink(); + streamPage->UpdateMoreInfoLink(); streamPage->lastService.clear(); if (!customServer) { diff --git a/UI/window-basic-auto-config.hpp b/UI/window-basic-auto-config.hpp index 98540c8c6..656b76f13 100644 --- a/UI/window-basic-auto-config.hpp +++ b/UI/window-basic-auto-config.hpp @@ -195,6 +195,7 @@ public slots: void on_useStreamKey_clicked(); void ServiceChanged(); void UpdateKeyLink(); + void UpdateMoreInfoLink(); void UpdateServerList(); void UpdateCompleted(); }; diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 53231d03e..4b68f9339 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -75,6 +75,8 @@ void OBSBasicSettings::InitStreamPage() SLOT(UpdateKeyLink())); connect(ui->customServer, SIGNAL(editingFinished(const QString &)), this, SLOT(UpdateKeyLink())); + connect(ui->service, SIGNAL(currentIndexChanged(int)), this, + SLOT(UpdateMoreInfoLink())); } void OBSBasicSettings::LoadStream1Settings() @@ -138,6 +140,7 @@ void OBSBasicSettings::LoadStream1Settings() obs_data_release(settings); UpdateKeyLink(); + UpdateMoreInfoLink(); bool streamActive = obs_frontend_streaming_active(); ui->streamPage->setEnabled(!streamActive); @@ -212,6 +215,35 @@ void OBSBasicSettings::SaveStream1Settings() main->auth->LoadUI(); } +void OBSBasicSettings::UpdateMoreInfoLink() +{ + if (IsCustomService()) { + ui->moreInfoButton->hide(); + return; + } + + QString serviceName = ui->service->currentText(); + obs_properties_t *props = obs_get_service_properties("rtmp_common"); + obs_property_t *services = obs_properties_get(props, "service"); + + OBSData settings = obs_data_create(); + obs_data_release(settings); + + obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName)); + obs_property_modified(services, settings); + + const char *more_info_link = + obs_data_get_string(settings, "more_info_link"); + + if (!more_info_link || (*more_info_link == '\0')) { + ui->moreInfoButton->hide(); + } else { + ui->moreInfoButton->setTargetUrl(QUrl(more_info_link)); + ui->moreInfoButton->show(); + } + obs_properties_destroy(props); +} + void OBSBasicSettings::UpdateKeyLink() { QString serviceName = ui->service->currentText(); diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 51179a2cd..89f679506 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -239,6 +239,7 @@ private: private slots: void UpdateServerList(); void UpdateKeyLink(); + void UpdateMoreInfoLink(); void on_show_clicked(); void on_authPwShow_clicked(); void on_connectAccount_clicked(); diff --git a/plugins/rtmp-services/rtmp-common.c b/plugins/rtmp-services/rtmp-common.c index 5c2527687..627ac7d54 100644 --- a/plugins/rtmp-services/rtmp-common.c +++ b/plugins/rtmp-services/rtmp-common.c @@ -370,6 +370,15 @@ static void fill_servers(obs_property_t *servers_prop, json_t *service, } } +static void fill_more_info_link(json_t *service, obs_data_t *settings) +{ + const char *more_info_link; + + more_info_link = get_string_val(service, "more_info_link"); + if (more_info_link) + obs_data_set_string(settings, "more_info_link", more_info_link); +} + static inline json_t *find_service(json_t *root, const char *name, const char **p_new_name) { @@ -432,7 +441,7 @@ static bool service_selected(obs_properties_t *props, obs_property_t *p, } fill_servers(obs_properties_get(props, "server"), service, name); - + fill_more_info_link(service, settings); return true; }