obs-studio/UI/auth-youtube.hpp
Ihor Kalnytskyi 08f5a7bd4d UI: Fix crash in YoutubeAuth
YoutubeAuth::chat is a raw pointer that is uninitialized. Most of the
time it doesn't matter, since the object it points to is created at the
application start. However, in case of Wayland (Linux), CEF is not
initialized (because it's not supported) and the chat object will never
get created.

This patch fixes crash on Wayland by initializing `chat` to `nullptr`.

Co-authored-by: Roman Podoliaka <roman.podoliaka@gmail.com>
2023-08-25 19:10:06 -04:00

67 lines
1.5 KiB
C++

#pragma once
#include <QObject>
#include <QString>
#include <random>
#include <string>
#include "auth-oauth.hpp"
#ifdef BROWSER_AVAILABLE
#include "window-dock-browser.hpp"
#include "lineedit-autoresize.hpp"
#include <QHBoxLayout>
class YoutubeChatDock : public BrowserDock {
Q_OBJECT
private:
std::string apiChatId;
LineEditAutoResize *lineEdit;
QPushButton *sendButton;
QHBoxLayout *chatLayout;
public:
inline YoutubeChatDock(const QString &title) : BrowserDock(title) {}
void SetWidget(QCefWidget *widget_);
void SetApiChatId(const std::string &id);
private slots:
void SendChatMessage();
void ShowErrorMessage(const QString &error);
void EnableChatInput();
};
#endif
inline const std::vector<Auth::Def> youtubeServices = {
{"YouTube - RTMP", Auth::Type::OAuth_LinkedAccount, true, true},
{"YouTube - RTMPS", Auth::Type::OAuth_LinkedAccount, true, true},
{"YouTube - HLS", Auth::Type::OAuth_LinkedAccount, true, true}};
class YoutubeAuth : public OAuthStreamKey {
Q_OBJECT
bool uiLoaded = false;
std::string section;
#ifdef BROWSER_AVAILABLE
YoutubeChatDock *chat = nullptr;
#endif
virtual bool RetryLogin() override;
virtual void SaveInternal() override;
virtual bool LoadInternal() override;
virtual void LoadUI() override;
QString GenerateState();
public:
YoutubeAuth(const Def &d);
~YoutubeAuth();
void SetChatId(const QString &chat_id, const std::string &api_chat_id);
void ResetChat();
static std::shared_ptr<Auth> Login(QWidget *parent,
const std::string &service);
};