Show current user as follower when following in unshared projects

This commit is contained in:
Max Brunsfeld 2023-09-29 15:08:25 -07:00
parent 948871969f
commit 7adaa2046d

View file

@ -889,22 +889,17 @@ impl CollabTitlebarItem {
let user_id = user.id; let user_id = user.id;
let project_id = workspace.read(cx).project().read(cx).remote_id(); let project_id = workspace.read(cx).project().read(cx).remote_id();
let room = ActiveCall::global(cx).read(cx).room().cloned(); let room = ActiveCall::global(cx).read(cx).room().cloned();
let is_being_followed = workspace.read(cx).is_being_followed(peer_id); let self_peer_id = workspace.read(cx).client().peer_id();
let followed_by_self = room let self_following = workspace.read(cx).is_being_followed(peer_id);
.as_ref() let self_following_initialized = self_following
.and_then(|room| { && room.as_ref().map_or(false, |room| match project_id {
Some( None => true,
is_being_followed Some(project_id) => room
&& room .read(cx)
.read(cx) .followers_for(peer_id, project_id)
.followers_for(peer_id, project_id?) .iter()
.iter() .any(|&follower| Some(follower) == self_peer_id),
.any(|&follower| { });
Some(follower) == workspace.read(cx).client().peer_id()
}),
)
})
.unwrap_or(false);
let leader_style = theme.titlebar.leader_avatar; let leader_style = theme.titlebar.leader_avatar;
let follower_style = theme.titlebar.follower_avatar; let follower_style = theme.titlebar.follower_avatar;
@ -930,7 +925,7 @@ impl CollabTitlebarItem {
.get(&user_id) .get(&user_id)
.copied(); .copied();
if let Some(participant_index) = participant_index { if let Some(participant_index) = participant_index {
if followed_by_self { if self_following_initialized {
let selection = theme let selection = theme
.editor .editor
.selection_style_for_room_participant(participant_index.0) .selection_style_for_room_participant(participant_index.0)
@ -960,31 +955,14 @@ impl CollabTitlebarItem {
let project_id = project_id?; let project_id = project_id?;
let room = room?.read(cx); let room = room?.read(cx);
let followers = room.followers_for(peer_id, project_id); let followers = room.followers_for(peer_id, project_id);
Some(followers.into_iter().filter_map(|&follower| {
Some(followers.into_iter().flat_map(|&follower| { if Some(follower) == self_peer_id {
let remote_participant = return None;
room.remote_participant_for_peer_id(follower); }
let participant =
let avatar = remote_participant room.remote_participant_for_peer_id(follower)?;
.and_then(|p| p.user.avatar.clone())
.or_else(|| {
if follower
== workspace.read(cx).client().peer_id()?
{
workspace
.read(cx)
.user_store()
.read(cx)
.current_user()?
.avatar
.clone()
} else {
None
}
})?;
Some(Self::render_face( Some(Self::render_face(
avatar.clone(), participant.user.avatar.clone()?,
follower_style, follower_style,
background_color, background_color,
None, None,
@ -993,6 +971,18 @@ impl CollabTitlebarItem {
})() })()
.into_iter() .into_iter()
.flatten(), .flatten(),
)
.with_children(
self_following_initialized
.then(|| self.user_store.read(cx).current_user())
.and_then(|user| {
Some(Self::render_face(
user?.avatar.clone()?,
follower_style,
background_color,
None,
))
}),
); );
let mut container = face_pile let mut container = face_pile
@ -1000,7 +990,7 @@ impl CollabTitlebarItem {
.with_style(theme.titlebar.leader_selection); .with_style(theme.titlebar.leader_selection);
if let Some(participant_index) = participant_index { if let Some(participant_index) = participant_index {
if followed_by_self { if self_following_initialized {
let color = theme let color = theme
.editor .editor
.selection_style_for_room_participant(participant_index.0) .selection_style_for_room_participant(participant_index.0)
@ -1067,7 +1057,7 @@ impl CollabTitlebarItem {
}) })
.with_tooltip::<TitlebarParticipant>( .with_tooltip::<TitlebarParticipant>(
peer_id.as_u64() as usize, peer_id.as_u64() as usize,
if is_being_followed { if self_following {
format!("Unfollow {}", user.github_login) format!("Unfollow {}", user.github_login)
} else { } else {
format!("Follow {}", user.github_login) format!("Follow {}", user.github_login)