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