Execute MCP server toggle (called from main loop after render)
(
&mut self,
server_id: &str,
chat_view: &mut ChatView,
chat_state: &mut ChatState,
rt_handle: &tokio::runtime::Handle,
)
| 2338 | |
| 2339 | /// Execute MCP server toggle (called from main loop after render) |
| 2340 | fn execute_mcp_toggle( |
| 2341 | &mut self, |
| 2342 | server_id: &str, |
| 2343 | chat_view: &mut ChatView, |
| 2344 | chat_state: &mut ChatState, |
| 2345 | rt_handle: &tokio::runtime::Handle, |
| 2346 | ) { |
| 2347 | let mcp_service = match crate::get_mcp_service() { |
| 2348 | Some(svc) => svc.clone(), |
| 2349 | None => { |
| 2350 | chat_state.add_system_message("MCP service not initialized".to_string()); |
| 2351 | chat_view.mcp_selector_set_loading(None); |
| 2352 | return; |
| 2353 | } |
| 2354 | }; |
| 2355 | |
| 2356 | let server_manager = mcp_service.server_manager(); |
| 2357 | let task_server_id = server_id.to_string(); |
| 2358 | let tracked_server_id = task_server_id.clone(); |
| 2359 | |
| 2360 | let handle = rt_handle.spawn(async move { |
| 2361 | let status = server_manager.get_server_status(&task_server_id).await; |
| 2362 | match status { |
| 2363 | Ok(bitfun_core::service::mcp::MCPServerStatus::Connected) |
| 2364 | | Ok(bitfun_core::service::mcp::MCPServerStatus::Healthy) => { |
| 2365 | server_manager.stop_server(&task_server_id).await |
| 2366 | } |
| 2367 | _ => server_manager.start_server(&task_server_id).await, |
| 2368 | } |
| 2369 | }); |
| 2370 | |
| 2371 | self.pending_mcp_tasks.push(PendingMcpTask::Toggle { |
| 2372 | server_id: tracked_server_id, |
| 2373 | handle, |
| 2374 | }); |
| 2375 | } |
| 2376 | |
| 2377 | fn is_mcp_server_task_running(&self, server_id: &str) -> bool { |
| 2378 | self.pending_mcp_tasks.iter().any(|task| match task { |
no test coverage detected