From b82842876ccb743c95aaa3909b442f2e57ba9035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= <sebastien.blin@savoirfairelinux.com> Date: Thu, 16 Mar 2023 16:13:53 -0400 Subject: [PATCH] swarmdetails: add "Contact details" option in members list This allow to easily get URI + QRCode Change-Id: If986b42e46c074971c7467de4d7446d2c8d3a865 GitLab: #955 --- .../SwarmParticipantContextMenu.qml | 17 +++++++++++++++ src/app/mainview/components/UserProfile.qml | 7 ++++--- src/app/qrimageprovider.h | 2 ++ src/app/utilsadapter.cpp | 21 +++++++++++++++++++ src/app/utilsadapter.h | 2 ++ 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/app/mainview/components/SwarmParticipantContextMenu.qml b/src/app/mainview/components/SwarmParticipantContextMenu.qml index f30526af0..e7258f7ec 100644 --- a/src/app/mainview/components/SwarmParticipantContextMenu.qml +++ b/src/app/mainview/components/SwarmParticipantContextMenu.qml @@ -86,6 +86,23 @@ ContextMenuAutoLoader { MessagesAdapter.removeConversationMember(conversationId, participantUri) } } + }, + GeneralMenuItem { + id: contactDetails + + itemName: JamiStrings.contactDetails + iconSource: JamiResources.person_24dp_svg + onClicked: { + viewCoordinator.presentDialog( + appWindow, + "mainview/components/UserProfile.qml", + { + aliasText: UtilsAdapter.getBestNameForUri(CurrentAccount.id, participantUri), + registeredNameText: UtilsAdapter.getBestIdForUri(CurrentAccount.id, participantUri), + idText: participantUri, + convId: UtilsAdapter.getConvIdForUri(CurrentAccount.id, participantUri) + }) + } } ] diff --git a/src/app/mainview/components/UserProfile.qml b/src/app/mainview/components/UserProfile.qml index b989dc5a1..77069a637 100644 --- a/src/app/mainview/components/UserProfile.qml +++ b/src/app/mainview/components/UserProfile.qml @@ -56,15 +56,16 @@ BaseModalDialog { rowSpacing: 16 columnSpacing: 24 - ConversationAvatar { + Avatar { id: contactImage Layout.alignment: Qt.AlignRight Layout.preferredWidth: preferredImgSize Layout.preferredHeight: preferredImgSize - imageId: convId + imageId: convId !== "" ? convId : idText showPresenceIndicator: false + mode: convId !== "" ? Avatar.Mode.Conversation : Avatar.Mode.Contact } // Visible when user alias is not empty and not equal to id. @@ -193,7 +194,7 @@ BaseModalDialog { source: convId !== "" ? "image://qrImage/contact_" + convId : - "" + "image://qrImage/contact_" + idText } MaterialButton { diff --git a/src/app/qrimageprovider.h b/src/app/qrimageprovider.h index 2fda91329..eba496eb0 100644 --- a/src/app/qrimageprovider.h +++ b/src/app/qrimageprovider.h @@ -52,6 +52,8 @@ public: // For contact_xxx, xxx is "" initially try { const auto& convInfo = lrcInstance_->getConversationFromConvUid(list[1]); + if (convInfo.uid.isEmpty()) + return {QrType::Contact, list[1]}; if (convInfo.mode == conversation::Mode::ONE_TO_ONE || convInfo.mode == conversation::Mode::NON_SWARM) { auto peerUri = lrcInstance_->getCurrentAccountInfo() diff --git a/src/app/utilsadapter.cpp b/src/app/utilsadapter.cpp index 8adc0ba21..de6680331 100644 --- a/src/app/utilsadapter.cpp +++ b/src/app/utilsadapter.cpp @@ -194,6 +194,27 @@ UtilsAdapter::getBestNameForUri(const QString& accountId, const QString& uri) return lrcInstance_->getAccountInfo(accountId).contactModel->bestNameForContact(uri); } +QString +UtilsAdapter::getBestIdForUri(const QString& accountId, const QString& uri) +{ + return lrcInstance_->getAccountInfo(accountId).contactModel->bestIdForContact(uri); +} + +QString +UtilsAdapter::getConvIdForUri(const QString& accountId, const QString& uri) +{ + try { + auto* convModel = lrcInstance_->getAccountInfo(accountId).conversationModel.get(); + auto convInfo = convModel->getConversationForPeerUri(uri); + if (!convInfo) + return {}; + return convInfo->get().uid; + } catch (const std::out_of_range& e) { + qDebug() << e.what(); + return ""; + } +} + const QString UtilsAdapter::getPeerUri(const QString& accountId, const QString& uid) { diff --git a/src/app/utilsadapter.h b/src/app/utilsadapter.h index b7e79e822..496a136b7 100644 --- a/src/app/utilsadapter.h +++ b/src/app/utilsadapter.h @@ -92,6 +92,8 @@ public: Q_INVOKABLE void setConversationFilter(const QString& filter); Q_INVOKABLE const QString getBestName(const QString& accountId, const QString& uid); Q_INVOKABLE QString getBestNameForUri(const QString& accountId, const QString& uri); + Q_INVOKABLE QString getBestIdForUri(const QString& accountId, const QString& uri); + Q_INVOKABLE QString getConvIdForUri(const QString& accountId, const QString& uri); Q_INVOKABLE const QString getPeerUri(const QString& accountId, const QString& uid); Q_INVOKABLE QString getBestId(const QString& accountId); Q_INVOKABLE const QString getBestId(const QString& accountId, const QString& uid); -- GitLab