MCPcopy Create free account
hub / github.com/GCWing/BitFun / set_remote_workspace

Method set_remote_workspace

src/apps/desktop/src/api/app_state.rs:397–453  ·  view source on GitHub ↗

Set current remote workspace

(
        &self,
        workspace: RemoteWorkspace,
    )

Source from the content-addressed store, hash-verified

395
396 /// Set current remote workspace
397 pub async fn set_remote_workspace(
398 &self,
399 workspace: RemoteWorkspace,
400 ) -> Result<(), SSHServiceError> {
401 // Update local state
402 *self.remote_workspace.write().await = Some(workspace.clone());
403
404 // Persist to SSHConnectionManager for restoration on restart
405 if let Ok(manager) = self.get_ssh_manager_async().await {
406 let core_workspace = bitfun_core::service::remote_ssh::RemoteWorkspace {
407 connection_id: workspace.connection_id.clone(),
408 remote_path: workspace.remote_path.clone(),
409 connection_name: workspace.connection_name.clone(),
410 ssh_host: workspace.ssh_host.clone(),
411 };
412 if let Err(e) = manager.set_remote_workspace(core_workspace).await {
413 log::warn!("Failed to persist remote workspace: {}", e);
414 }
415 }
416
417 // Register in the global workspace registry
418 let state_manager = init_remote_workspace_manager();
419
420 // Ensure shared services are set (idempotent if already set)
421 let manager = self.get_ssh_manager_async().await?;
422 let fs = self.get_remote_file_service_async().await?;
423 let terminal = self.get_remote_terminal_manager_async().await?;
424
425 state_manager.set_ssh_manager(manager.clone()).await;
426 state_manager.set_file_service(fs.clone()).await;
427 state_manager.set_terminal_manager(terminal.clone()).await;
428
429 // Register this workspace (does not overwrite other workspaces)
430 log::info!(
431 "register_remote_workspace: connection_id={}, remote_path={}, connection_name={}",
432 workspace.connection_id,
433 workspace.remote_path,
434 workspace.connection_name
435 );
436 state_manager
437 .register_remote_workspace(
438 workspace.remote_path.clone(),
439 workspace.connection_id.clone(),
440 workspace.connection_name.clone(),
441 workspace.ssh_host.clone(),
442 )
443 .await;
444 state_manager
445 .set_active_connection_hint(Some(workspace.connection_id.clone()))
446 .await;
447 log::info!(
448 "Remote workspace registered: {} on {}",
449 workspace.remote_path,
450 workspace.connection_name
451 );
452 Ok(())
453 }
454

Callers 3

open_remote_workspaceFunction · 0.45
remote_open_workspaceFunction · 0.45

Calls 11

get_ssh_manager_asyncMethod · 0.80
set_file_serviceMethod · 0.80
set_terminal_managerMethod · 0.80
writeMethod · 0.45
cloneMethod · 0.45
set_ssh_managerMethod · 0.45

Tested by

no test coverage detected