mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-18 16:21: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::{
|
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");
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue