base: Correctly update the room info for invited rooms
parent
7a5daf6ac7
commit
e058191b99
|
@ -3421,6 +3421,7 @@ mod test {
|
||||||
.with_status(200)
|
.with_status(200)
|
||||||
.match_header("authorization", "Bearer 1234")
|
.match_header("authorization", "Bearer 1234")
|
||||||
.with_body(test_json::SYNC.to_string())
|
.with_body(test_json::SYNC.to_string())
|
||||||
|
.expect_at_least(1)
|
||||||
.create();
|
.create();
|
||||||
|
|
||||||
let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000));
|
let sync_settings = SyncSettings::new().timeout(Duration::from_millis(3000));
|
||||||
|
@ -3430,6 +3431,19 @@ mod test {
|
||||||
let room = client.get_joined_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost")).unwrap();
|
let room = client.get_joined_room(&room_id!("!SVkFJHzfwvuaIEawgC:localhost")).unwrap();
|
||||||
|
|
||||||
assert_eq!("tutorial".to_string(), room.display_name().await.unwrap());
|
assert_eq!("tutorial".to_string(), room.display_name().await.unwrap());
|
||||||
|
|
||||||
|
let _m = mock("GET", Matcher::Regex(r"^/_matrix/client/r0/sync\?.*$".to_string()))
|
||||||
|
.with_status(200)
|
||||||
|
.match_header("authorization", "Bearer 1234")
|
||||||
|
.with_body(test_json::INVITE_SYNC.to_string())
|
||||||
|
.expect_at_least(1)
|
||||||
|
.create();
|
||||||
|
|
||||||
|
let _response = client.sync_once(SyncSettings::new()).await.unwrap();
|
||||||
|
|
||||||
|
let invited_room = client.get_invited_room(&room_id!("!696r7674:example.com")).unwrap();
|
||||||
|
|
||||||
|
assert_eq!("My Room Name".to_string(), invited_room.display_name().await.unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
|
|
@ -685,7 +685,7 @@ impl BaseClient {
|
||||||
for room_id in rooms {
|
for room_id in rooms {
|
||||||
if let Some(room) = changes.room_infos.get_mut(room_id) {
|
if let Some(room) = changes.room_infos.get_mut(room_id) {
|
||||||
room.base_info.dm_target = Some(user_id.clone());
|
room.base_info.dm_target = Some(user_id.clone());
|
||||||
} else if let Some(room) = self.store.get_bare_room(room_id) {
|
} else if let Some(room) = self.store.get_room(room_id) {
|
||||||
let mut info = room.clone_info();
|
let mut info = room.clone_info();
|
||||||
info.base_info.dm_target = Some(user_id.clone());
|
info.base_info.dm_target = Some(user_id.clone());
|
||||||
changes.add_room(info);
|
changes.add_room(info);
|
||||||
|
@ -931,7 +931,7 @@ impl BaseClient {
|
||||||
|
|
||||||
async fn apply_changes(&self, changes: &StateChanges) {
|
async fn apply_changes(&self, changes: &StateChanges) {
|
||||||
for (room_id, room_info) in &changes.room_infos {
|
for (room_id, room_info) in &changes.room_infos {
|
||||||
if let Some(room) = self.store.get_bare_room(&room_id) {
|
if let Some(room) = self.store.get_room(&room_id) {
|
||||||
room.update_summary(room_info.clone())
|
room.update_summary(room_info.clone())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -958,7 +958,7 @@ impl BaseClient {
|
||||||
.collect();
|
.collect();
|
||||||
let mut ambiguity_cache = AmbiguityCache::new(self.store.clone());
|
let mut ambiguity_cache = AmbiguityCache::new(self.store.clone());
|
||||||
|
|
||||||
if let Some(room) = self.store.get_bare_room(room_id) {
|
if let Some(room) = self.store.get_room(room_id) {
|
||||||
let mut room_info = room.clone_info();
|
let mut room_info = room.clone_info();
|
||||||
room_info.mark_members_synced();
|
room_info.mark_members_synced();
|
||||||
|
|
||||||
|
|
|
@ -291,11 +291,6 @@ impl Store {
|
||||||
Ok((Self::new(Box::new(inner.clone())), inner.inner))
|
Ok((Self::new(Box::new(inner.clone())), inner.inner))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_bare_room(&self, room_id: &RoomId) -> Option<Room> {
|
|
||||||
#[allow(clippy::map_clone)]
|
|
||||||
self.rooms.get(room_id).map(|r| r.clone())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get all the rooms this store knows about.
|
/// Get all the rooms this store knows about.
|
||||||
pub fn get_rooms(&self) -> Vec<Room> {
|
pub fn get_rooms(&self) -> Vec<Room> {
|
||||||
self.rooms.iter().filter_map(|r| self.get_room(r.key())).collect()
|
self.rooms.iter().filter_map(|r| self.get_room(r.key())).collect()
|
||||||
|
@ -303,15 +298,17 @@ impl Store {
|
||||||
|
|
||||||
/// Get the room with the given room id.
|
/// Get the room with the given room id.
|
||||||
pub fn get_room(&self, room_id: &RoomId) -> Option<Room> {
|
pub fn get_room(&self, room_id: &RoomId) -> Option<Room> {
|
||||||
self.get_bare_room(room_id).and_then(|r| match r.room_type() {
|
self.rooms
|
||||||
RoomType::Joined => Some(r),
|
.get(room_id)
|
||||||
RoomType::Left => Some(r),
|
.and_then(|r| match r.room_type() {
|
||||||
|
RoomType::Joined => Some(r.clone()),
|
||||||
|
RoomType::Left => Some(r.clone()),
|
||||||
RoomType::Invited => self.get_stripped_room(room_id),
|
RoomType::Invited => self.get_stripped_room(room_id),
|
||||||
})
|
})
|
||||||
|
.or_else(|| self.get_stripped_room(room_id))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_stripped_room(&self, room_id: &RoomId) -> Option<Room> {
|
fn get_stripped_room(&self, room_id: &RoomId) -> Option<Room> {
|
||||||
#[allow(clippy::map_clone)]
|
|
||||||
self.stripped_rooms.get(room_id).map(|r| r.clone())
|
self.stripped_rooms.get(room_id).map(|r| r.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,7 +401,7 @@ impl StateChanges {
|
||||||
|
|
||||||
/// Update the `StateChanges` struct with the given `RoomInfo`.
|
/// Update the `StateChanges` struct with the given `RoomInfo`.
|
||||||
pub fn add_stripped_room(&mut self, room: RoomInfo) {
|
pub fn add_stripped_room(&mut self, room: RoomInfo) {
|
||||||
self.invited_room_info.insert(room.room_id.as_ref().to_owned(), room);
|
self.room_infos.insert(room.room_id.as_ref().to_owned(), room);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Update the `StateChanges` struct with the given `AnyBasicEvent`.
|
/// Update the `StateChanges` struct with the given `AnyBasicEvent`.
|
||||||
|
|
|
@ -720,7 +720,7 @@ lazy_static! {
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref INVITE_SYNC: JsonValue = json!({
|
pub static ref INVITE_SYNC: JsonValue = json!({
|
||||||
"device_one_time_keys_count": {},
|
"device_one_time_keys_count": {},
|
||||||
"next_batch": "s526_47314_0_7_1_1_1_11444_1",
|
"next_batch": "s526_47314_0_7_1_1_1_11444_2",
|
||||||
"device_lists": {
|
"device_lists": {
|
||||||
"changed": [
|
"changed": [
|
||||||
"@example:example.org"
|
"@example:example.org"
|
||||||
|
|
Loading…
Reference in New Issue