diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp index 9234569be..fce6daeb2 100644 --- a/src/messageeventmodel.cpp +++ b/src/messageeventmodel.cpp @@ -61,6 +61,8 @@ QHash MessageEventModel::roleNames() const roles[VerifiedRole] = "verified"; roles[DisplayNameForInitialsRole] = "displayNameForInitials"; roles[AuthorDisplayNameRole] = "authorDisplayName"; + roles[IsNameChangeRole] = "isNameChange"; + roles[IsAvatarChangeRole] = "isAvatarChange"; return roles; } @@ -853,6 +855,22 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const } } + if (role == IsNameChangeRole) { + auto roomMemberEvent = eventCast(&evt); + if (roomMemberEvent) { + return roomMemberEvent->isRename(); + } + return false; + } + + if (role == IsAvatarChangeRole) { + auto roomMemberEvent = eventCast(&evt); + if (roomMemberEvent) { + return roomMemberEvent->isAvatarUpdate(); + } + return false; + } + return {}; } diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h index 135fe7061..5212c082c 100644 --- a/src/messageeventmodel.h +++ b/src/messageeventmodel.h @@ -68,6 +68,8 @@ public: DisplayNameForInitialsRole, // The displayname for the event's sender; for name change events, the old displayname AuthorDisplayNameRole, + IsNameChangeRole, + IsAvatarChangeRole, LastRole, // Keep this last }; Q_ENUM(EventRoles) diff --git a/src/messagefiltermodel.cpp b/src/messagefiltermodel.cpp index 084062a91..09fa13f61 100644 --- a/src/messagefiltermodel.cpp +++ b/src/messagefiltermodel.cpp @@ -15,6 +15,16 @@ MessageFilterModel::MessageFilterModel(QObject *parent) beginResetModel(); endResetModel(); }); + + connect(NeoChatConfig::self(), &NeoChatConfig::ShowRenameChanged, this, [this] { + beginResetModel(); + endResetModel(); + }); + + connect(NeoChatConfig::self(), &NeoChatConfig::ShowAvatarUpdateChanged, this, [this] { + beginResetModel(); + endResetModel(); + }); } bool MessageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const @@ -22,6 +32,13 @@ bool MessageFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sour const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); const int specialMarks = index.data(MessageEventModel::SpecialMarksRole).toInt(); + if (index.data(MessageEventModel::IsNameChangeRole).toBool() && !NeoChatConfig::self()->showRename()) { + return false; + } + + if (index.data(MessageEventModel::IsAvatarChangeRole).toBool() && !NeoChatConfig::self()->showAvatarUpdate()) { + return false; + } if (specialMarks == EventStatus::Hidden || specialMarks == EventStatus::Replaced) { return false; diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index 0cbb9a5ba..99bfcc3fc 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -518,14 +518,14 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format, return text; } // Part 2: profile changes of joined members - if (e.isRename() && NeoChatConfig::self()->showRename()) { + if (e.isRename()) { if (e.displayName().isEmpty()) { text = i18nc("their refers to a singular user", "cleared their display name"); } else { text = i18nc("their refers to a singular user", "changed their display name to %1", e.displayName().toHtmlEscaped()); } } - if (e.isAvatarUpdate() && NeoChatConfig::self()->showAvatarUpdate()) { + if (e.isAvatarUpdate()) { if (!text.isEmpty()) { text += i18n(" and "); }