diff --git a/frontend/dialogs/OBSAbout.cpp b/frontend/dialogs/OBSAbout.cpp index 951ac7e52dc0e7..d40b229e0f7e55 100644 --- a/frontend/dialogs/OBSAbout.cpp +++ b/frontend/dialogs/OBSAbout.cpp @@ -1,7 +1,7 @@ #include "OBSAbout.hpp" - -#include +#include #include +#include #include @@ -9,6 +9,10 @@ #include "moc_OBSAbout.cpp" +namespace { +std::string patronJson; +} // namespace + using namespace json11; extern bool steam; @@ -61,30 +65,43 @@ OBSAbout::OBSAbout(QWidget *parent) : QDialog(parent), ui(new Ui::OBSAbout) connect(ui->authors, &ClickableLabel::clicked, this, &OBSAbout::ShowAuthors); connect(ui->license, &ClickableLabel::clicked, this, &OBSAbout::ShowLicense); - QPointer about(this); - - OBSBasic *main = OBSBasic::Get(); - if (main->patronJson.empty() && !main->patronJsonThread) { + if (patronJson.empty()) { RemoteTextThread *thread = new RemoteTextThread("https://obsproject.com/patreon/about-box.json", "application/json"); - QObject::connect(thread, &RemoteTextThread::Result, main, &OBSBasic::UpdatePatronJson); - QObject::connect(thread, &RemoteTextThread::Result, this, &OBSAbout::ShowAbout); - main->patronJsonThread.reset(thread); + connect(thread, &RemoteTextThread::Result, this, &OBSAbout::updatePatronJson); + patronJsonThread.reset(thread); thread->start(); } else { ShowAbout(); } } -void OBSAbout::ShowAbout() +OBSAbout::~OBSAbout() +{ + if (patronJsonThread && patronJsonThread->isRunning()) { + patronJsonThread->wait(); + } +} + +void OBSAbout::updatePatronJson(const std::string &text, const std::string &error) { - OBSBasic *main = OBSBasic::Get(); + if (!error.empty()) { + return; + } + + patronJson = text; + + ShowAbout(); +} - if (main->patronJson.empty()) +void OBSAbout::ShowAbout() +{ + if (patronJson.empty()) { return; + } std::string error; - Json json = Json::parse(main->patronJson, error); + Json json = Json::parse(patronJson, error); const Json::array &patrons = json.array_items(); QString text; diff --git a/frontend/dialogs/OBSAbout.hpp b/frontend/dialogs/OBSAbout.hpp index e3ec87c36ec453..34968987151cc4 100644 --- a/frontend/dialogs/OBSAbout.hpp +++ b/frontend/dialogs/OBSAbout.hpp @@ -7,8 +7,12 @@ class OBSAbout : public QDialog { Q_OBJECT +private: + QScopedPointer patronJsonThread; + public: explicit OBSAbout(QWidget *parent = 0); + ~OBSAbout(); std::unique_ptr ui; @@ -16,4 +20,6 @@ private slots: void ShowAbout(); void ShowAuthors(); void ShowLicense(); + + void updatePatronJson(const std::string &text, const std::string &error); }; diff --git a/frontend/widgets/OBSBasic.cpp b/frontend/widgets/OBSBasic.cpp index 7ce72dbce62312..c6677050396696 100644 --- a/frontend/widgets/OBSBasic.cpp +++ b/frontend/widgets/OBSBasic.cpp @@ -1403,9 +1403,6 @@ void OBSBasic::applicationShutdown() noexcept if (updateCheckThread && updateCheckThread->isRunning()) updateCheckThread->wait(); - if (patronJsonThread && patronJsonThread->isRunning()) - patronJsonThread->wait(); - delete screenshotData; delete previewProjectorSource; delete previewProjectorMain; @@ -2108,14 +2105,6 @@ OBSBasic *OBSBasic::Get() return reinterpret_cast(App()->GetMainWindow()); } -void OBSBasic::UpdatePatronJson(const std::string &text, const std::string &error) -{ - if (!error.empty()) - return; - - patronJson = text; -} - void OBSBasic::SetDisplayAffinity(QWindow *window) { if (!SetDisplayAffinitySupported()) diff --git a/frontend/widgets/OBSBasic.hpp b/frontend/widgets/OBSBasic.hpp index 33b7e5a9fe7291..8bc7e1704f113f 100644 --- a/frontend/widgets/OBSBasic.hpp +++ b/frontend/widgets/OBSBasic.hpp @@ -199,7 +199,6 @@ class OBSBasic : public OBSMainWindow { Q_PROPERTY(QIcon audioProcessOutputIcon READ GetAudioProcessOutputIcon WRITE SetAudioProcessOutputIcon DESIGNABLE true) - friend class OBSAbout; friend class OBSBasicPreview; friend class OBSBasicStatusBar; friend class OBSBasicSourceSelect; @@ -254,9 +253,6 @@ class OBSBasic : public OBSMainWindow { ConfigFile activeConfiguration; - QScopedPointer patronJsonThread; - std::string patronJson; - std::unique_ptr ui; void OnEvent(enum obs_frontend_event event); @@ -284,7 +280,6 @@ class OBSBasic : public OBSMainWindow { public slots: void close(); - void UpdatePatronJson(const std::string &text, const std::string &error); void UpdateEditMenu(); void applicationShutdown() noexcept; void toggleMixerLayout();