@@ -37,7 +37,7 @@ use ui::{
3737} ;
3838use util:: { ResultExt , TryFutureExt , maybe} ;
3939use workspace:: {
40- Deafen , LeaveCall , Mute , OpenChannelNotes , ScreenShare , ShareProject , Workspace ,
40+ CopyRoomId , Deafen , LeaveCall , Mute , OpenChannelNotes , ScreenShare , ShareProject , Workspace ,
4141 dock:: { DockPosition , Panel , PanelEvent } ,
4242 notifications:: { DetachAndPromptErr , NotifyResultExt } ,
4343} ;
@@ -128,6 +128,32 @@ pub fn init(cx: &mut App) {
128128 workspace. register_action ( |_, _: & LeaveCall , window, cx| {
129129 CollabPanel :: leave_call ( window, cx) ;
130130 } ) ;
131+ workspace. register_action ( |workspace, _: & CopyRoomId , window, cx| {
132+ use workspace:: notifications:: { NotificationId , NotifyTaskExt as _} ;
133+
134+ struct RoomIdCopiedToast ;
135+
136+ if let Some ( room) = ActiveCall :: global ( cx) . read ( cx) . room ( ) {
137+ let romo_id_fut = room. read ( cx) . room_id ( ) ;
138+ cx. spawn ( async move |workspace, cx| {
139+ let room_id = romo_id_fut. await . context ( "Failed to get livekit room" ) ?;
140+ workspace. update ( cx, |workspace, cx| {
141+ cx. write_to_clipboard ( ClipboardItem :: new_string ( room_id) ) ;
142+ workspace. show_toast (
143+ workspace:: Toast :: new (
144+ NotificationId :: unique :: < RoomIdCopiedToast > ( ) ,
145+ "Room ID copied to clipboard" ,
146+ )
147+ . autohide ( ) ,
148+ cx,
149+ ) ;
150+ } )
151+ } )
152+ . detach_and_notify_err ( window, cx) ;
153+ } else {
154+ workspace. show_error ( & "There’s no active call; join one first." , cx) ;
155+ }
156+ } ) ;
131157 workspace. register_action ( |workspace, _: & ShareProject , window, cx| {
132158 let project = workspace. project ( ) . clone ( ) ;
133159 println ! ( "{project:?}" ) ;
0 commit comments