add heroes support to sliding sync responses

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
morguldir 2024-08-21 19:47:39 -04:00 committed by Jason Volk
parent 1e4b1e516e
commit ddacda9ecf

View file

@ -20,7 +20,7 @@ use ruma::{
Ephemeral, Filter, GlobalAccountData, InviteState, InvitedRoom, JoinedRoom, LeftRoom, Presence, Ephemeral, Filter, GlobalAccountData, InviteState, InvitedRoom, JoinedRoom, LeftRoom, Presence,
RoomAccountData, RoomSummary, Rooms, State as RoomState, Timeline, ToDevice, RoomAccountData, RoomSummary, Rooms, State as RoomState, Timeline, ToDevice,
}, },
v4::SlidingOp, v4::{SlidingOp, SlidingSyncRoomHero},
DeviceLists, UnreadNotificationsCount, DeviceLists, UnreadNotificationsCount,
}, },
uiaa::UiaaResponse, uiaa::UiaaResponse,
@ -1466,13 +1466,10 @@ pub(crate) async fn sync_events_v4_route(
.rooms .rooms
.state_accessor .state_accessor
.get_member(room_id, &member)? .get_member(room_id, &member)?
.map(|memberevent| { .map(|memberevent| SlidingSyncRoomHero {
( user_id: member,
memberevent name: memberevent.displayname,
.displayname avatar: memberevent.avatar_url,
.unwrap_or_else(|| member.to_string()),
memberevent.avatar_url,
)
}), }),
) )
}) })
@ -1484,18 +1481,26 @@ pub(crate) async fn sync_events_v4_route(
Ordering::Greater => { Ordering::Greater => {
let firsts = heroes[1..] let firsts = heroes[1..]
.iter() .iter()
.map(|h| h.0.clone()) .map(|h| h.name.clone().unwrap_or_else(|| h.user_id.to_string()))
.collect::<Vec<_>>() .collect::<Vec<_>>()
.join(", "); .join(", ");
let last = heroes[0].0.clone(); let last = heroes[0]
.name
.clone()
.unwrap_or_else(|| heroes[0].user_id.to_string());
Some(format!("{firsts} and {last}")) Some(format!("{firsts} and {last}"))
}, },
Ordering::Equal => Some(heroes[0].0.clone()), Ordering::Equal => Some(
heroes[0]
.name
.clone()
.unwrap_or_else(|| heroes[0].user_id.to_string()),
),
Ordering::Less => None, Ordering::Less => None,
}; };
let heroes_avatar = if heroes.len() == 1 { let heroes_avatar = if heroes.len() == 1 {
heroes[0].1.clone() heroes[0].avatar.clone()
} else { } else {
None None
}; };
@ -1558,7 +1563,7 @@ pub(crate) async fn sync_events_v4_route(
), ),
num_live: None, // Count events in timeline greater than global sync counter num_live: None, // Count events in timeline greater than global sync counter
timestamp: None, timestamp: None,
heroes: None, heroes: Some(heroes),
}, },
); );
} }