Extend MembershipChange::ProfileChanged

This commit is contained in:
Jonas Platte 2020-06-09 23:45:07 +02:00 committed by Jonas Platte
parent b33e57c589
commit 10ad9760d6

View File

@ -149,7 +149,12 @@ pub enum MembershipChange {
InvitationRevoked, InvitationRevoked,
/// `displayname` or `avatar_url` changed. /// `displayname` or `avatar_url` changed.
ProfileChanged, ProfileChanged {
/// Whether the `displayname` changed.
displayname_changed: bool,
/// Whether the `avatar_url` changed.
avatar_url_changed: bool,
},
/// Not implemented. /// Not implemented.
NotImplemented, NotImplemented,
@ -161,12 +166,19 @@ impl MemberEvent {
/// [spec]: https://matrix.org/docs/spec/client_server/latest#m-room-member /// [spec]: https://matrix.org/docs/spec/client_server/latest#m-room-member
pub fn membership_change(&self) -> MembershipChange { pub fn membership_change(&self) -> MembershipChange {
use MembershipState::*; use MembershipState::*;
let prev_membership = if let Some(prev_content) = &self.prev_content { let prev_content = if let Some(prev_content) = &self.prev_content {
prev_content.membership prev_content
} else { } else {
Leave &MemberEventContent {
avatar_url: None,
displayname: None,
is_direct: None,
membership: Leave,
third_party_invite: None,
}
}; };
match (prev_membership, &self.content.membership) {
match (prev_content.membership, &self.content.membership) {
(Invite, Invite) | (Leave, Leave) | (Ban, Ban) => MembershipChange::None, (Invite, Invite) | (Leave, Leave) | (Ban, Ban) => MembershipChange::None,
(Invite, Join) | (Leave, Join) => MembershipChange::Joined, (Invite, Join) | (Leave, Join) => MembershipChange::Joined,
(Invite, Leave) => { (Invite, Leave) => {
@ -178,7 +190,10 @@ impl MemberEvent {
} }
(Invite, Ban) | (Leave, Ban) => MembershipChange::Banned, (Invite, Ban) | (Leave, Ban) => MembershipChange::Banned,
(Join, Invite) | (Ban, Invite) | (Ban, Join) => MembershipChange::Error, (Join, Invite) | (Ban, Invite) | (Ban, Join) => MembershipChange::Error,
(Join, Join) => MembershipChange::ProfileChanged, (Join, Join) => MembershipChange::ProfileChanged {
displayname_changed: prev_content.displayname != self.content.displayname,
avatar_url_changed: prev_content.avatar_url != self.content.avatar_url,
},
(Join, Leave) => { (Join, Leave) => {
if self.sender == self.state_key { if self.sender == self.state_key {
MembershipChange::Left MembershipChange::Left