🚧 Add RoomMember value object
This commit is contained in:
@@ -2,6 +2,7 @@ pub(crate) mod account;
|
|||||||
pub(crate) mod common;
|
pub(crate) mod common;
|
||||||
pub(crate) mod messaging_interface;
|
pub(crate) mod messaging_interface;
|
||||||
pub(crate) mod room;
|
pub(crate) mod room;
|
||||||
|
pub(crate) mod room_member;
|
||||||
pub(crate) mod session;
|
pub(crate) mod session;
|
||||||
pub(crate) mod space;
|
pub(crate) mod space;
|
||||||
pub(crate) mod store_interface;
|
pub(crate) mod store_interface;
|
||||||
|
@@ -114,7 +114,9 @@ impl Room {
|
|||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
fn add_member(&self, member: RoomMember) {
|
fn add_member(&self, member: RoomMember) {
|
||||||
self.members.borrow_mut().insert(member.id.clone(), member);
|
self.members
|
||||||
|
.borrow_mut()
|
||||||
|
.insert(member.id().clone(), member);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn get_avatar(&self) -> Option<Avatar> {
|
pub async fn get_avatar(&self) -> Option<Avatar> {
|
||||||
@@ -153,7 +155,7 @@ impl Room {
|
|||||||
let mut other_members = Vec::<&RoomMember>::new();
|
let mut other_members = Vec::<&RoomMember>::new();
|
||||||
|
|
||||||
for member in &members {
|
for member in &members {
|
||||||
if member.is_account_user {
|
if member.is_account_user() {
|
||||||
account_member = Some(member);
|
account_member = Some(member);
|
||||||
} else {
|
} else {
|
||||||
other_members.push(member);
|
other_members.push(member);
|
||||||
|
90
src/domain/model/room_member.rs
Normal file
90
src/domain/model/room_member.rs
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
use std::{
|
||||||
|
cell::RefCell,
|
||||||
|
fmt::{Debug, Formatter},
|
||||||
|
rc::Rc,
|
||||||
|
};
|
||||||
|
|
||||||
|
use matrix_sdk::{room::RoomMember as MatrixRoomMember, ruma::OwnedRoomId};
|
||||||
|
use tracing::error;
|
||||||
|
|
||||||
|
use super::{
|
||||||
|
common::{Avatar, UserId},
|
||||||
|
messaging_interface::MemberMessagingProviderInterface,
|
||||||
|
room::RoomId,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct RoomMember {
|
||||||
|
id: UserId,
|
||||||
|
room_id: RoomId,
|
||||||
|
is_account_user: bool,
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
avatar: RefCell<Option<Avatar>>,
|
||||||
|
|
||||||
|
messaging_provider: Rc<dyn MemberMessagingProviderInterface>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RoomMember {
|
||||||
|
fn new(
|
||||||
|
id: UserId,
|
||||||
|
room_id: RoomId,
|
||||||
|
is_account_user: bool,
|
||||||
|
messaging_provider: Rc<dyn MemberMessagingProviderInterface>,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
id,
|
||||||
|
room_id,
|
||||||
|
is_account_user,
|
||||||
|
avatar: RefCell::new(None),
|
||||||
|
messaging_provider,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Use a factory instead...
|
||||||
|
pub async fn from_matrix(
|
||||||
|
matrix_room_member: &MatrixRoomMember,
|
||||||
|
room_id: &OwnedRoomId,
|
||||||
|
messaging_provider: Rc<dyn MemberMessagingProviderInterface>,
|
||||||
|
) -> Self {
|
||||||
|
Self::new(
|
||||||
|
UserId::from(matrix_room_member.user_id()),
|
||||||
|
room_id.clone(),
|
||||||
|
matrix_room_member.is_account_user(),
|
||||||
|
messaging_provider,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn id(&self) -> &UserId {
|
||||||
|
&self.id
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn room_id(&self) -> &RoomId {
|
||||||
|
&self.room_id
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_account_user(&self) -> bool {
|
||||||
|
self.is_account_user
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get_avatar(&self) -> Option<Avatar> {
|
||||||
|
match self
|
||||||
|
.messaging_provider
|
||||||
|
.get_avatar(&self.room_id, &self.id)
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Ok(avatar) => avatar,
|
||||||
|
Err(err) => {
|
||||||
|
error!("err={}", err);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Debug for RoomMember {
|
||||||
|
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
|
||||||
|
f.debug_struct("RoomMember").field("id", &self.id).finish()
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user