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

Method poll_mcp_task_completion

src/apps/cli/src/modes/chat.rs:2391–2499  ·  view source on GitHub ↗
(
        &mut self,
        chat_view: &mut ChatView,
        chat_state: &mut ChatState,
        rt_handle: &tokio::runtime::Handle,
    )

Source from the content-addressed store, hash-verified

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",

Callers 1

runMethod · 0.80

Calls 9

add_system_messageMethod · 0.80
get_mcp_itemsMethod · 0.80
hide_mcp_selectorMethod · 0.80
lenMethod · 0.45
show_mcp_selectorMethod · 0.45
set_statusMethod · 0.45
is_emptyMethod · 0.45

Tested by

no test coverage detected