diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index e5032fb2..5b850999 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -67,6 +67,7 @@ Q_DECLARE_METATYPE(mtx::events::collections::TimelineEvents) Q_DECLARE_METATYPE(std::vector) Q_DECLARE_METATYPE(std::vector) Q_DECLARE_METATYPE(mtx::responses::PublicRoom) +Q_DECLARE_METATYPE(mtx::responses::Profile) MainWindow *MainWindow::instance_ = nullptr; @@ -145,6 +146,7 @@ MainWindow::registerQmlTypes() qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); + qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType>(); diff --git a/src/ui/UserProfile.cpp b/src/ui/UserProfile.cpp index d1559112..bd02b308 100644 --- a/src/ui/UserProfile.cpp +++ b/src/ui/UserProfile.cpp @@ -487,17 +487,27 @@ UserProfile::isLoading() const void UserProfile::getGlobalProfileData() { - http::client()->get_profile( - userid_.toStdString(), [this](const mtx::responses::Profile &res, mtx::http::RequestErr err) { - if (err) { - nhlog::net()->warn("failed to retrieve profile info for {}", userid_.toStdString()); - return; - } + auto profProx = std::make_shared(); + connect(profProx.get(), + &UserProfileFetchProxy::profileFetched, + this, + [this](const mtx::responses::Profile &res) { + emit globalUsernameRetrieved(QString::fromStdString(res.display_name)); + globalAvatarUrl = QString::fromStdString(res.avatar_url); + emit avatarUrlChanged(); + }); - emit globalUsernameRetrieved(QString::fromStdString(res.display_name)); - globalAvatarUrl = QString::fromStdString(res.avatar_url); - emit avatarUrlChanged(); - }); + http::client()->get_profile(userid_.toStdString(), + [prox = std::move(profProx), user = userid_.toStdString()]( + const mtx::responses::Profile &res, mtx::http::RequestErr err) { + if (err) { + nhlog::net()->warn("failed to retrieve profile info for {}", + user); + return; + } + + emit prox->profileFetched(res); + }); } void diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h index 4652a72e..0f94914d 100644 --- a/src/ui/UserProfile.h +++ b/src/ui/UserProfile.h @@ -32,6 +32,19 @@ Q_ENUM_NS(Status) class DeviceVerificationFlow; class TimelineViewManager; +class UserProfileFetchProxy : public QObject +{ + Q_OBJECT + +public: + UserProfileFetchProxy(QObject *p = nullptr) + : QObject(p) + {} + +signals: + void profileFetched(mtx::responses::Profile); +}; + class DeviceInfo { public: