SSS: Fix room names

This commit is contained in:
Lambda 2025-05-20 17:02:22 +00:00
parent 166a269034
commit a2bbfd1242

View file

@ -11,8 +11,9 @@ use std::{
use ruma::{
api::client::{
sync::sync_events::{
self, v5::request::ListFilters, DeviceLists,
UnreadNotificationsCount,
self,
v5::{request::ListFilters, response::Hero},
DeviceLists, UnreadNotificationsCount,
},
uiaa::UiaaResponse,
},
@ -933,55 +934,37 @@ fn process_room(
.collect()
};
// Heroes
let heroes = services()
.rooms
.state_cache
.room_members(room_id)
.filter_map(Result::ok)
.filter(|member| member != sender_user)
.filter_map(|member| {
services()
.rooms
.state_accessor
.get_member(room_id, &member)
.ok()
.flatten()
.map(|memberevent| {
(
memberevent
.displayname
.unwrap_or_else(|| member.to_string()),
memberevent.avatar_url,
)
})
})
.take(5)
.collect::<Vec<_>>();
let name = match &*heroes {
[] => None,
[(only, _)] => Some(only.clone()),
[firsts @ .., (last, _)] => Some({
let firsts = firsts
.iter()
.map(|(name, _)| name.clone())
.collect::<Vec<_>>()
.join(", ");
format!("{firsts} and {last}")
}),
};
let name = services().rooms.state_accessor.get_name(room_id)?;
let heroes = name.is_none().then(|| {
services()
.rooms
.state_cache
.room_members(room_id)
.filter_map(Result::ok)
.filter(|member| member != sender_user)
.filter_map(|member| {
services()
.rooms
.state_accessor
.get_member(room_id, &member)
.ok()
.flatten()
.map(|memberevent| Hero {
user_id: member,
name: memberevent.displayname,
avatar: memberevent.avatar_url,
})
})
.take(5)
.collect::<Vec<_>>()
});
let room = sync_events::v5::response::Room {
name: services().rooms.state_accessor.get_name(room_id)?.or(name),
avatar: if let [(_name, Some(avatar))] = &*heroes {
JsOption::Some(avatar.clone())
} else {
match services().rooms.state_accessor.get_avatar(room_id)? {
JsOption::Some(avatar) => JsOption::from_option(avatar.url),
JsOption::Null => JsOption::Null,
JsOption::Undefined => JsOption::Undefined,
}
name,
avatar: match services().rooms.state_accessor.get_avatar(room_id)? {
JsOption::Some(avatar) => JsOption::from_option(avatar.url),
JsOption::Null => JsOption::Null,
JsOption::Undefined => JsOption::Undefined,
},
initial: Some(todo_room.roomsince == 0),
is_dm: None,
@ -1028,8 +1011,7 @@ fn process_room(
num_live: None,
// TODO
bump_stamp: None,
// TODO
heroes: None,
heroes,
};
trace!(?room, "Built room data");