base: Restore stripped room infos as well
parent
44974982e1
commit
eb8138ca6a
|
@ -36,14 +36,24 @@ impl StrippedRoom {
|
||||||
pub fn new(own_user_id: &UserId, store: Arc<Box<dyn StateStore>>, room_id: &RoomId) -> Self {
|
pub fn new(own_user_id: &UserId, store: Arc<Box<dyn StateStore>>, room_id: &RoomId) -> Self {
|
||||||
let room_id = Arc::new(room_id.clone());
|
let room_id = Arc::new(room_id.clone());
|
||||||
|
|
||||||
Self {
|
let info = StrippedRoomInfo {
|
||||||
own_user_id: Arc::new(own_user_id.clone()),
|
|
||||||
room_id: room_id.clone(),
|
|
||||||
store,
|
|
||||||
inner: Arc::new(SyncMutex::new(StrippedRoomInfo {
|
|
||||||
room_id,
|
room_id,
|
||||||
base_info: BaseRoomInfo::new(),
|
base_info: BaseRoomInfo::new(),
|
||||||
})),
|
};
|
||||||
|
|
||||||
|
Self::restore(own_user_id, store, info)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn restore(
|
||||||
|
own_user_id: &UserId,
|
||||||
|
store: Arc<Box<dyn StateStore>>,
|
||||||
|
room_info: StrippedRoomInfo,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
own_user_id: Arc::new(own_user_id.clone()),
|
||||||
|
room_id: room_info.room_id.clone(),
|
||||||
|
store,
|
||||||
|
inner: Arc::new(SyncMutex::new(room_info)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -275,6 +275,11 @@ impl MemoryStore {
|
||||||
#[allow(clippy::map_clone)]
|
#[allow(clippy::map_clone)]
|
||||||
self.room_info.iter().map(|r| r.clone()).collect()
|
self.room_info.iter().map(|r| r.clone()).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_stripped_room_infos(&self) -> Vec<StrippedRoomInfo> {
|
||||||
|
#[allow(clippy::map_clone)]
|
||||||
|
self.stripped_room_info.iter().map(|r| r.clone()).collect()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
|
||||||
|
@ -336,4 +341,8 @@ impl StateStore for MemoryStore {
|
||||||
async fn get_room_infos(&self) -> Result<Vec<RoomInfo>> {
|
async fn get_room_infos(&self) -> Result<Vec<RoomInfo>> {
|
||||||
Ok(self.get_room_infos())
|
Ok(self.get_room_infos())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_stripped_room_infos(&self) -> Result<Vec<StrippedRoomInfo>> {
|
||||||
|
Ok(self.get_stripped_room_infos())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,6 +99,8 @@ pub trait StateStore: AsyncTraitDeps {
|
||||||
async fn get_joined_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>>;
|
async fn get_joined_user_ids(&self, room_id: &RoomId) -> Result<Vec<UserId>>;
|
||||||
|
|
||||||
async fn get_room_infos(&self) -> Result<Vec<RoomInfo>>;
|
async fn get_room_infos(&self) -> Result<Vec<RoomInfo>>;
|
||||||
|
|
||||||
|
async fn get_stripped_room_infos(&self) -> Result<Vec<StrippedRoomInfo>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
@ -125,11 +127,16 @@ impl Store {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn restore_session(&self, session: Session) -> Result<()> {
|
pub(crate) async fn restore_session(&self, session: Session) -> Result<()> {
|
||||||
for info in self.inner.get_room_infos().await?.into_iter() {
|
for info in self.inner.get_room_infos().await? {
|
||||||
let room = Room::restore(&session.user_id, self.inner.clone(), info);
|
let room = Room::restore(&session.user_id, self.inner.clone(), info);
|
||||||
self.rooms.insert(room.room_id().to_owned(), room);
|
self.rooms.insert(room.room_id().to_owned(), room);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for info in self.inner.get_stripped_room_infos().await? {
|
||||||
|
let room = StrippedRoom::restore(&session.user_id, self.inner.clone(), info);
|
||||||
|
self.stripped_rooms.insert(room.room_id().to_owned(), room);
|
||||||
|
}
|
||||||
|
|
||||||
let token = self.get_sync_token().await?;
|
let token = self.get_sync_token().await?;
|
||||||
|
|
||||||
*self.sync_token.write().await = token;
|
*self.sync_token.write().await = token;
|
||||||
|
|
|
@ -37,7 +37,7 @@ use sled::{
|
||||||
};
|
};
|
||||||
use tracing::info;
|
use tracing::info;
|
||||||
|
|
||||||
use crate::deserialized_responses::MemberEvent;
|
use crate::{deserialized_responses::MemberEvent, rooms::StrippedRoomInfo};
|
||||||
|
|
||||||
use self::store_key::{EncryptedEvent, StoreKey};
|
use self::store_key::{EncryptedEvent, StoreKey};
|
||||||
|
|
||||||
|
@ -479,6 +479,15 @@ impl SledStore {
|
||||||
.map(move |r| db.deserialize_event(&r?.1).map_err(|e| e.into())),
|
.map(move |r| db.deserialize_event(&r?.1).map_err(|e| e.into())),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn get_stripped_room_infos(&self) -> impl Stream<Item = Result<StrippedRoomInfo>> {
|
||||||
|
let db = self.clone();
|
||||||
|
stream::iter(
|
||||||
|
self.stripped_room_info
|
||||||
|
.iter()
|
||||||
|
.map(move |r| db.deserialize_event(&r?.1).map_err(|e| e.into())),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
|
@ -539,6 +548,10 @@ impl StateStore for SledStore {
|
||||||
async fn get_room_infos(&self) -> Result<Vec<RoomInfo>> {
|
async fn get_room_infos(&self) -> Result<Vec<RoomInfo>> {
|
||||||
self.get_room_infos().await.try_collect().await
|
self.get_room_infos().await.try_collect().await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn get_stripped_room_infos(&self) -> Result<Vec<StrippedRoomInfo>> {
|
||||||
|
self.get_stripped_room_infos().await.try_collect().await
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
Loading…
Reference in New Issue