This commit is contained in:
Nathan Sobo 2023-10-31 16:15:30 -06:00
parent fd15551d97
commit 0ecf6bde73

View file

@ -23,9 +23,9 @@ use futures::{
FutureExt,
};
use gpui2::{
AnyModel, AnyView, AppContext, AsyncAppContext, AsyncWindowContext, DisplayId, EventEmitter,
MainThread, Model, ModelContext, Subscription, Task, View, ViewContext, VisualContext,
WeakModel, WeakView, WindowBounds, WindowHandle, WindowOptions,
AnyModel, AnyView, AppContext, AsyncAppContext, AsyncWindowContext, DisplayId, Entity,
EventEmitter, MainThread, Model, ModelContext, Subscription, Task, View, ViewContext,
VisualContext, WeakModel, WeakView, WindowBounds, WindowContext, WindowHandle, WindowOptions,
};
use item::{FollowableItem, FollowableItemHandle, Item, ItemHandle, ProjectItem};
use language2::LanguageRegistry;
@ -426,7 +426,7 @@ pub struct AppState {
}
pub struct WorkspaceStore {
workspaces: HashSet<WeakView<Workspace>>,
workspaces: HashSet<WindowHandle<Workspace>>,
followers: Vec<Follower>,
client: Arc<Client>,
_subscriptions: Vec<client2::Subscription>,
@ -3023,7 +3023,7 @@ impl Workspace {
&self,
project_only: bool,
update: proto::update_followers::Variant,
cx: &mut AppContext,
cx: &mut WindowContext,
) -> Option<()> {
let project_id = if project_only {
self.project.read(cx).remote_id()
@ -3895,17 +3895,16 @@ impl EventEmitter for Workspace {
impl WorkspaceStore {
pub fn new(client: Arc<Client>, cx: &mut ModelContext<Self>) -> Self {
// Self {
// workspaces: Default::default(),
// followers: Default::default(),
// _subscriptions: vec![
// client.add_request_handler(cx.weak_model(), Self::handle_follow),
// client.add_message_handler(cx.weak_model(), Self::handle_unfollow),
// client.add_message_handler(cx.weak_model(), Self::handle_update_followers),
// ],
// client,
// }
todo!()
Self {
workspaces: Default::default(),
followers: Default::default(),
_subscriptions: vec![],
// client.add_request_handler(cx.weak_model(), Self::handle_follow),
// client.add_message_handler(cx.weak_model(), Self::handle_unfollow),
// client.add_message_handler(cx.weak_model(), Self::handle_update_followers),
// ],
client,
}
}
pub fn update_followers(
@ -3943,53 +3942,50 @@ impl WorkspaceStore {
.log_err()
}
// async fn handle_follow(
// this: Model<Self>,
// envelope: TypedEnvelope<proto::Follow>,
// _: Arc<Client>,
// mut cx: AsyncAppContext,
// ) -> Result<proto::FollowResponse> {
// this.update(&mut cx, |this, cx| {
// let follower = Follower {
// project_id: envelope.payload.project_id,
// peer_id: envelope.original_sender_id()?,
// };
// let active_project = ActiveCall::global(cx)
// .read(cx)
// .location()
// .map(|project| project.id());
async fn handle_follow(
this: Model<Self>,
envelope: TypedEnvelope<proto::Follow>,
_: Arc<Client>,
mut cx: AsyncAppContext,
) -> Result<proto::FollowResponse> {
this.update(&mut cx, |this, cx| {
let follower = Follower {
project_id: envelope.payload.project_id,
peer_id: envelope.original_sender_id()?,
};
let active_project = ActiveCall::global(cx).read(cx).location();
// let mut response = proto::FollowResponse::default();
// for workspace in &this.workspaces {
// let Some(workspace) = workspace.upgrade(cx) else {
// continue;
// };
let mut response = proto::FollowResponse::default();
for workspace in &this.workspaces {
let Some(workspace) = workspace.upgrade(cx) else {
continue;
};
// workspace.update(cx.as_mut(), |workspace, cx| {
// let handler_response = workspace.handle_follow(follower.project_id, cx);
// if response.views.is_empty() {
// response.views = handler_response.views;
// } else {
// response.views.extend_from_slice(&handler_response.views);
// }
workspace.update(cx, |workspace, cx| {
let handler_response = workspace.handle_follow(follower.project_id, cx);
if response.views.is_empty() {
response.views = handler_response.views;
} else {
response.views.extend_from_slice(&handler_response.views);
}
// if let Some(active_view_id) = handler_response.active_view_id.clone() {
// if response.active_view_id.is_none()
// || Some(workspace.project.id()) == active_project
// {
// response.active_view_id = Some(active_view_id);
// }
// }
// });
// }
if let Some(active_view_id) = handler_response.active_view_id.clone() {
if response.active_view_id.is_none()
|| Some(workspace.project.downgrade()) == active_project
{
response.active_view_id = Some(active_view_id);
}
}
});
}
// if let Err(ix) = this.followers.binary_search(&follower) {
// this.followers.insert(ix, follower);
// }
if let Err(ix) = this.followers.binary_search(&follower) {
this.followers.insert(ix, follower);
}
// Ok(response)
// })
// }
Ok(response)
})?
}
async fn handle_unfollow(
model: Model<Self>,