Mountain/Vine/Server/Notification/
UpdateScmGroup.rs1#![allow(non_snake_case)]
2use serde_json::{Value, json};
26use tauri::Emitter;
27
28use crate::{Vine::Server::MountainVinegRPCService::MountainVinegRPCService, dev_log};
29
30pub async fn UpdateScmGroup(Service:&MountainVinegRPCService, Parameter:&Value) {
31 let ScmHandle = Parameter
34 .get("scmHandle")
35 .or_else(|| Parameter.get("scm_handle"))
36 .and_then(Value::as_u64)
37 .map(|H| H as u32);
38 let GroupHandle = Parameter
39 .get("groupHandle")
40 .or_else(|| Parameter.get("group_handle"))
41 .and_then(Value::as_str)
42 .unwrap_or("")
43 .to_string();
44 let LegacyProviderId = Parameter
48 .get("providerId")
49 .or_else(|| Parameter.get("provider_id"))
50 .and_then(Value::as_str)
51 .unwrap_or("")
52 .to_string();
53 let LegacyGroupId = Parameter
54 .get("groupId")
55 .or_else(|| Parameter.get("group_id"))
56 .and_then(Value::as_str)
57 .unwrap_or("")
58 .to_string();
59 let ResourceStates = Parameter
60 .get("resourceStates")
61 .or_else(|| Parameter.get("resource_states"))
62 .cloned()
63 .unwrap_or_else(|| Value::Array(Vec::new()));
64
65 let (HandleFromString, GroupIdFromHandle) = match GroupHandle.split_once('/') {
70 Some((H, G)) => (H.parse::<u32>().ok(), G.to_string()),
71 None => (None, String::new()),
72 };
73 let ResolvedScmHandle = ScmHandle.or(HandleFromString);
74 let ResolvedGroupId = if !GroupIdFromHandle.is_empty() {
75 GroupIdFromHandle
76 } else if !LegacyGroupId.is_empty() {
77 LegacyGroupId
78 } else {
79 String::new()
80 };
81
82 if ResolvedScmHandle.is_none() && LegacyProviderId.is_empty() {
83 dev_log!(
84 "grpc",
85 "[ScmGroup] skip: missing scm_handle / provider_id (group_handle={:?} legacy_group={:?})",
86 GroupHandle,
87 ResolvedGroupId
88 );
89 return;
90 }
91 if ResolvedGroupId.is_empty() {
92 dev_log!(
93 "grpc",
94 "[ScmGroup] skip: missing group_id (scm_handle={:?} group_handle={:?})",
95 ResolvedScmHandle,
96 GroupHandle
97 );
98 return;
99 }
100
101 let _ = Service.ApplicationHandle().emit(
102 "sky://scm/updateGroup",
103 json!({
104 "scmHandle": ResolvedScmHandle,
105 "providerId": &LegacyProviderId,
106 "groupHandle": &GroupHandle,
107 "groupId": &ResolvedGroupId,
108 "resourceStates": ResourceStates,
109 }),
110 );
111 dev_log!(
112 "grpc",
113 "[ScmGroup] scm_handle={:?} group={} resources={}",
114 ResolvedScmHandle,
115 ResolvedGroupId,
116 ResourceStates.as_array().map(Vec::len).unwrap_or(0)
117 );
118}