mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-16 23:31:24 +01:00
SSS: Fix room names
This commit is contained in:
parent
166a269034
commit
a2bbfd1242
1 changed files with 33 additions and 51 deletions
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue