🎨 Factorize Room creation from MatrixRoom instances

This commit is contained in:
2023-12-31 15:21:49 +01:00
parent 04628ae10d
commit 5fe13335a1
2 changed files with 13 additions and 20 deletions

View File

@@ -7,9 +7,8 @@ use std::{collections::HashMap, sync::Arc};
use dioxus::prelude::*; use dioxus::prelude::*;
use fermi::*; use fermi::*;
use matrix_sdk::room::Room as MatrixRoom;
use matrix_sdk::{ use matrix_sdk::{
room::RoomMember, room::{Room as MatrixRoom, RoomMember},
ruma::{OwnedRoomId, OwnedUserId}, ruma::{OwnedRoomId, OwnedUserId},
}; };
use tokio::select; use tokio::select;
@@ -63,6 +62,16 @@ impl Room {
} }
} }
pub async fn from_matrix_room(matrix_room: &MatrixRoom) -> Self {
let room_topic = matrix_room.topic().map(RefCell::new);
Self::new(
Arc::new(matrix_room.to_owned()),
room_topic,
matrix_room.is_direct().await.ok(),
)
}
pub fn name(&self) -> Option<String> { pub fn name(&self) -> Option<String> {
self.matrix_room.name() self.matrix_room.name()
} }

View File

@@ -110,12 +110,7 @@ impl Client {
if ev.state_key == matrix_client.user_id().unwrap() { if ev.state_key == matrix_client.user_id().unwrap() {
if matrix_room.state() == MatrixRoomState::Invited { if matrix_room.state() == MatrixRoomState::Invited {
let room_id = matrix_room.room_id(); let room_id = matrix_room.room_id();
let room_topic = matrix_room.topic().map(RefCell::new); let room = Room::from_matrix_room(&matrix_room).await;
let room = Room::new(
Arc::new(matrix_room.to_owned()),
room_topic,
matrix_room.is_direct().await.ok(),
);
if let Err(err) = senders if let Err(err) = senders
.room_sender .room_sender
@@ -152,22 +147,11 @@ impl Client {
matrix_room: MatrixRoom, matrix_room: MatrixRoom,
senders: Ctx<Senders>, senders: Ctx<Senders>,
) { ) {
error!("== on_room_member_event ==");
// dbg!(&matrix_room);
dbg!(matrix_room.room_id());
dbg!(ev.membership());
if let SyncStateEvent::Original(_ev) = ev { if let SyncStateEvent::Original(_ev) = ev {
let room_sender = &senders.room_sender; let room_sender = &senders.room_sender;
let room_id = matrix_room.room_id(); let room_id = matrix_room.room_id();
let room_topic = matrix_room.topic().map(RefCell::new); let room = Room::from_matrix_room(&matrix_room).await;
let room = Room::new(
Arc::new(matrix_room.to_owned()),
room_topic,
matrix_room.is_direct().await.ok(),
);
if let Err(err) = room_sender.send(RoomEvent::MemberEvent(room_id.to_owned(), room)) { if let Err(err) = room_sender.send(RoomEvent::MemberEvent(room_id.to_owned(), room)) {
error!( error!(