Consolidate logic for protobuf message handling between ssh and web socket clients (#17185)
This is a refactor to prepare for adding LSP support in SSH remote projects. Release Notes: - N/A --------- Co-authored-by: Mikayla <mikayla@zed.dev> Co-authored-by: Conrad <conrad@zed.dev>
This commit is contained in:
parent
144793bf16
commit
b8e6098f60
20 changed files with 1002 additions and 963 deletions
|
@ -71,7 +71,7 @@ pub struct ProjectTransaction(pub HashMap<Model<Buffer>, language::Transaction>)
|
|||
impl EventEmitter<BufferStoreEvent> for BufferStore {}
|
||||
|
||||
impl BufferStore {
|
||||
pub fn init(client: &Arc<Client>) {
|
||||
pub fn init(client: &AnyProtoClient) {
|
||||
client.add_model_message_handler(Self::handle_buffer_reloaded);
|
||||
client.add_model_message_handler(Self::handle_buffer_saved);
|
||||
client.add_model_message_handler(Self::handle_update_buffer_file);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -65,7 +65,10 @@ use paths::{
|
|||
use prettier_support::{DefaultPrettier, PrettierInstance};
|
||||
use project_settings::{LspSettings, ProjectSettings};
|
||||
use remote::SshSession;
|
||||
use rpc::{proto::AnyProtoClient, ErrorCode};
|
||||
use rpc::{
|
||||
proto::{AnyProtoClient, SSH_PROJECT_ID},
|
||||
ErrorCode,
|
||||
};
|
||||
use search::{SearchQuery, SearchResult};
|
||||
use search_history::SearchHistory;
|
||||
use settings::{watch_config_file, Settings, SettingsLocation, SettingsStore};
|
||||
|
@ -574,6 +577,7 @@ impl Project {
|
|||
connection_manager::init(client.clone(), cx);
|
||||
Self::init_settings(cx);
|
||||
|
||||
let client: AnyProtoClient = client.clone().into();
|
||||
client.add_model_message_handler(Self::handle_add_collaborator);
|
||||
client.add_model_message_handler(Self::handle_update_project_collaborator);
|
||||
client.add_model_message_handler(Self::handle_remove_collaborator);
|
||||
|
@ -594,9 +598,9 @@ impl Project {
|
|||
client.add_model_request_handler(Self::handle_task_templates);
|
||||
client.add_model_message_handler(Self::handle_create_buffer_for_peer);
|
||||
|
||||
WorktreeStore::init(client);
|
||||
BufferStore::init(client);
|
||||
LspStore::init(client);
|
||||
WorktreeStore::init(&client);
|
||||
BufferStore::init(&client);
|
||||
LspStore::init(&client);
|
||||
}
|
||||
|
||||
pub fn local(
|
||||
|
@ -697,15 +701,19 @@ impl Project {
|
|||
) -> Model<Self> {
|
||||
let this = Self::local(client, node, user_store, languages, fs, None, cx);
|
||||
this.update(cx, |this, cx| {
|
||||
let buffer_store = this.buffer_store.downgrade();
|
||||
let client: AnyProtoClient = ssh.clone().into();
|
||||
|
||||
this.worktree_store.update(cx, |store, _cx| {
|
||||
store.set_upstream_client(ssh.clone().into());
|
||||
store.set_upstream_client(client.clone());
|
||||
});
|
||||
|
||||
ssh.add_message_handler(cx.weak_model(), Self::handle_update_worktree);
|
||||
ssh.add_message_handler(cx.weak_model(), Self::handle_create_buffer_for_peer);
|
||||
ssh.add_message_handler(buffer_store.clone(), BufferStore::handle_update_buffer_file);
|
||||
ssh.add_message_handler(buffer_store.clone(), BufferStore::handle_update_diff_base);
|
||||
ssh.subscribe_to_entity(SSH_PROJECT_ID, &cx.handle());
|
||||
ssh.subscribe_to_entity(SSH_PROJECT_ID, &this.buffer_store);
|
||||
ssh.subscribe_to_entity(SSH_PROJECT_ID, &this.worktree_store);
|
||||
client.add_model_message_handler(Self::handle_update_worktree);
|
||||
client.add_model_message_handler(Self::handle_create_buffer_for_peer);
|
||||
client.add_model_message_handler(BufferStore::handle_update_buffer_file);
|
||||
client.add_model_message_handler(BufferStore::handle_update_diff_base);
|
||||
|
||||
this.ssh_session = Some(ssh);
|
||||
});
|
||||
|
|
|
@ -5,7 +5,7 @@ use std::{
|
|||
};
|
||||
|
||||
use anyhow::{anyhow, Context as _, Result};
|
||||
use client::{Client, DevServerProjectId};
|
||||
use client::DevServerProjectId;
|
||||
use collections::{HashMap, HashSet};
|
||||
use fs::Fs;
|
||||
use futures::{
|
||||
|
@ -17,7 +17,7 @@ use gpui::{
|
|||
};
|
||||
use postage::oneshot;
|
||||
use rpc::{
|
||||
proto::{self, AnyProtoClient},
|
||||
proto::{self, AnyProtoClient, SSH_PROJECT_ID},
|
||||
TypedEnvelope,
|
||||
};
|
||||
use smol::{
|
||||
|
@ -58,12 +58,12 @@ pub enum WorktreeStoreEvent {
|
|||
impl EventEmitter<WorktreeStoreEvent> for WorktreeStore {}
|
||||
|
||||
impl WorktreeStore {
|
||||
pub fn init(client: &Arc<Client>) {
|
||||
client.add_model_request_handler(WorktreeStore::handle_create_project_entry);
|
||||
client.add_model_request_handler(WorktreeStore::handle_rename_project_entry);
|
||||
client.add_model_request_handler(WorktreeStore::handle_copy_project_entry);
|
||||
client.add_model_request_handler(WorktreeStore::handle_delete_project_entry);
|
||||
client.add_model_request_handler(WorktreeStore::handle_expand_project_entry);
|
||||
pub fn init(client: &AnyProtoClient) {
|
||||
client.add_model_request_handler(Self::handle_create_project_entry);
|
||||
client.add_model_request_handler(Self::handle_rename_project_entry);
|
||||
client.add_model_request_handler(Self::handle_copy_project_entry);
|
||||
client.add_model_request_handler(Self::handle_delete_project_entry);
|
||||
client.add_model_request_handler(Self::handle_expand_project_entry);
|
||||
}
|
||||
|
||||
pub fn new(retain_worktrees: bool, fs: Arc<dyn Fs>) -> Self {
|
||||
|
@ -188,7 +188,10 @@ impl WorktreeStore {
|
|||
let path = abs_path.to_string_lossy().to_string();
|
||||
cx.spawn(|this, mut cx| async move {
|
||||
let response = client
|
||||
.request(proto::AddWorktree { path: path.clone() })
|
||||
.request(proto::AddWorktree {
|
||||
project_id: SSH_PROJECT_ID,
|
||||
path: path.clone(),
|
||||
})
|
||||
.await?;
|
||||
let worktree = cx.update(|cx| {
|
||||
Worktree::remote(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue