@@ -433,28 +433,39 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const
433433 return m_currentRoom->prettyPrint (e.plainBody ());
434434 }
435435 , [this ] (const RoomMemberEvent& e) {
436+ // clang-format on
436437 // FIXME: Rewind to the name that was at the time of this event
437438 const auto subjectName =
438439 m_currentRoom->safeMemberName (e.userId ()).toHtmlEscaped ();
439440 // The below code assumes senderName output in AuthorRole
440441 switch ( e.membership () )
441442 {
442443 case MembershipType::Invite:
443- if (e.repeatsState ())
444- return tr (" reinvited %1 to the room" ).arg (subjectName);
444+ if (e.repeatsState ()) {
445+ auto text =
446+ tr (" reinvited %1 to the room" ).arg (subjectName);
447+ if (!e.reason ().isEmpty ())
448+ text += " : " + e.reason ().toHtmlEscaped ();
449+ return text;
450+ }
445451 Q_FALLTHROUGH ();
446452 case MembershipType::Join:
447453 {
454+ QString text {};
455+ // Part 1: invites and joins
448456 if (e.repeatsState ())
449- return tr (" joined the room (repeated)" );
450- if (!e.prevContent () ||
451- e.membership () != e.prevContent ()->membership )
452- {
453- return e.membership () == MembershipType::Invite
457+ text = tr (" joined the room (repeated)" );
458+ else if (e.changesMembership ())
459+ text =
460+ e.membership () == MembershipType::Invite
454461 ? tr (" invited %1 to the room" ).arg (subjectName)
455462 : tr (" joined the room" );
463+ if (!text.isEmpty ()) {
464+ if (!e.reason ().isEmpty ())
465+ text += " : " + e.reason ().toHtmlEscaped ();
466+ return text;
456467 }
457- QString text {};
468+ // Part 2: profile changes of joined members
458469 if (e.isRename ())
459470 {
460471 if (e.displayName ().isEmpty ())
@@ -491,24 +502,21 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const
491502 : tr (" self-unbanned" );
492503 }
493504 return (e.senderId () != e.userId ())
494- ? tr (" has put %1 out of the room: %2" )
495- .arg (subjectName,
496- e.contentJson ()[" reason" _ls]
497- .toString ().toHtmlEscaped ())
505+ ? tr (" kicked %1 from the room: %2" )
506+ .arg (subjectName, e.reason ().toHtmlEscaped ())
498507 : tr (" left the room" );
499508 case MembershipType::Ban:
500509 return (e.senderId () != e.userId ())
501510 ? tr (" banned %1 from the room: %2" )
502- .arg (subjectName,
503- e.contentJson ()[" reason" _ls]
504- .toString ().toHtmlEscaped ())
511+ .arg (subjectName, e.reason ().toHtmlEscaped ())
505512 : tr (" self-banned from the room" );
506513 case MembershipType::Knock:
507514 return tr (" knocked" );
508515 default :
509516 ;
510517 }
511518 return tr (" made something unknown" );
519+ // clang-format off
512520 }
513521 , [] (const RoomAliasesEvent& e) {
514522 return tr (" has set room aliases on server %1 to: %2" )
0 commit comments