aboutsummaryrefslogtreecommitdiff
path: root/lib/user.cpp
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2019-03-29 13:26:36 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2019-03-30 15:38:56 +0900
commit460aa0350c22312829d3e2a3d8556221b3f89173 (patch)
tree8e02863e93cd07644a9558a1b8341b436fcc7265 /lib/user.cpp
parent3d13e32530990569a418449c86d9848fd71490e4 (diff)
downloadlibquotient-460aa0350c22312829d3e2a3d8556221b3f89173.tar.gz
libquotient-460aa0350c22312829d3e2a3d8556221b3f89173.zip
Room::processStateEvent, User: take the previous membership state from oldStateEvent
memberJoinState() just happens to return the not-yet-updated state, making its use around state changes very sensitive to moving things around. The event's own prevContent is unsigned, therefore untrusted.
Diffstat (limited to 'lib/user.cpp')
-rw-r--r--lib/user.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/user.cpp b/lib/user.cpp
index 93cfbffd..c373a067 100644
--- a/lib/user.cpp
+++ b/lib/user.cpp
@@ -379,19 +379,18 @@ QUrl User::avatarUrl(const Room* room) const
return avatarObject(room).url();
}
-void User::processEvent(const RoomMemberEvent& event, const Room* room)
+void User::processEvent(const RoomMemberEvent& event, const Room* room,
+ bool firstMention)
{
Q_ASSERT(room);
+
+ if (firstMention)
+ ++d->totalRooms;
+
if (event.membership() != MembershipType::Invite &&
event.membership() != MembershipType::Join)
return;
- auto aboutToEnter = room->memberJoinState(this) == JoinState::Leave &&
- (event.membership() == MembershipType::Join ||
- event.membership() == MembershipType::Invite);
- if (aboutToEnter)
- ++d->totalRooms;
-
auto newName = event.displayName();
// `bridged` value uses the same notification signal as the name;
// it is assumed that first setting of the bridge occurs together with