diff --git a/imports/NeoChat/Component/Login/Login.qml b/imports/NeoChat/Component/Login/Login.qml index 8194f72da..075ffe194 100644 --- a/imports/NeoChat/Component/Login/Login.qml +++ b/imports/NeoChat/Component/Login/Login.qml @@ -18,16 +18,19 @@ LoginStep { showBackButton: false title: i18nc("@title", "Login") - message: i18n("Enter your Matrix ID") + message: i18n("Welcome to NeoChat!") Component.onCompleted: { LoginHelper.matrixId = "" } + QQC2.Label { + text: "To get started, enter your matrix ID:" + } + Kirigami.FormLayout { QQC2.TextField { id: matrixIdField - Kirigami.FormData.label: i18n("Matrix ID:") placeholderText: "@user:matrix.org" onTextChanged: { if(acceptableInput) { diff --git a/imports/NeoChat/Page/WelcomePage.qml b/imports/NeoChat/Page/WelcomePage.qml index f9a64d078..3988a2c6f 100644 --- a/imports/NeoChat/Page/WelcomePage.qml +++ b/imports/NeoChat/Page/WelcomePage.qml @@ -44,11 +44,40 @@ Kirigami.ScrollablePage { } } + property var showAvatar: LoginHelper.loginAvatar != "" + ColumnLayout { - Kirigami.Icon { - source: "org.kde.neochat" - Layout.fillWidth: true - Layout.preferredHeight: Kirigami.Units.gridUnit * 16 + Item { + Layout.preferredHeight: Kirigami.Units.gridUnit * 10 + Layout.preferredWidth: Kirigami.Units.gridUnit * 8 + Layout.alignment: Qt.AlignHCenter + + ColumnLayout { + anchors.fill: parent + + Kirigami.Icon { + source: "org.kde.neochat" + visible: !welcomePage.showAvatar + Layout.fillHeight: true + Layout.alignment: Qt.AlignHCenter + implicitWidth: height + } + + Kirigami.Avatar { + visible: welcomePage.showAvatar + source: LoginHelper.loginAvatar + name: LoginHelper.loginName + Layout.fillHeight: true + implicitWidth: height + Layout.alignment: Qt.AlignHCenter + } + + Controls.Label { + text: LoginHelper.loginName + font.pointSize: 24 + Layout.alignment: Qt.AlignHCenter + } + } } Controls.Label { Layout.fillWidth: true diff --git a/src/login.cpp b/src/login.cpp index 7d764aef8..eaaf5039d 100644 --- a/src/login.cpp +++ b/src/login.cpp @@ -13,6 +13,7 @@ #include using namespace Quotient; +#include Login::Login(QObject *parent) : QObject(parent) @@ -20,6 +21,16 @@ Login::Login(QObject *parent) init(); } +QUrl Login::loginAvatar() const +{ + return m_loginAvatar; +} + +QString Login::loginName() const +{ + return m_loginName; +} + void Login::init() { m_homeserverReachable = false; @@ -34,6 +45,10 @@ void Login::init() connect(this, &Login::matrixIdChanged, this, [this]() { setHomeserverReachable(false); + m_loginAvatar = QString(); + m_loginName = QString(); + Q_EMIT loginNameChanged(); + Q_EMIT loginAvatarChanged(); if (m_matrixId == "@") { return; @@ -52,6 +67,17 @@ void Login::init() m_supportsSso = m_connection->supportsSso(); m_supportsPassword = m_connection->supportsPasswordAuth(); Q_EMIT loginFlowsChanged(); + + GetUserProfileJob *job = m_connection->callApi(m_matrixId); + connect(job, &BaseJob::result, this, [this, job] { + auto foundAvatar = job->avatarUrl(); + m_loginAvatar = QUrl(QStringLiteral("%1/_matrix/media/r0/download/%2") + .arg(m_connection->homeserver().toString()) + .arg(foundAvatar.authority() + foundAvatar.path())); + m_loginName = job->displayname(); + Q_EMIT loginAvatarChanged(); + Q_EMIT loginNameChanged(); + }); }); }); connect(m_connection, &Connection::connected, this, [this] { diff --git a/src/login.h b/src/login.h index da8d942e3..99601a8ab 100644 --- a/src/login.h +++ b/src/login.h @@ -23,6 +23,8 @@ class Login : public QObject Q_PROPERTY(bool supportsPassword READ supportsPassword NOTIFY loginFlowsChanged STORED false) Q_PROPERTY(QUrl ssoUrl READ ssoUrl NOTIFY ssoUrlChanged) Q_PROPERTY(bool isLoggingIn READ isLoggingIn NOTIFY isLoggingInChanged) + Q_PROPERTY(QUrl loginAvatar READ loginAvatar NOTIFY loginAvatarChanged STORED false) + Q_PROPERTY(QString loginName READ loginName NOTIFY loginNameChanged STORED false) public: explicit Login(QObject *parent = nullptr); @@ -52,7 +54,12 @@ public: Q_INVOKABLE void login(); Q_INVOKABLE void loginWithSso(); + QUrl loginAvatar() const; + QString loginName() const; + Q_SIGNALS: + void loginAvatarChanged(); + void loginNameChanged(); void homeserverReachableChanged(); void testHomeserverFinished(); void matrixIdChanged(); @@ -76,6 +83,8 @@ private: bool m_supportsPassword = false; Quotient::Connection *m_connection = nullptr; QUrl m_ssoUrl; + QUrl m_loginAvatar; bool m_testing = false; bool m_isLoggingIn = false; + QString m_loginName; };