From dd0edcd20336ce83bb01728b13e324a958bd07a1 Mon Sep 17 00:00:00 2001 From: Mikayla Date: Wed, 4 Oct 2023 11:46:08 -0700 Subject: [PATCH] Changed the on-click behavior of joining a channel to not open the chat, and only open 1 project instead of all projects Co-authored-by: conrad Co-authored-by: max --- crates/call/src/room.rs | 12 +++++------- crates/collab_ui/src/collab_panel.rs | 25 +++++++------------------ 2 files changed, 12 insertions(+), 25 deletions(-) diff --git a/crates/call/src/room.rs b/crates/call/src/room.rs index ce01099576..72db174d72 100644 --- a/crates/call/src/room.rs +++ b/crates/call/src/room.rs @@ -598,9 +598,8 @@ impl Room { .map_or(&[], |v| v.as_slice()) } - /// projects_to_join returns a list of shared projects sorted such - /// that the most 'active' projects appear last. - pub fn projects_to_join(&self) -> Vec<(u64, u64)> { + /// Returns the most 'active' projects, defined as most people in the project + pub fn most_active_project(&self) -> Option<(u64, u64)> { let mut projects = HashMap::default(); let mut hosts = HashMap::default(); for participant in self.remote_participants.values() { @@ -617,12 +616,11 @@ impl Room { } let mut pairs: Vec<(u64, usize)> = projects.into_iter().collect(); - pairs.sort_by_key(|(_, count)| 0 - *count as i32); + pairs.sort_by_key(|(_, count)| *count as i32); pairs - .into_iter() - .map(|(project_id, _)| (project_id, hosts[&project_id])) - .collect() + .first() + .map(|(project_id, _)| (*project_id, hosts[&project_id])) } async fn handle_room_updated( diff --git a/crates/collab_ui/src/collab_panel.rs b/crates/collab_ui/src/collab_panel.rs index 6214eecac2..8933067109 100644 --- a/crates/collab_ui/src/collab_panel.rs +++ b/crates/collab_ui/src/collab_panel.rs @@ -3208,27 +3208,16 @@ impl CollabPanel { .update(&mut cx, |call, cx| call.join_channel(channel_id, cx)) .await?; - let tasks = room.update(&mut cx, |room, cx| { - let Some(workspace) = workspace.upgrade(cx) else { - return vec![]; - }; - let projects = room.projects_to_join(); - - if projects.is_empty() { - ChannelView::open(channel_id, workspace, cx).detach(); - return vec![]; - } - room.projects_to_join() - .into_iter() - .map(|(project_id, user_id)| { - let app_state = workspace.read(cx).app_state().clone(); - workspace::join_remote_project(project_id, user_id, app_state, cx) - }) - .collect() + let task = room.update(&mut cx, |room, cx| { + let workspace = workspace.upgrade(cx)?; + let (project, host) = room.most_active_project()?; + let app_state = workspace.read(cx).app_state().clone(); + Some(workspace::join_remote_project(project, host, app_state, cx)) }); - for task in tasks { + if let Some(task) = task { task.await?; } + anyhow::Ok(()) }) .detach_and_log_err(cx);