use ruma::{
RoomId,
events::{
SyncStateEvent,
room::member::{MembershipState, RoomMemberEventContent},
},
};
use super::Context;
pub fn upsert_or_delete(
context: &mut Context,
room_id: &RoomId,
event: &SyncStateEvent<RoomMemberEventContent>,
) {
if event.state_key() == event.sender() && *event.membership() != MembershipState::Leave {
context
.state_changes
.profiles
.entry(room_id.to_owned())
.or_default()
.insert(event.sender().to_owned(), event.into());
}
if matches!(*event.membership(), MembershipState::Invite | MembershipState::Ban) {
context
.state_changes
.profiles_to_delete
.entry(room_id.to_owned())
.or_default()
.push(event.state_key().clone());
if let Some(room_profiles) = context.state_changes.profiles.get_mut(room_id) {
room_profiles.remove(event.state_key());
}
}
}