DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/SCM/
RegisterScmProvider.rs1use serde_json::json;
9use tauri::Emitter;
10use tonic::{Response, Status};
11use CommonLibrary::{
12 LanguageFeature::DTO::ProviderType::ProviderType,
13 SourceControlManagement::SourceControlManagementProvider::SourceControlManagementProvider,
14};
15
16use crate::{
17 ApplicationState::DTO::ProviderRegistrationDTO::ProviderRegistrationDTO,
18 RPC::CocoonService::CocoonServiceImpl,
19 Vine::Generated::{Empty, RegisterScmProviderRequest},
20 dev_log,
21};
22
23pub async fn Fn(Service:&CocoonServiceImpl, Request:RegisterScmProviderRequest) -> Result<Response<Empty>, Status> {
24 dev_log!("cocoon", "[CocoonService] Registering SCM provider: {}", Request.scm_id);
25
26 let Handle = Request
27 .scm_id
28 .as_bytes()
29 .iter()
30 .fold(0u32, |Acc, B| Acc.wrapping_mul(31).wrapping_add(*B as u32));
31
32 let DTO = ProviderRegistrationDTO {
33 Handle,
34
35 ProviderType:ProviderType::SourceControl,
36
37 Selector:json!([{ "scmId": Request.scm_id }]),
38
39 SideCarIdentifier:"cocoon-main".to_string(),
40
41 ExtensionIdentifier:json!(Request.extension_id),
42
43 Options:Some(json!({ "scmId": Request.scm_id })),
44 };
45
46 Service
47 .environment
48 .ApplicationState
49 .Extension
50 .ProviderRegistration
51 .RegisterProvider(Handle, DTO);
52
53 let CreateData = json!({
54 "handle": Handle,
55 "id": Request.scm_id,
56 "label": Request.scm_id,
57 "rootUri": null,
58 "extensionId": Request.extension_id,
59 });
60
61 if let Err(Error) = Service.environment.CreateSourceControl(CreateData).await {
62 dev_log!(
63 "cocoon",
64 "warn: [CocoonService] CreateSourceControl trait failed ({}); falling back to Sky emit",
65 Error
66 );
67
68 let _ = Service.environment.ApplicationHandle.emit(
69 "sky://scm/register",
70 json!({ "scmId": Request.scm_id, "extensionId": Request.extension_id }),
71 );
72 }
73
74 Ok(Response::new(Empty {}))
75}