UI: Fix YouTubeAppDock crash

Apparently the YouTube app dock thing didn't take into consideration the
fact that the user may have the browser source available, but may not
have browser docks available (via the `cef` global). This is because
certain system configurations do not support browser widgets, such as
Wayland on Linux.

(Lain note: There's multiple things I'm unhappy about here. I'm mostly
going to blame myself for multiple reasons.)
This commit is contained in:
Lain 2023-08-03 18:21:01 -07:00
parent 9d2715fe72
commit 0c6fa0a2ba
5 changed files with 34 additions and 13 deletions

View file

@ -8493,6 +8493,9 @@ YouTubeAppDock *OBSBasic::GetYouTubeAppDock()
void OBSBasic::NewYouTubeAppDock()
{
if (!cef)
return;
if (youtubeAppDock)
delete youtubeAppDock;
youtubeAppDock = new YouTubeAppDock();
@ -8500,6 +8503,9 @@ void OBSBasic::NewYouTubeAppDock()
void OBSBasic::DeleteYouTubeAppDock()
{
if (!cef)
return;
if (youtubeAppDock)
delete youtubeAppDock;
youtubeAppDock = nullptr;

View file

@ -771,7 +771,7 @@ void OBSBasicSettings::on_connectAccount_clicked()
if (!!auth) {
OnAuthConnected();
#ifdef YOUTUBE_ENABLED
if (IsYouTubeService(service)) {
if (cef && IsYouTubeService(service)) {
if (!main->GetYouTubeAppDock()) {
main->NewYouTubeAppDock();
}
@ -822,7 +822,7 @@ void OBSBasicSettings::on_disconnectAccount_clicked()
ui->connectedAccountText->setVisible(false);
#ifdef YOUTUBE_ENABLED
if (IsYouTubeService(service)) {
if (cef && IsYouTubeService(service)) {
if (!main->GetYouTubeAppDock()) {
main->NewYouTubeAppDock();
}

View file

@ -4245,18 +4245,9 @@ void OBSBasicSettings::on_listWidget_itemSelectionChanged()
pageIndex = row;
}
void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
void OBSBasicSettings::UpdateYouTubeAppDockSettings()
{
QDialogButtonBox::ButtonRole val = ui->buttonBox->buttonRole(button);
if (val == QDialogButtonBox::ApplyRole ||
val == QDialogButtonBox::AcceptRole) {
if (!QueryAllowedToClose())
return;
SaveSettings();
#ifdef YOUTUBE_ENABLED
if (cef) {
std::string service = ui->service->currentText().toStdString();
if (IsYouTubeService(service)) {
if (!main->GetYouTubeAppDock()) {
@ -4270,6 +4261,22 @@ void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
}
main->DeleteYouTubeAppDock();
}
}
}
void OBSBasicSettings::on_buttonBox_clicked(QAbstractButton *button)
{
QDialogButtonBox::ButtonRole val = ui->buttonBox->buttonRole(button);
if (val == QDialogButtonBox::ApplyRole ||
val == QDialogButtonBox::AcceptRole) {
if (!QueryAllowedToClose())
return;
SaveSettings();
#ifdef YOUTUBE_ENABLED
UpdateYouTubeAppDockSettings();
#endif
ClearChanged();
}

View file

@ -350,6 +350,8 @@ private:
bool AskIfCanCloseSettings();
void UpdateYouTubeAppDockSettings();
QIcon generalIcon;
QIcon streamIcon;
QIcon outputIcon;

View file

@ -50,6 +50,9 @@ YouTubeAppDock::~YouTubeAppDock()
bool YouTubeAppDock::IsYTServiceSelected()
{
if (!cef)
return false;
obs_service_t *service_obj = OBSBasic::Get()->GetService();
OBSDataAutoRelease settings = obs_service_get_settings(service_obj);
const char *service = obs_data_get_string(settings, "service");
@ -430,6 +433,9 @@ YoutubeApiWrappers *YouTubeAppDock::GetYTApi()
void YouTubeAppDock::CleanupYouTubeUrls()
{
if (!cef)
return;
static constexpr const char *YOUTUBE_VIDEO_URL =
"://studio.youtube.com/video/";
// remove legacy YouTube Browser Docks (once)