From a9c80b90f65621a2b5b72d65ff2865c5c92be774 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Sun, 23 Oct 2022 15:55:39 +0200 Subject: [PATCH] Show old display name for name change events BUG: 457664 --- .../NeoChat/Component/Timeline/StateDelegate.qml | 2 +- src/messageeventmodel.cpp | 14 ++++++++++++++ src/messageeventmodel.h | 3 ++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/imports/NeoChat/Component/Timeline/StateDelegate.qml b/imports/NeoChat/Component/Timeline/StateDelegate.qml index f54c3a92b..be845b353 100644 --- a/imports/NeoChat/Component/Timeline/StateDelegate.qml +++ b/imports/NeoChat/Component/Timeline/StateDelegate.qml @@ -96,7 +96,7 @@ Control { Layout.preferredHeight: icon.height wrapMode: Text.WordWrap textFormat: Text.RichText - text: `${currentRoom.htmlSafeMemberName(author.id)} ${aggregateDisplay}` + text: `${model.authorDisplayName} ${aggregateDisplay}` onLinkActivated: userDetailDialog.createObject(ApplicationWindow.overlay, {room: currentRoom, user: author.object, displayName: author.displayName, avatarMediaId: author.avatarMediaId, avatarUrl: author.avatarUrl}).open() } } diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp index b73b9c6b2..6f5234834 100644 --- a/src/messageeventmodel.cpp +++ b/src/messageeventmodel.cpp @@ -60,6 +60,7 @@ QHash MessageEventModel::roleNames() const roles[MediaUrlRole] = "mediaUrl"; roles[VerifiedRole] = "verified"; roles[DisplayNameForInitialsRole] = "displayNameForInitials"; + roles[AuthorDisplayNameRole] = "authorDisplayName"; return roles; } @@ -840,6 +841,19 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const return user->displayname(m_currentRoom).remove(QStringLiteral(" (%1)").arg(user->id())); } + if (role == AuthorDisplayNameRole) { + if (!evt.unsignedJson()["prev_content"]["displayname"].isNull()) { + auto previousDisplayName = evt.unsignedJson()["prev_content"]["displayname"].toString().toHtmlEscaped(); + if (previousDisplayName.isEmpty()) { + previousDisplayName = evt.senderId(); + } + return previousDisplayName; + } else { + auto author = static_cast(isPending ? m_currentRoom->localUser() : m_currentRoom->user(evt.senderId())); + m_currentRoom->htmlSafeMemberName(author->id()); + } + } + return {}; } diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h index b371ffad9..387c6ce83 100644 --- a/src/messageeventmodel.h +++ b/src/messageeventmodel.h @@ -48,9 +48,10 @@ public: EventResolvedTypeRole, AuthorIdRole, VerifiedRole, - // Sender's displayname, always without the matrix id DisplayNameForInitialsRole, + // The displayname for the event's sender; for name change events, the old displayname + AuthorDisplayNameRole, LastRole, // Keep this last }; Q_ENUM(EventRoles)