(
&mut self,
chat_view: &mut ChatView,
chat_state: &mut ChatState,
rt_handle: &tokio::runtime::Handle,
)
| 2389 | } |
| 2390 | |
| 2391 | fn poll_mcp_task_completion( |
| 2392 | &mut self, |
| 2393 | chat_view: &mut ChatView, |
| 2394 | chat_state: &mut ChatState, |
| 2395 | rt_handle: &tokio::runtime::Handle, |
| 2396 | ) -> bool { |
| 2397 | let mut changed = false; |
| 2398 | let mut i = 0; |
| 2399 | while i < self.pending_mcp_tasks.len() { |
| 2400 | let finished = match &self.pending_mcp_tasks[i] { |
| 2401 | PendingMcpTask::Toggle { handle, .. } |
| 2402 | | PendingMcpTask::Add { handle, .. } |
| 2403 | | PendingMcpTask::Delete { handle, .. } => handle.is_finished(), |
| 2404 | }; |
| 2405 | if !finished { |
| 2406 | i += 1; |
| 2407 | continue; |
| 2408 | } |
| 2409 | |
| 2410 | let task = self.pending_mcp_tasks.swap_remove(i); |
| 2411 | changed = true; |
| 2412 | match task { |
| 2413 | PendingMcpTask::Toggle { server_id, handle } => { |
| 2414 | let join_result = tokio::task::block_in_place(|| { |
| 2415 | rt_handle.block_on(async move { handle.await }) |
| 2416 | }); |
| 2417 | |
| 2418 | match join_result { |
| 2419 | Ok(Ok(())) => {} |
| 2420 | Ok(Err(e)) => { |
| 2421 | tracing::error!("Failed to toggle MCP server {}: {}", server_id, e); |
| 2422 | chat_state.add_system_message(format!( |
| 2423 | "Failed to toggle MCP server '{}': {}", |
| 2424 | server_id, e |
| 2425 | )); |
| 2426 | } |
| 2427 | Err(e) => { |
| 2428 | tracing::error!("MCP toggle task join error for {}: {}", server_id, e); |
| 2429 | chat_state.add_system_message(format!( |
| 2430 | "MCP server '{}' task failed: {}", |
| 2431 | server_id, e |
| 2432 | )); |
| 2433 | } |
| 2434 | } |
| 2435 | |
| 2436 | chat_view.mcp_selector_set_loading(None); |
| 2437 | let updated_items = self.get_mcp_items(rt_handle); |
| 2438 | chat_view.mcp_selector_update_items(updated_items); |
| 2439 | } |
| 2440 | PendingMcpTask::Add { name, handle } => { |
| 2441 | let join_result = tokio::task::block_in_place(|| { |
| 2442 | rt_handle.block_on(async move { handle.await }) |
| 2443 | }); |
| 2444 | |
| 2445 | match join_result { |
| 2446 | Ok(Ok(())) => { |
| 2447 | chat_state.add_system_message(format!( |
| 2448 | "MCP server '{}' added and started", |
no test coverage detected