🚧 Add Avatar management and refresh the Matrix client part

This commit is contained in:
2024-05-17 22:41:35 +02:00
parent 0b898dce52
commit fdae149c4a
5 changed files with 399 additions and 311 deletions

View File

@@ -1,7 +1,6 @@
use std::{collections::HashMap, rc::Rc};
use async_trait::async_trait;
use futures::future::join_all;
use tokio::{
select,
sync::{broadcast::Receiver, mpsc::UnboundedSender},
@@ -23,8 +22,8 @@ use crate::{
RoomMessagingProviderInterface, SpaceMessagingConsumerInterface,
SpaceMessagingProviderInterface,
},
room::{Room, RoomId},
room_member::RoomMember,
room::{Invitation, Room, RoomId},
room_member::{AvatarUrl, RoomMember},
space::Space,
},
utils::oneshot,
@@ -182,19 +181,29 @@ impl AccountMessagingProviderInterface for Requester {
if let Ok(room_event) = room_event {
if let Some(consumer) = room_events_consumers.get(&room_id) {
match room_event {
RoomEvent::Invitation() => {
consumer.on_invitation().await;
RoomEvent::Invitation(user_id, sender_id, is_account_user) => {
let invitation = Invitation::new(user_id, sender_id, is_account_user);
consumer.on_invitation(invitation).await;
},
RoomEvent::Join(user_id, user_name, avatar_url, is_account_user) => {
let member = RoomMember::new(
UserId::from(user_id),
user_name,
avatar_url,
room_id,
is_account_user,
client.clone());
consumer.on_membership(member).await;
},
// RoomEvent::Membership(user_id, is_account_user) => {
// let member = RoomMember::new(UserId::from(user_id), room_id, is_account_user);
// consumer.on_membership(member).await;
// },
RoomEvent::NewTopic(topic) => {
consumer.on_new_topic(topic).await;
},
RoomEvent::NewName(name) => {
consumer.on_new_name(name).await;
},
RoomEvent::NewAvatar(avatar) => {
consumer.on_new_avatar(avatar).await;
}
_ => {}
}
} else {
@@ -256,12 +265,14 @@ impl MemberMessagingProviderInterface for Requester {
&self,
room_id: &RoomId,
user_id: &UserId,
avatar_url: &Option<AvatarUrl>,
) -> anyhow::Result<Option<Avatar>> {
request_to_worker!(
self,
WorkerTask::GetRoomMemberAvatar,
room_id.clone(),
user_id.clone()
user_id.clone(),
avatar_url.clone()
)
}
}