♻️ Add Account, Room and Space UI store structs

This commit is contained in:
2024-05-11 15:24:49 +02:00
parent bc6b02bc34
commit 18a797bc3f
12 changed files with 152 additions and 183 deletions

View File

@@ -1,6 +1,4 @@
use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
use std::{cell::RefCell, collections::HashMap, rc::Rc};
use async_trait::async_trait;
use tracing::error;
@@ -95,32 +93,30 @@ impl Account {
#[async_trait(?Send)]
impl AccountMessagingConsumerInterface for Account {
async fn on_new_room(&self, room: Room) -> Rc<dyn RoomMessagingConsumerInterface> {
async fn on_new_room(&self, room: Rc<Room>) -> Rc<dyn RoomMessagingConsumerInterface> {
let room_id = room.id().clone();
let room = Rc::new(room);
self.by_id_rooms
.borrow_mut()
.insert(room_id, Rc::clone(&room));
let room_store = Box::new(self.store.on_new_room(Rc::clone(&room)));
let room_store = self.store.on_new_room(Rc::clone(&room));
room.set_store(Some(room_store));
room.set_store(room_store);
room
}
async fn on_new_space(&self, space: Space) -> Rc<dyn SpaceMessagingConsumerInterface> {
async fn on_new_space(&self, space: Rc<Space>) -> Rc<dyn SpaceMessagingConsumerInterface> {
let space_id = space.id().clone();
let space = Rc::new(space);
self.by_id_spaces
.borrow_mut()
.insert(space_id, Rc::clone(&space));
let space_store = Box::new(self.store.on_new_space(Rc::clone(&space)));
let space_store = self.store.on_new_space(Rc::clone(&space));
space.set_store(Some(space_store));
space.set_store(space_store);
space
}

View File

@@ -13,8 +13,8 @@ use crate::infrastructure::messaging::matrix::account_event::AccountEvent;
#[async_trait(?Send)]
pub trait AccountMessagingConsumerInterface {
async fn on_new_room(&self, room: Room) -> Rc<dyn RoomMessagingConsumerInterface>;
async fn on_new_space(&self, space: Space) -> Rc<dyn SpaceMessagingConsumerInterface>;
async fn on_new_room(&self, room: Rc<Room>) -> Rc<dyn RoomMessagingConsumerInterface>;
async fn on_new_space(&self, space: Rc<Space>) -> Rc<dyn SpaceMessagingConsumerInterface>;
}
#[async_trait(?Send)]

View File

@@ -1,6 +1,4 @@
use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
use std::{cell::RefCell, collections::HashMap, rc::Rc};
use async_trait::async_trait;
use futures::future::{join, join_all};
@@ -34,7 +32,7 @@ pub struct Room {
members: RefCell<HashMap<UserId, RoomMember>>,
messaging_provider: Option<Rc<dyn RoomMessagingProviderInterface>>,
store: RefCell<Option<Box<dyn RoomStoreProviderInterface>>>,
store: RefCell<Option<Rc<dyn RoomStoreProviderInterface>>>,
}
impl PartialEq for Room {
@@ -75,8 +73,8 @@ impl Room {
self.messaging_provider = Some(messaging_provider);
}
pub fn set_store(&self, store: Option<Box<dyn RoomStoreProviderInterface>>) {
*self.store.borrow_mut() = store;
pub fn set_store(&self, store: Rc<dyn RoomStoreProviderInterface>) {
*self.store.borrow_mut() = Some(store);
}
pub fn id(&self) -> &RoomId {

View File

@@ -26,7 +26,7 @@ pub struct Space {
children: RefCell<HashSet<RoomId>>, // We don´t expect to manage nested spaces
messaging_provider: Option<Rc<dyn SpaceMessagingProviderInterface>>,
store: RefCell<Option<Box<dyn SpaceStoreProviderInterface>>>,
store: RefCell<Option<Rc<dyn SpaceStoreProviderInterface>>>,
}
impl PartialEq for Space {
@@ -57,8 +57,8 @@ impl Space {
self.messaging_provider = Some(provider);
}
pub fn set_store(&self, store: Option<Box<dyn SpaceStoreProviderInterface>>) {
*self.store.borrow_mut() = store;
pub fn set_store(&self, store: Rc<dyn SpaceStoreProviderInterface>) {
*self.store.borrow_mut() = Some(store);
}
pub fn id(&self) -> &SpaceId {
@@ -84,7 +84,7 @@ impl SpaceMessagingConsumerInterface for Space {
error!("Space::on_new_name({:?})", name);
self.name.borrow_mut().clone_from(&name);
if let Some(store) = self.store.borrow_mut().as_mut() {
if let Some(store) = self.store.borrow().as_ref() {
store.set_name(name);
}
}

View File

@@ -1,15 +1,13 @@
use std::rc::Rc;
use super::room::Room;
use super::space::Space;
use crate::base::{StoreRoom, StoreSpace};
use super::{room::Room, space::Space};
#[allow(dead_code)]
pub trait AccountStoreConsumerInterface {}
pub trait AccountStoreProviderInterface {
fn on_new_room(&self, room: Rc<Room>) -> StoreRoom;
fn on_new_space(&self, space: Rc<Space>) -> StoreSpace;
fn on_new_room(&self, room: Rc<Room>) -> Rc<dyn RoomStoreProviderInterface>;
fn on_new_space(&self, space: Rc<Space>) -> Rc<dyn SpaceStoreProviderInterface>;
}
#[allow(dead_code)]
@@ -19,5 +17,5 @@ pub trait RoomStoreProviderInterface {}
#[allow(dead_code)]
pub trait SpaceStoreConsumerInterface {}
pub trait SpaceStoreProviderInterface {
fn set_name(&mut self, _name: Option<String>) {}
fn set_name(&self, _name: Option<String>) {}
}