♻️ Add Account, Room and Space UI store structs
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
@@ -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)]
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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>) {}
|
||||
}
|
||||
|
Reference in New Issue
Block a user