mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-24 17:28:40 +00:00
Show current user as follower when following in unshared projects
This commit is contained in:
parent
948871969f
commit
7adaa2046d
1 changed files with 33 additions and 43 deletions
|
@ -889,22 +889,17 @@ impl CollabTitlebarItem {
|
|||
let user_id = user.id;
|
||||
let project_id = workspace.read(cx).project().read(cx).remote_id();
|
||||
let room = ActiveCall::global(cx).read(cx).room().cloned();
|
||||
let is_being_followed = workspace.read(cx).is_being_followed(peer_id);
|
||||
let followed_by_self = room
|
||||
.as_ref()
|
||||
.and_then(|room| {
|
||||
Some(
|
||||
is_being_followed
|
||||
&& room
|
||||
.read(cx)
|
||||
.followers_for(peer_id, project_id?)
|
||||
.iter()
|
||||
.any(|&follower| {
|
||||
Some(follower) == workspace.read(cx).client().peer_id()
|
||||
}),
|
||||
)
|
||||
})
|
||||
.unwrap_or(false);
|
||||
let self_peer_id = workspace.read(cx).client().peer_id();
|
||||
let self_following = workspace.read(cx).is_being_followed(peer_id);
|
||||
let self_following_initialized = self_following
|
||||
&& room.as_ref().map_or(false, |room| match project_id {
|
||||
None => true,
|
||||
Some(project_id) => room
|
||||
.read(cx)
|
||||
.followers_for(peer_id, project_id)
|
||||
.iter()
|
||||
.any(|&follower| Some(follower) == self_peer_id),
|
||||
});
|
||||
|
||||
let leader_style = theme.titlebar.leader_avatar;
|
||||
let follower_style = theme.titlebar.follower_avatar;
|
||||
|
@ -930,7 +925,7 @@ impl CollabTitlebarItem {
|
|||
.get(&user_id)
|
||||
.copied();
|
||||
if let Some(participant_index) = participant_index {
|
||||
if followed_by_self {
|
||||
if self_following_initialized {
|
||||
let selection = theme
|
||||
.editor
|
||||
.selection_style_for_room_participant(participant_index.0)
|
||||
|
@ -960,31 +955,14 @@ impl CollabTitlebarItem {
|
|||
let project_id = project_id?;
|
||||
let room = room?.read(cx);
|
||||
let followers = room.followers_for(peer_id, project_id);
|
||||
|
||||
Some(followers.into_iter().flat_map(|&follower| {
|
||||
let remote_participant =
|
||||
room.remote_participant_for_peer_id(follower);
|
||||
|
||||
let avatar = remote_participant
|
||||
.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(followers.into_iter().filter_map(|&follower| {
|
||||
if Some(follower) == self_peer_id {
|
||||
return None;
|
||||
}
|
||||
let participant =
|
||||
room.remote_participant_for_peer_id(follower)?;
|
||||
Some(Self::render_face(
|
||||
avatar.clone(),
|
||||
participant.user.avatar.clone()?,
|
||||
follower_style,
|
||||
background_color,
|
||||
None,
|
||||
|
@ -993,6 +971,18 @@ impl CollabTitlebarItem {
|
|||
})()
|
||||
.into_iter()
|
||||
.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
|
||||
|
@ -1000,7 +990,7 @@ impl CollabTitlebarItem {
|
|||
.with_style(theme.titlebar.leader_selection);
|
||||
|
||||
if let Some(participant_index) = participant_index {
|
||||
if followed_by_self {
|
||||
if self_following_initialized {
|
||||
let color = theme
|
||||
.editor
|
||||
.selection_style_for_room_participant(participant_index.0)
|
||||
|
@ -1067,7 +1057,7 @@ impl CollabTitlebarItem {
|
|||
})
|
||||
.with_tooltip::<TitlebarParticipant>(
|
||||
peer_id.as_u64() as usize,
|
||||
if is_being_followed {
|
||||
if self_following {
|
||||
format!("Unfollow {}", user.github_login)
|
||||
} else {
|
||||
format!("Follow {}", user.github_login)
|
||||
|
|
Loading…
Reference in a new issue