Mountain/Environment/DocumentProvider/
Notifications.rs1use std::sync::Arc;
4
5use CommonLibrary::{Environment::Requires::Requires, IPC::IPCProvider::IPCProvider};
6use log::{error, info};
7use serde_json::json;
8use url::Url;
9
10pub(super) async fn notify_model_added(
12 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
13 document_state_dto:&serde_json::Value,
14) {
15 let uri_string = document_state_dto
16 .get("URI")
17 .and_then(serde_json::Value::as_str)
18 .unwrap_or("unknown");
19
20 info!("[DocumentProvider] Notifying ModelAdded for: {}", uri_string);
21
22 let payload = json!([document_state_dto]);
23
24 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
25
26 if let Err(error) = ipc_provider
27 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelAdded".to_string(), payload)
28 .await
29 {
30 error!(
31 "[DocumentProvider] Failed to send $acceptModelAdded for {}: {}",
32 uri_string, error
33 );
34 }
35}
36
37pub(super) async fn notify_model_changed(
39 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
40 uri:&Url,
41 new_version:i64,
42 changes:serde_json::Value,
43) {
44 info!("[DocumentProvider] Notifying ModelChanged for: {}", uri);
45
46 let uri_components = json!({ "external": uri.to_string(), "$mid": 1 });
47
48 let event_data = json!({ "versionId": new_version, "changes": changes, "isDirty": true });
49
50 let payload = json!([uri_components, event_data]);
51
52 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
53
54 if let Err(error) = ipc_provider
55 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelChanged".to_string(), payload)
56 .await
57 {
58 error!("[DocumentProvider] Failed to send $acceptModelChanged for {}: {}", uri, error);
59 }
60}
61
62pub(super) async fn notify_model_saved(
64 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
65 uri:&Url,
66) {
67 info!("[DocumentProvider] Notifying ModelSaved for: {}", uri);
68
69 let uri_components = json!({ "external": uri.to_string(), "$mid": 1 });
70
71 let payload = json!([uri_components]);
72
73 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
74
75 if let Err(error) = ipc_provider
76 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelSaved".to_string(), payload)
77 .await
78 {
79 error!("[DocumentProvider] Failed to send $acceptModelSaved for {}: {}", uri, error);
80 }
81}
82
83pub(super) async fn notify_model_removed(
85 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
86 uri:&Url,
87) {
88 info!("[DocumentProvider] Notifying ModelRemoved for: {}", uri);
89
90 let uri_components = json!({ "external": uri.to_string(), "$mid": 1 });
91
92 let payload = json!([uri_components]);
93
94 let ipc_provider:Arc<dyn IPCProvider> = environment.Require();
95
96 if let Err(error) = ipc_provider
97 .SendNotificationToSideCar("cocoon-main".to_string(), "$acceptModelRemoved".to_string(), payload)
98 .await
99 {
100 error!("[DocumentProvider] Failed to send $acceptModelRemoved for {}: {}", uri, error);
101 }
102}