MCPcopy Index your code
hub / github.com/NativeScript/SimDeck / list_simulators_cached

Function list_simulators_cached

packages/server/src/api/routes.rs:5501–5544  ·  view source on GitHub ↗
(
    state: AppState,
    force_refresh: bool,
)

Source from the content-addressed store, hash-verified

5499}
5500
5501async fn list_simulators_cached(
5502 state: AppState,
5503 force_refresh: bool,
5504) -> Result<Vec<crate::native::bridge::Simulator>, AppError> {
5505 {
5506 let guard = state.simulator_inventory.inner.lock().await;
5507 if !force_refresh {
5508 if let (Some(simulators), Some(updated_at)) = (&guard.simulators, guard.updated_at) {
5509 if updated_at.elapsed() <= SIMULATOR_INVENTORY_CACHE_TTL {
5510 return Ok(simulators.clone());
5511 }
5512 }
5513 }
5514 }
5515
5516 let inventory_timeout = if force_refresh {
5517 SIMULATOR_INVENTORY_FORCE_REFRESH_TIMEOUT
5518 } else {
5519 SIMULATOR_INVENTORY_TIMEOUT
5520 };
5521
5522 let simulators = match timeout(
5523 inventory_timeout,
5524 run_bridge_action(state.clone(), |bridge| bridge.list_simulators()),
5525 )
5526 .await
5527 {
5528 Ok(result) => result?,
5529 Err(_) => {
5530 tracing::warn!(
5531 timeout_seconds = inventory_timeout.as_secs(),
5532 force_refresh,
5533 "Timed out listing iOS simulators; returning cached inventory."
5534 );
5535 let guard = state.simulator_inventory.inner.lock().await;
5536 return Ok(guard.simulators.clone().unwrap_or_default());
5537 }
5538 };
5539
5540 let mut guard = state.simulator_inventory.inner.lock().await;
5541 guard.simulators = Some(simulators.clone());
5542 guard.updated_at = Some(Instant::now());
5543 Ok(simulators)
5544}
5545
5546async fn android_simulator_payload(state: AppState, udid: String) -> Result<Json<Value>, AppError> {
5547 let android_devices =

Callers 2

chrome_devtools_targetsFunction · 0.85
all_device_valuesFunction · 0.85

Calls 3

run_bridge_actionFunction · 0.85
list_simulatorsMethod · 0.80
cloneMethod · 0.65

Tested by

no test coverage detected