Set current remote workspace
(
&self,
workspace: RemoteWorkspace,
)
| 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 |
no test coverage detected