Browse Source

Move leave() from RoomMap to RoomEntry.

main
Titouan Rigoudy 2 years ago
parent
commit
a271ef85eb
2 changed files with 44 additions and 20 deletions
  1. +9
    -3
      client/src/client.rs
  2. +35
    -17
      client/src/room/map.rs

+ 9
- 3
client/src/client.rs View File

@ -577,9 +577,15 @@ impl Client {
&mut self,
response: server::RoomLeaveResponse,
) {
if let Err(err) = self.rooms.leave(&response.room_name) {
error!("RoomLeaveResponse: {}", err);
}
let room = match self.rooms.get_mut_strict(&response.room_name) {
Ok(room) => room,
Err(err) => {
error!("RoomLeaveResponse: {}", err);
return;
}
};
room.leave();
self.send_to_controller(control::Response::RoomLeaveResponse(
control::RoomLeaveResponse {


+ 35
- 17
client/src/room/map.rs View File

@ -112,6 +112,20 @@ impl RoomEntry {
)),
}
}
/// Records that we have now left the given room.
pub fn leave(&mut self) {
match self.state.membership {
RoomMembership::Leaving => info!("Left room {:?}", self.name),
membership => warn!(
"Left room {:?} with wrong membership: {:?}",
self.name, membership
),
}
self.state.membership = RoomMembership::NonMember;
}
}
/// Contains the mapping from room names to room data and provides a clean
@ -235,23 +249,6 @@ impl RoomMap {
// TODO: Move remaining methods to `RoomEntry`.
/// Records that we have now left the given room.
pub fn leave(&mut self, room_name: &str) -> Result<(), RoomError> {
let room = self.get_mut_strict(room_name)?;
match room.state.membership {
RoomMembership::Leaving => info!("Left room {:?}", room_name),
membership => warn!(
"Left room {:?} with wrong membership: {:?}",
room_name, membership
),
}
room.state.membership = RoomMembership::NonMember;
Ok(())
}
/// Inserts the given user in the given room's set of members.
/// Returns an error if the room is not found.
pub fn insert_member(
@ -394,6 +391,27 @@ mod tests {
);
}
#[test]
fn entry_leave() {
let mut room = RoomEntry::new(
"bleep".to_string(),
RoomState {
membership: RoomMembership::Member,
..RoomState::default()
},
);
room.leave();
assert_eq!(
room.into_state(),
RoomState {
membership: RoomMembership::NonMember,
..RoomState::default()
}
);
}
#[test]
fn map_new_is_empty() {
assert_eq!(RoomMap::new().get_room_list(), vec![]);


Loading…
Cancel
Save