From 3e841b221d03a14479f6eb1ea4de06b0c649cd88 Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 10 Oct 2019 03:29:09 +0200 Subject: [PATCH] UI: Add setting for Twitch chat add-ons choice Both BTTV and FFZ are fairly popular however they do occasionally interfere. To give users the option to chose whichever one they like most we add a new setting that allows BTTV, FFZ, both, or neither. Defaults to "None" for new users. Existing users will be migrated to "Both" as that's the previous behavior. --- UI/auth-twitch.cpp | 23 +++++++++-- UI/data/locale/en-US.ini | 5 +++ UI/forms/OBSBasicSettings.ui | 63 +++++++++++++++++------------ UI/obs-app.cpp | 12 ++++++ UI/window-basic-main.cpp | 9 +++++ UI/window-basic-settings-stream.cpp | 38 ++++++++++++++++- UI/window-basic-settings.cpp | 7 ++++ UI/window-basic-settings.hpp | 1 + 8 files changed, 128 insertions(+), 30 deletions(-) diff --git a/UI/auth-twitch.cpp b/UI/auth-twitch.cpp index ce46c60d4..2c7818f5c 100644 --- a/UI/auth-twitch.cpp +++ b/UI/auth-twitch.cpp @@ -217,8 +217,16 @@ void TwitchAuth::LoadUI() cef->add_force_popup_url(moderation_tools_url, chat.data()); script = "localStorage.setItem('twilight.theme', 1);"; - script += bttv_script; - script += ffz_script; + + const int twAddonChoice = + config_get_int(main->Config(), service(), "AddonChoice"); + if (twAddonChoice) { + if (twAddonChoice & 0x1) + script += bttv_script; + if (twAddonChoice & 0x2) + script += ffz_script; + } + browser->setStartupScript(script); main->addDockWidget(Qt::RightDockWidgetArea, chat.data()); @@ -261,8 +269,15 @@ void TwitchAuth::LoadSecondaryUIPanes() script += name; script += "/dashboard/live"; script += referrer_script2; - script += bttv_script; - script += ffz_script; + + const int twAddonChoice = + config_get_int(main->Config(), service(), "AddonChoice"); + if (twAddonChoice) { + if (twAddonChoice & 0x1) + script += bttv_script; + if (twAddonChoice & 0x2) + script += ffz_script; + } /* ----------------------------------- */ diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 634f533d0..37bc5527f 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -670,6 +670,11 @@ Basic.Settings.Stream.Custom.UseAuthentication="Use authentication" Basic.Settings.Stream.Custom.Username="Username" Basic.Settings.Stream.Custom.Password="Password" Basic.Settings.Stream.BandwidthTestMode="Enable Bandwidth Test Mode" +Basic.Settings.Stream.TTVAddon="Twitch Chat Add-Ons" +Basic.Settings.Stream.TTVAddon.None="None" +Basic.Settings.Stream.TTVAddon.BTTV="BetterTTV" +Basic.Settings.Stream.TTVAddon.FFZ="FrankerFaceZ" +Basic.Settings.Stream.TTVAddon.Both="BetterTTV and FrankerFaceZ" # basic mode 'output' settings Basic.Settings.Output="Output" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index f096bd398..a5e03b684 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -151,8 +151,8 @@ 0 0 - 630 - 1035 + 803 + 977 @@ -1012,18 +1012,18 @@ - - - - - - -4 - - - Basic.AutoConfig.StreamPage.GetStreamKey - - - + + + + + + -4 + + + Basic.AutoConfig.StreamPage.GetStreamKey + + + @@ -1102,7 +1102,7 @@ - + Basic.Settings.Stream.Custom.Username @@ -1112,10 +1112,10 @@ - + - + Basic.Settings.Stream.Custom.Password @@ -1125,7 +1125,7 @@ - + @@ -1157,6 +1157,19 @@ + + + + + + + Basic.Settings.Stream.TTVAddon + + + twitchAddonDropdown + + + @@ -1193,8 +1206,8 @@ 0 0 - 739 - 793 + 601 + 631 @@ -2268,7 +2281,7 @@ 0 - + 0 @@ -3702,8 +3715,8 @@ 0 0 - 696 - 601 + 555 + 469 @@ -4518,8 +4531,8 @@ 0 0 - 759 - 930 + 803 + 781 diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 1e2e7a49f..c2cb95e12 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -735,6 +735,18 @@ bool OBSApp::InitGlobalConfig() changed = true; } +#define PRE_24_1_DEFS "Pre24.1Defaults" + if (!config_has_user_value(globalConfig, "General", PRE_24_1_DEFS)) { + bool useOldDefaults = lastVersion && + lastVersion < + MAKE_SEMANTIC_VERSION(24, 1, 0); + + config_set_bool(globalConfig, "General", PRE_24_1_DEFS, + useOldDefaults); + changed = true; + } +#undef PRE_24_1_DEFS + if (config_has_user_value(globalConfig, "BasicWindow", "MultiviewLayout")) { const char *layout = config_get_string( diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 6419fd6c2..3e373b756 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1198,6 +1198,15 @@ bool OBSBasic::InitBasicConfigDefaults() changed = true; } + /* ----------------------------------------------------- */ + /* set twitch chat extensions to "both" if prev version */ + /* is under 24.1 */ + if (config_get_bool(GetGlobalConfig(), "General", "Pre24.1Defaults") && + !config_has_user_value(basicConfig, "Twitch", "AddonChoice")) { + config_set_int(basicConfig, "Twitch", "AddonChoice", 3); + changed = true; + } + /* ----------------------------------------------------- */ if (changed) diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp index 4f5b1fee4..ecb7f101b 100644 --- a/UI/window-basic-settings-stream.cpp +++ b/UI/window-basic-settings-stream.cpp @@ -39,6 +39,8 @@ void OBSBasicSettings::InitStreamPage() ui->connectAccount2->setVisible(false); ui->disconnectAccount->setVisible(false); ui->bandwidthTestEnable->setVisible(false); + ui->twitchAddonDropdown->setVisible(false); + ui->twitchAddonLabel->setVisible(false); int vertSpacing = ui->topStreamLayout->verticalSpacing(); @@ -56,6 +58,15 @@ void OBSBasicSettings::InitStreamPage() LoadServices(false); + ui->twitchAddonDropdown->addItem( + QTStr("Basic.Settings.Stream.TTVAddon.None")); + ui->twitchAddonDropdown->addItem( + QTStr("Basic.Settings.Stream.TTVAddon.BTTV")); + ui->twitchAddonDropdown->addItem( + QTStr("Basic.Settings.Stream.TTVAddon.FFZ")); + ui->twitchAddonDropdown->addItem( + QTStr("Basic.Settings.Stream.TTVAddon.Both")); + connect(ui->service, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateServerList())); connect(ui->service, SIGNAL(currentIndexChanged(int)), this, @@ -98,6 +109,9 @@ void OBSBasicSettings::LoadStream1Settings() bool bw_test = obs_data_get_bool(settings, "bwtest"); ui->bandwidthTestEnable->setChecked(bw_test); + + idx = config_get_int(main->Config(), "Twitch", "AddonChoice"); + ui->twitchAddonDropdown->setCurrentIndex(idx); } UpdateServerList(); @@ -161,6 +175,21 @@ void OBSBasicSettings::SaveStream1Settings() obs_data_set_bool(settings, "bwtest", ui->bandwidthTestEnable->isChecked()); + + if (!!auth && strcmp(auth->service(), "Twitch") == 0) { + bool choiceExists = config_has_user_value( + main->Config(), "Twitch", "AddonChoice"); + int currentChoice = + config_get_int(main->Config(), "Twitch", "AddonChoice"); + int newChoice = ui->twitchAddonDropdown->currentIndex(); + + config_set_int(main->Config(), "Twitch", "AddonChoice", + newChoice); + + if (choiceExists && currentChoice != newChoice) + forceAuthReload = true; + } + obs_data_set_string(settings, "key", QT_TO_UTF8(ui->key->text())); OBSService newService = obs_service_create( @@ -277,6 +306,8 @@ void OBSBasicSettings::on_service_currentIndexChanged(int) ui->disconnectAccount->setVisible(false); ui->bandwidthTestEnable->setVisible(false); + ui->twitchAddonDropdown->setVisible(false); + ui->twitchAddonLabel->setVisible(false); #ifdef BROWSER_AVAILABLE if (cef) { @@ -430,8 +461,11 @@ void OBSBasicSettings::OnOAuthStreamKeyConnected() ui->connectAccount2->setVisible(false); ui->disconnectAccount->setVisible(true); - if (strcmp(a->service(), "Twitch") == 0) + if (strcmp(a->service(), "Twitch") == 0) { ui->bandwidthTestEnable->setVisible(true); + ui->twitchAddonLabel->setVisible(true); + ui->twitchAddonDropdown->setVisible(true); + } } ui->streamStackWidget->setCurrentIndex((int)Section::StreamKey); @@ -494,6 +528,8 @@ void OBSBasicSettings::on_disconnectAccount_clicked() ui->connectAccount2->setVisible(true); ui->disconnectAccount->setVisible(false); ui->bandwidthTestEnable->setVisible(false); + ui->twitchAddonDropdown->setVisible(false); + ui->twitchAddonLabel->setVisible(false); ui->key->setText(""); } diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 5dae7b6ba..9b1273de6 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -337,6 +337,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->customServer, 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); HookWidget(ui->useAuth, CHECK_CHANGED, STREAM1_CHANGED); HookWidget(ui->authUsername, EDIT_CHANGED, STREAM1_CHANGED); HookWidget(ui->authPw, EDIT_CHANGED, STREAM1_CHANGED); @@ -3486,6 +3487,12 @@ void OBSBasicSettings::closeEvent(QCloseEvent *event) { if (Changed() && !QueryChanges()) event->ignore(); + + if (forceAuthReload) { + main->auth->Save(); + main->auth->Load(); + forceAuthReload = false; + } } void OBSBasicSettings::on_theme_activated(int idx) diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index 935581704..7521f70f6 100644 --- a/UI/window-basic-settings.hpp +++ b/UI/window-basic-settings.hpp @@ -115,6 +115,7 @@ private: bool advancedChanged = false; int pageIndex = 0; bool loading = true; + bool forceAuthReload = false; std::string savedTheme; int lastSimpleRecQualityIdx = 0;