diff --git a/src/neochatconfig.kcfg b/src/neochatconfig.kcfg
index c427e4017..57cc96074 100644
--- a/src/neochatconfig.kcfg
+++ b/src/neochatconfig.kcfg
@@ -32,6 +32,14 @@
true
+
+
+ true
+
+
+
+ true
+
diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp
index 9d022ae3a..65e282929 100644
--- a/src/neochatroom.cpp
+++ b/src/neochatroom.cpp
@@ -356,33 +356,44 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
switch (e.membership()) {
case MembershipType::Invite:
if (e.repeatsState()) {
- return i18n("reinvited %1 to the room", subjectName);
+ auto text = i18n("reinvited %1 to the room", subjectName);
+ if (!e.reason().isEmpty()) {
+ text += i18nc("Optional reason for an invitation", ": %1") + e.reason().toHtmlEscaped();
+ }
+ return text;
}
- break;
+ Q_FALLTHROUGH();
case MembershipType::Join: {
+ QString text {};
+ // Part 1: invites and joins
if (e.repeatsState()) {
- return i18n("joined the room (repeated)");
+ text = i18n("joined the room (repeated)");
+ } else if (e.changesMembership()) {
+ text = e.membership() == MembershipType::Invite
+ ? i18n("invited %1 to the room", subjectName)
+ : i18n("joined the room");
}
- if (!e.prevContent() || e.membership() != e.prevContent()->membership) {
- return e.membership() == MembershipType::Invite ? i18n("invited %1 to the room", subjectName) : i18n("joined the room");
+ if (!text.isEmpty()) {
+ if (!e.reason().isEmpty()) {
+ text += i18n(": %1", e.reason().toHtmlEscaped());
+ }
+ return text;
}
- QString text{};
- if (e.isRename()) {
- if (!e.newDisplayName().has_value()) {
+ // Part 2: profile changes of joined members
+ if (e.isRename() && NeoChatConfig::self()->showRename()) {
+ if (e.newDisplayName().has_value()) {
text = i18n("cleared their display name");
} else {
text = i18n("changed their display name to %1", e.newDisplayName()->toHtmlEscaped());
}
}
- if (e.isAvatarUpdate()) {
+ if (e.isAvatarUpdate() && NeoChatConfig::self()->showAvatarUpdate()) {
if (!text.isEmpty()) {
text += i18n(" and ");
}
if (!e.newAvatarUrl().has_value()) {
text += i18n("cleared their avatar");
} else if (e.prevContent()->avatarUrl) {
- text += i18n("set an avatar");
- } else {
text += i18n("updated their avatar");
}
}