Apply user highlighting to display name changes (#449)

This commit is contained in:
Ulyssa 2025-06-05 19:46:32 -07:00 committed by GitHub
parent f880358a83
commit 33d3407694
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 39 additions and 21 deletions

View file

@ -284,6 +284,7 @@ pub enum StyleTreeNode {
RoomAlias(OwnedRoomAliasId), RoomAlias(OwnedRoomAliasId),
RoomId(OwnedRoomId), RoomId(OwnedRoomId),
UserId(OwnedUserId), UserId(OwnedUserId),
DisplayName(String, OwnedUserId),
} }
impl StyleTreeNode { impl StyleTreeNode {
@ -333,6 +334,7 @@ impl StyleTreeNode {
StyleTreeNode::UserId(_) => {}, StyleTreeNode::UserId(_) => {},
StyleTreeNode::RoomId(_) => {}, StyleTreeNode::RoomId(_) => {},
StyleTreeNode::RoomAlias(_) => {}, StyleTreeNode::RoomAlias(_) => {},
StyleTreeNode::DisplayName(_, _) => {},
} }
} }
@ -472,6 +474,10 @@ impl StyleTreeNode {
let style = printer.settings().get_user_style(user_id); let style = printer.settings().get_user_style(user_id);
printer.push_str(user_id.as_str(), style); printer.push_str(user_id.as_str(), style);
}, },
StyleTreeNode::DisplayName(display_name, user_id) => {
let style = printer.settings().get_user_style(user_id);
printer.push_str(display_name.as_str(), style);
},
StyleTreeNode::RoomId(room_id) => { StyleTreeNode::RoomId(room_id) => {
let bold = style.add_modifier(StyleModifier::BOLD); let bold = style.add_modifier(StyleModifier::BOLD);
printer.push_str(room_id.as_str(), bold); printer.push_str(room_id.as_str(), bold);

View file

@ -242,10 +242,7 @@ pub fn body_cow_state(ev: &AnySyncStateEvent) -> Cow<'static, str> {
format!("* set their display name to {:?}", new) format!("* set their display name to {:?}", new)
}, },
(Some(old), Some(new)) => { (Some(old), Some(new)) => {
format!( format!("* changed their display name from {old} to {new}")
"* changed their display name from {:?} to {:?}",
old, new
)
}, },
(Some(_), None) => "* unset their display name".to_string(), (Some(_), None) => "* unset their display name".to_string(),
(None, None) => { (None, None) => {
@ -600,7 +597,7 @@ pub fn html_state(ev: &AnySyncStateEvent) -> StyleTree {
let prev_details = prev_content.as_ref().map(|p| p.details()); let prev_details = prev_content.as_ref().map(|p| p.details());
let change = content.membership_change(prev_details, ev.sender(), &state_key); let change = content.membership_change(prev_details, ev.sender(), &state_key);
let user_id = StyleTreeNode::UserId(state_key); let user_id = StyleTreeNode::UserId(state_key.clone());
match change { match change {
MembershipChange::None => { MembershipChange::None => {
@ -673,44 +670,59 @@ pub fn html_state(ev: &AnySyncStateEvent) -> StyleTree {
vec![prefix, user_id] vec![prefix, user_id]
}, },
MembershipChange::ProfileChanged { displayname_change, avatar_url_change } => { MembershipChange::ProfileChanged { displayname_change, avatar_url_change } => {
let m = match (displayname_change, avatar_url_change) { match (displayname_change, avatar_url_change) {
(Some(change), avatar_change) => { (Some(change), avatar_change) => {
let mut m = match (change.old, change.new) { let mut m = match (change.old, change.new) {
(None, Some(new)) => { (None, Some(new)) => {
format!("* set their display name to {:?}", new) vec![
StyleTreeNode::Text("* set their display name to ".into()),
StyleTreeNode::DisplayName(new.into(), state_key),
]
}, },
(Some(old), Some(new)) => { (Some(old), Some(new)) => {
format!( vec![
"* changed their display name from {:?} to {:?}", StyleTreeNode::Text(
old, new "* changed their display name from ".into(),
) ),
StyleTreeNode::DisplayName(old.into(), state_key.clone()),
StyleTreeNode::Text(" to ".into()),
StyleTreeNode::DisplayName(new.into(), state_key),
]
},
(Some(_), None) => {
vec![StyleTreeNode::Text("* unset their display name".into())]
}, },
(Some(_), None) => "* unset their display name".to_string(),
(None, None) => { (None, None) => {
"* made an unknown change to their display name".to_string() vec![StyleTreeNode::Text(
"* made an unknown change to their display name".into(),
)]
}, },
}; };
if avatar_change.is_some() { if avatar_change.is_some() {
m.push_str(" and changed their user avatar"); m.push(StyleTreeNode::Text(
" and changed their user avatar".into(),
));
} }
Cow::Owned(m) m
}, },
(None, Some(change)) => { (None, Some(change)) => {
match (change.old, change.new) { let m = match (change.old, change.new) {
(None, Some(_)) => Cow::Borrowed("* added a user avatar"), (None, Some(_)) => Cow::Borrowed("* added a user avatar"),
(Some(_), Some(_)) => Cow::Borrowed("* changed their user avatar"), (Some(_), Some(_)) => Cow::Borrowed("* changed their user avatar"),
(Some(_), None) => Cow::Borrowed("* removed their user avatar"), (Some(_), None) => Cow::Borrowed("* removed their user avatar"),
(None, None) => { (None, None) => {
Cow::Borrowed("* made an unknown change to their user avatar") Cow::Borrowed("* made an unknown change to their user avatar")
}, },
} };
},
(None, None) => Cow::Borrowed("* changed their user profile"),
};
vec![StyleTreeNode::Text(m)] vec![StyleTreeNode::Text(m)]
},
(None, None) => {
vec![StyleTreeNode::Text("* changed their user profile".into())]
},
}
}, },
ev => { ev => {
let prefix = let prefix =