DRY the membership logging a bit.

master
Denis Kasak 2020-07-09 15:09:55 +02:00
parent a8f24da3ba
commit 4134ba969a
1 changed files with 62 additions and 59 deletions

View File

@ -626,76 +626,37 @@ impl Room {
};
if state_event && !self.member_is_tracked(&target_user) {
debug!(
"handle_membership: User {user_id} is {state} the room {room_id} ({room_name})",
user_id = target_user,
state = event.content.membership.describe(),
room_id = self.room_id,
room_name = self.display_name(),
);
match event.content.membership {
Join => {
debug!(
"handle_membership: User {} is now a member of the room {} ({})",
event.state_key,
self.room_id,
self.display_name(),
);
self.add_member(&target_user, event)
}
Invite => {
debug!(
"handle_membership: User {} is now invited to the room {} ({})",
event.state_key,
self.room_id,
self.display_name(),
);
self.add_member(&target_user, event)
}
Join | Invite => self.add_member(&target_user, event),
// We are not interested in tracking past members for now
_ => (false, HashMap::new()),
}
} else {
match event.membership_change() {
Invited => {
debug!(
"handle_membership: User {} got invited to the room {} ({})",
event.state_key,
self.room_id,
self.display_name(),
);
let change = event.membership_change();
self.add_member(&target_user, event)
}
Joined => {
debug!(
"handle_membership: User {} joins the room {} ({})",
event.state_key,
self.room_id,
self.display_name(),
);
debug!(
"handle_membership: User {user_id} {action} the room {room_id} ({room_name})",
user_id = target_user,
action = change.describe(),
room_id = self.room_id,
room_name = self.display_name(),
);
self.add_member(&target_user, event)
}
match change {
Invited | Joined => self.add_member(&target_user, event),
Kicked | Banned | KickedAndBanned | InvitationRejected | Left => {
debug!(
"handle_membership: User {} exiting room {} ({}) (leaving, kicked, banned or invitation rejected)",
event.state_key,
self.room_id,
self.display_name(),
);
self.remove_member(&target_user, event)
}
ProfileChanged => {
debug!(
"handle_membership: Profile changed for user {} in room {} ({}) (displayname={:?}, avatar={:?}",
event.state_key,
self.room_id,
self.display_name(),
event.content.displayname,
event.content.avatar_url
);
self.update_member_profile(&target_user, event)
}
ProfileChanged => self.update_member_profile(&target_user, event),
// Not interested in other events.
_ => (false, HashMap::new()),
@ -997,6 +958,48 @@ impl Room {
}
}
trait Describe {
fn describe(&self) -> String;
}
impl Describe for MembershipState {
fn describe(&self) -> String {
use MembershipState::*;
match self {
Ban => "is banned in",
Invite => "is invited to",
Join => "is a member of",
Knock => "is requesting access",
Leave => "left",
}
.to_string()
}
}
impl Describe for MembershipChange {
fn describe(&self) -> String {
use MembershipChange::*;
match self {
Invited => "got invited to",
Joined => "joined",
Kicked => "got kicked from",
Banned => "got banned from",
Unbanned => "got unbanned from",
KickedAndBanned => "got kicked and banned from",
InvitationRejected => "rejected the invitation to",
InvitationRevoked => "got their invitation revoked from",
Left => "left",
ProfileChanged => "changed their profile",
None => "did nothing in",
NotImplemented => "NOT IMPLEMENTED",
Error => "ERROR",
}
.to_string()
}
}
#[cfg(test)]
mod test {
use super::*;