Skip to main content

Mountain/Command/SourceControlManagement/
GetSCMResourceChanges.rs

1
2//! Tauri command - list resources for a given SCM provider. The
3//! resources map is keyed by `(group_id, …)`; we flatten across
4//! groups and filter by `ProviderHandle == ProviderIdentifier`.
5
6use std::sync::Arc;
7
8use serde_json::{Value, json};
9use tauri::{State, command};
10
11use crate::{
12	ApplicationState::State::ApplicationState::{ApplicationState, MapLockError},
13	dev_log,
14};
15
16#[command]
17pub async fn GetSCMResourceChanges(
18	State:State<'_, Arc<ApplicationState>>,
19
20	ProviderIdentifier:String,
21) -> Result<Value, String> {
22	dev_log!("commands", "getting resource changes for provider: {}", ProviderIdentifier);
23
24	let resources_map = State
25		.Feature
26		.Markers
27		.SourceControlManagementResources
28		.lock()
29		.map_err(MapLockError)
30		.map_err(|Error| Error.to_string())?
31		.clone();
32
33	let provider_handle_u32 = ProviderIdentifier.parse::<u32>().unwrap_or(0);
34
35	let ProviderResources:Vec<_> = resources_map
36		.iter()
37		.flat_map(|(_group_id, group_resources)| group_resources.values())
38		.flat_map(|vec_resources| vec_resources.iter())
39		.filter(|r| r.ProviderHandle == provider_handle_u32)
40		.cloned()
41		.collect();
42
43	Ok(json!({ "resources": ProviderResources }))
44}