mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-30 22:34:13 +00:00
WIP
This commit is contained in:
parent
fd15551d97
commit
0ecf6bde73
1 changed files with 54 additions and 58 deletions
|
@ -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>,
|
||||
|
|
Loading…
Reference in a new issue