Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/SCM/
UpdateScmGroup.rs

1//! Forward resource-state updates from the Vine gRPC notification to Sky.
2//! Group label/metadata is already stored from register_scm_resource_group.
3
4use serde_json::json;
5use tauri::Emitter;
6use tonic::{Response, Status};
7
8use crate::{
9	RPC::CocoonService::CocoonServiceImpl,
10	Vine::Generated::{Empty, UpdateScmGroupRequest},
11	dev_log,
12};
13
14pub async fn Fn(Service:&CocoonServiceImpl, Request:UpdateScmGroupRequest) -> Result<Response<Empty>, Status> {
15	dev_log!(
16		"cocoon",
17		"[CocoonService] update_scm_group: provider={} group={}",
18		Request.provider_id,
19		Request.group_id
20	);
21
22	let ResourceStates:Vec<serde_json::Value> = Request
23		.resource_states
24		.iter()
25		.map(|RS| {
26			json!({
27				"uri": RS.uri.as_ref().map(|U| U.value.as_str()).unwrap_or(""),
28				"decorations": RS.decorations,
29			})
30		})
31		.collect();
32
33	// update_scm_group carries resource states, not group metadata.
34	// Emit directly to Sky so the SCM panel shows changed files.
35	// scmId + providerId both set so Sky's ResolveScmShim finds the shim.
36	let _ = Service.environment.ApplicationHandle.emit(
37		"sky://scm/updateGroup",
38		json!({
39			"scmId": Request.provider_id,
40			"providerId": Request.provider_id,
41			"groupId": Request.group_id,
42			"resourceStates": ResourceStates,
43		}),
44	);
45
46	Ok(Response::new(Empty {}))
47}