diff --git a/UI/auth-mixer.cpp b/UI/auth-mixer.cpp
index c30cbcd37..b379e14e9 100644
--- a/UI/auth-mixer.cpp
+++ b/UI/auth-mixer.cpp
@@ -177,6 +177,11 @@ bool MixerAuth::LoadInternal()
return OAuthStreamKey::LoadInternal();
}
+static const char *elixr_script = "\
+var elixr = document.createElement('script');\
+elixr.setAttribute('src','https://api.mixrelixr.com/scripts/elixr-emotes-embedded-chat.bundle.js');\
+document.head.appendChild(elixr);";
+
void MixerAuth::LoadUI()
{
if (!cef)
@@ -189,6 +194,7 @@ void MixerAuth::LoadUI()
OBSBasic::InitBrowserPanelSafeBlock();
OBSBasic *main = OBSBasic::Get();
+ std::string script = "";
std::string url;
url += "https://mixer.com/embed/chat/";
url += id;
@@ -206,6 +212,15 @@ void MixerAuth::LoadUI()
QCefWidget *browser = cef->create_widget(nullptr, url, panel_cookies);
chat->SetWidget(browser);
+ const int mxAddonChoice =
+ config_get_int(main->Config(), service(), "AddonChoice");
+ if (mxAddonChoice) {
+ if (mxAddonChoice & 0x1)
+ script += elixr_script;
+ }
+
+ browser->setStartupScript(script);
+
main->addDockWidget(Qt::RightDockWidgetArea, chat.data());
chatMenu.reset(main->AddDockWidget(chat.data()));
diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index fe4b24520..eef5ba45a 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -687,6 +687,9 @@ 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.Settings.Stream.MixerAddon="Mixer Chat Add-Ons"
+Basic.Settings.Stream.MixerAddon.None="None"
+Basic.Settings.Stream.MixerAddon.MEE="MixrElixr Emotes"
Basic.Settings.Stream.MissingSettingAlert="Missing Stream Setup"
Basic.Settings.Stream.StreamSettingsWarning="Open Settings"
Basic.Settings.Stream.MissingUrlAndApiKey="URL and Stream Key are missing.\n\nOpen settings to enter the URL and Stream Key in the 'stream' tab."
diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index e50cb5be0..00091630d 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -151,8 +151,8 @@
0
0
- 806
- 1254
+ 803
+ 1026
@@ -1140,7 +1140,7 @@
- -
+
-
Basic.Settings.Stream.Custom.Username
@@ -1150,10 +1150,10 @@
- -
+
-
- -
+
-
Basic.Settings.Stream.Custom.Password
@@ -1163,7 +1163,7 @@
- -
+
-
@@ -1208,6 +1208,19 @@
+ -
+
+
+ Basic.Settings.Stream.MixerAddon
+
+
+ mixerAddonDropdown
+
+
+
+ -
+
+
@@ -1244,8 +1257,8 @@
0
0
- 813
- 761
+ 603
+ 631
@@ -3753,8 +3766,8 @@
0
0
- 767
- 582
+ 555
+ 469
@@ -4609,8 +4622,8 @@
0
0
- 791
- 970
+ 596
+ 781
diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp
index b5b3068f6..e79d404fb 100644
--- a/UI/window-basic-settings-stream.cpp
+++ b/UI/window-basic-settings-stream.cpp
@@ -41,6 +41,8 @@ void OBSBasicSettings::InitStreamPage()
ui->bandwidthTestEnable->setVisible(false);
ui->twitchAddonDropdown->setVisible(false);
ui->twitchAddonLabel->setVisible(false);
+ ui->mixerAddonDropdown->setVisible(false);
+ ui->mixerAddonLabel->setVisible(false);
int vertSpacing = ui->topStreamLayout->verticalSpacing();
@@ -67,6 +69,11 @@ void OBSBasicSettings::InitStreamPage()
ui->twitchAddonDropdown->addItem(
QTStr("Basic.Settings.Stream.TTVAddon.Both"));
+ ui->mixerAddonDropdown->addItem(
+ QTStr("Basic.Settings.Stream.MixerAddon.None"));
+ ui->mixerAddonDropdown->addItem(
+ QTStr("Basic.Settings.Stream.MixerAddon.MEE"));
+
connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
SLOT(UpdateServerList()));
connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
@@ -112,6 +119,9 @@ void OBSBasicSettings::LoadStream1Settings()
idx = config_get_int(main->Config(), "Twitch", "AddonChoice");
ui->twitchAddonDropdown->setCurrentIndex(idx);
+
+ idx = config_get_int(main->Config(), "Mixer", "AddonChoice");
+ ui->mixerAddonDropdown->setCurrentIndex(idx);
}
UpdateServerList();
@@ -189,6 +199,19 @@ void OBSBasicSettings::SaveStream1Settings()
if (choiceExists && currentChoice != newChoice)
forceAuthReload = true;
}
+ if (!!auth && strcmp(auth->service(), "Mixer") == 0) {
+ bool choiceExists = config_has_user_value(
+ main->Config(), "Mixer", "AddonChoice");
+ int currentChoice =
+ config_get_int(main->Config(), "Mixer", "AddonChoice");
+ int newChoice = ui->mixerAddonDropdown->currentIndex();
+
+ config_set_int(main->Config(), "Mixer", "AddonChoice",
+ newChoice);
+
+ if (choiceExists && currentChoice != newChoice)
+ forceAuthReload = true;
+ }
obs_data_set_string(settings, "key", QT_TO_UTF8(ui->key->text()));
@@ -309,6 +332,8 @@ void OBSBasicSettings::on_service_currentIndexChanged(int)
ui->bandwidthTestEnable->setVisible(false);
ui->twitchAddonDropdown->setVisible(false);
ui->twitchAddonLabel->setVisible(false);
+ ui->mixerAddonDropdown->setVisible(false);
+ ui->mixerAddonLabel->setVisible(false);
#ifdef BROWSER_AVAILABLE
if (cef) {
@@ -467,6 +492,10 @@ void OBSBasicSettings::OnOAuthStreamKeyConnected()
ui->twitchAddonLabel->setVisible(true);
ui->twitchAddonDropdown->setVisible(true);
}
+ if (strcmp(a->service(), "Mixer") == 0) {
+ ui->mixerAddonLabel->setVisible(true);
+ ui->mixerAddonDropdown->setVisible(true);
+ }
}
ui->streamStackWidget->setCurrentIndex((int)Section::StreamKey);
diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp
index 6ad08a9d6..77cea6218 100644
--- a/UI/window-basic-settings.cpp
+++ b/UI/window-basic-settings.cpp
@@ -371,6 +371,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->key, EDIT_CHANGED, STREAM1_CHANGED);
HookWidget(ui->bandwidthTestEnable, CHECK_CHANGED, STREAM1_CHANGED);
HookWidget(ui->twitchAddonDropdown, COMBO_CHANGED, STREAM1_CHANGED);
+ HookWidget(ui->mixerAddonDropdown, 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);