diff --git a/src/client.rs b/src/client.rs index 2611d27..36d435e 100644 --- a/src/client.rs +++ b/src/client.rs @@ -239,7 +239,8 @@ impl Client { } } - fn handle_join_room_response(&mut self, response: JoinRoomResponse) { + fn handle_join_room_response(&mut self, mut response: JoinRoomResponse) { + // First look up the room struct. let room = match self.rooms.get_mut(&response.room_name) { Some(room) => room, None => { @@ -250,6 +251,8 @@ impl Client { return; } }; + + // Log what's happening. if let room::Membership::Joining = room.membership { info!("Joined room \"{}\"", response.room_name); } else { @@ -258,8 +261,20 @@ impl Client { response.room_name, room.membership ); } + + // Update the room struct. room.membership = room::Membership::Member; room.user_count = response.users.len(); + room.owner = response.owner; + room.operators = response.operators; + for &(ref name, _) in response.users.iter() { + room.members.push(name.clone()); + } + + // Then update the user structs based on the info we just got. + for (name, user) in response.users.drain(..) { + self.users.insert(name, user); + } } fn handle_login_response(&mut self, login: LoginResponse) { diff --git a/src/user.rs b/src/user.rs index d03ffaf..b0f7b99 100644 --- a/src/user.rs +++ b/src/user.rs @@ -85,6 +85,11 @@ impl UserMap { self.map.get(name) } + /// Inserts the given user info for the given user name in the mapping. + pub fn insert(&mut self, name: String, user: User) { + self.map.insert(name, user); + } + /// Update the set of privileged users based on the last server response. pub fn update_privileges( &mut self, mut response: server::PrivilegedUsersResponse)