diff --git a/labs/multiverse/src/widgets/room_view/input.rs b/labs/multiverse/src/widgets/room_view/input.rs index 00841150f..f4d4631c9 100644 --- a/labs/multiverse/src/widgets/room_view/input.rs +++ b/labs/multiverse/src/widgets/room_view/input.rs @@ -15,6 +15,7 @@ struct Cli { #[derive(Debug, Subcommand)] pub enum Command { Invite { user_id: String }, + Leave, } pub enum MessageOrCommand { diff --git a/labs/multiverse/src/widgets/room_view/mod.rs b/labs/multiverse/src/widgets/room_view/mod.rs index 05199fc66..ffed91c15 100644 --- a/labs/multiverse/src/widgets/room_view/mod.rs +++ b/labs/multiverse/src/widgets/room_view/mod.rs @@ -300,9 +300,28 @@ impl RoomView { } } + async fn leave_room(&mut self) { + let Some(room) = self + .selected_room + .as_deref() + .and_then(|room_id| self.ui_rooms.lock().get(room_id).cloned()) + else { + self.status_handle + .set_message(format!("Coulnd't find the room object to leave the room")); + return; + }; + + let _ = room.leave().await.inspect_err(|e| { + self.status_handle.set_message(format!("Couldn't leave the room {e:?}")) + }); + + self.input.clear(); + } + async fn handle_command(&mut self, command: input::Command) { match command { input::Command::Invite { user_id } => self.invite_member(&user_id).await, + input::Command::Leave => self.leave_room().await, } }