From c10d50f88ffda95c17e28ca7336cfc6b845f07b6 Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Mon, 16 Aug 2021 20:21:05 +0200 Subject: [PATCH] Show displayname in chat room messages (group messages if same author in the same day) Fix contact search for display name (clean address from gruu) --- .../chat-room/ChatRoomProxyModel.cpp | 21 +--- .../chat-room/ChatRoomProxyModel.hpp | 1 + linphone-app/src/utils/Utils.cpp | 4 +- .../ui/modules/Linphone/Chat/Chat.qml | 98 ++++++++++++------- .../ui/modules/Linphone/Chat/Message.qml | 3 + 5 files changed, 75 insertions(+), 52 deletions(-) diff --git a/linphone-app/src/components/chat-room/ChatRoomProxyModel.cpp b/linphone-app/src/components/chat-room/ChatRoomProxyModel.cpp index d989d9741..7fe350e0b 100644 --- a/linphone-app/src/components/chat-room/ChatRoomProxyModel.cpp +++ b/linphone-app/src/components/chat-room/ChatRoomProxyModel.cpp @@ -56,7 +56,6 @@ protected: return true; QModelIndex index = sourceModel()->index(sourceRow, 0, QModelIndex()); - const QVariantMap data = index.data().toMap(); auto eventModel = sourceModel()->data(index); @@ -228,21 +227,6 @@ void ChatRoomProxyModel::setFullLocalAddress (const QString &localAddress) { emit fullLocalAddressChanged(mFullLocalAddress); //reload(); } -/* -bool ChatRoomProxyModel::isSecure () const { - return mChatRoomModel ? mChatRoomModel->isSecure() : false; -} - -void ChatRoomProxyModel::setIsSecure (const int &secure) { - mIsSecure = secure; - emit isSecureChanged(mIsSecure); -} -*/ - -/* -bool ChatRoomProxyModel::getIsRemoteComposing () const { - return mChatRoomModel ? mChatRoomModel->getIsRemoteComposing() : false; -}*/ QList ChatRoomProxyModel::getComposers() const{ return (mChatRoomModel?mChatRoomModel->getComposers():QList()); @@ -252,6 +236,11 @@ QString ChatRoomProxyModel::getDisplayNameComposers()const{ return getComposers().join(", "); } +QVariant ChatRoomProxyModel::getAt(int row){ + QModelIndex sourceIndex = mapToSource(this->index(row, 0)); + return sourceModel()->data(sourceIndex); +} + QString ChatRoomProxyModel::getCachedText() const{ return gCachedText; } diff --git a/linphone-app/src/components/chat-room/ChatRoomProxyModel.hpp b/linphone-app/src/components/chat-room/ChatRoomProxyModel.hpp index 00c0ec7a9..c933a3ed4 100644 --- a/linphone-app/src/components/chat-room/ChatRoomProxyModel.hpp +++ b/linphone-app/src/components/chat-room/ChatRoomProxyModel.hpp @@ -50,6 +50,7 @@ public: ChatRoomProxyModel (QObject *parent = Q_NULLPTR); Q_INVOKABLE QString getDisplayNameComposers()const; + Q_INVOKABLE QVariant getAt(int row); Q_INVOKABLE void loadMoreEntries (); Q_INVOKABLE void setEntryTypeFilter (int type); diff --git a/linphone-app/src/utils/Utils.cpp b/linphone-app/src/utils/Utils.cpp index a03e4ddee..205d5e8c4 100644 --- a/linphone-app/src/utils/Utils.cpp +++ b/linphone-app/src/utils/Utils.cpp @@ -463,7 +463,9 @@ void Utils::copyDir(QString from, QString to) { QString Utils::getDisplayName(const std::shared_ptr& address){ QString displayName; if(address){ - QString qtAddress = Utils::coreStringToAppString(address->asString()); + std::shared_ptr cleanAddress = address->clone(); + cleanAddress->clean(); + QString qtAddress = Utils::coreStringToAppString(cleanAddress->asStringUriOnly()); ContactModel * model = CoreManager::getInstance()->getContactsListModel()->findContactModelFromSipAddress(qtAddress); if(model && model->getVcardModel()) displayName = model->getVcardModel()->getUsername(); diff --git a/linphone-app/ui/modules/Linphone/Chat/Chat.qml b/linphone-app/ui/modules/Linphone/Chat/Chat.qml index 7eee6e6b0..8fccbda96 100644 --- a/linphone-app/ui/modules/Linphone/Chat/Chat.qml +++ b/linphone-app/ui/modules/Linphone/Chat/Chat.qml @@ -121,6 +121,8 @@ Rectangle { delegate: Rectangle { id: entry property bool isNotice : $chatEntry.type === ChatRoomModel.NoticeEntry + property bool isCall : $chatEntry.type === ChatRoomModel.CallEntry + property bool isMessage : $chatEntry.type === ChatRoomModel.MessageEntry function isHoverEntry () { return mouseArea.containsMouse @@ -155,41 +157,67 @@ Rectangle { implicitHeight: layout.height width: parent.width + parent.anchors.rightMargin acceptedButtons: Qt.NoButton - - RowLayout { - id: layout - - spacing: 0 - width: entry.width - - // Display time. - Text { - Layout.alignment: Qt.AlignTop - Layout.preferredHeight: ChatStyle.entry.lineHeight - Layout.preferredWidth: ChatStyle.entry.time.width - - color: '#B1B1B1' - font.pointSize: ChatStyle.entry.time.pointSize - - text: $chatEntry.timestamp.toLocaleString( - Qt.locale(App.locale), - 'hh:mm' - ) - - verticalAlignment: Text.AlignVCenter - - TooltipArea { - text: $chatEntry.timestamp.toLocaleString(Qt.locale(App.locale)) - } - visible:!isNotice - } - - // Display content. - Loader { - Layout.fillWidth: true - source: Logic.getComponentFromEntry($chatEntry) - } - } + ColumnLayout{ + id: layout + spacing: 0 + width: entry.width + Text{ + id:authorName + Layout.leftMargin: timeDisplay.width + 10 + Layout.fillWidth: true + text : $chatEntry.fromDisplayName ? $chatEntry.fromDisplayName : '' + property var previousItem : { + if(index >0) + return proxyModel.getAt(index-1) + else + return null + } + + color: '#B1B1B1' + font.pointSize: ChatStyle.entry.time.pointSize + visible: isMessage + && $chatEntry != undefined + && !$chatEntry.isOutgoing + && (!previousItem + || previousItem.fromSipAddress != $chatEntry.fromSipAddress + || (new Date(previousItem.timestamp)).setHours(0, 0, 0, 0) != (new Date($chatEntry.timestamp)).setHours(0, 0, 0, 0) + ) + } + RowLayout { + + spacing: 0 + width: entry.width + + // Display time. + Text { + id:timeDisplay + Layout.alignment: Qt.AlignTop + Layout.preferredHeight: ChatStyle.entry.lineHeight + Layout.preferredWidth: ChatStyle.entry.time.width + + color: '#B1B1B1' + font.pointSize: ChatStyle.entry.time.pointSize + + text: $chatEntry.timestamp.toLocaleString( + Qt.locale(App.locale), + 'hh:mm' + ) + + verticalAlignment: Text.AlignVCenter + + TooltipArea { + text: $chatEntry.timestamp.toLocaleString(Qt.locale(App.locale)) + } + visible:!isNotice + } + + // Display content. + Loader { + Layout.fillWidth: true + source: Logic.getComponentFromEntry($chatEntry) + } + } + } } } diff --git a/linphone-app/ui/modules/Linphone/Chat/Message.qml b/linphone-app/ui/modules/Linphone/Chat/Message.qml index b417ee9b6..092bc0300 100644 --- a/linphone-app/ui/modules/Linphone/Chat/Message.qml +++ b/linphone-app/ui/modules/Linphone/Chat/Message.qml @@ -34,6 +34,7 @@ Item { + (ephemeralTimerRow.visible? message.padding * 4 : message.padding * 2) + (deliveryLayout.visible? deliveryLayout.height : 0) + Rectangle { id: rectangle @@ -73,6 +74,8 @@ Item { } } + + // --------------------------------------------------------------------------- // Message. // ---------------------------------------------------------------------------