Mountain/RPC/CocoonService/Window/
CreateStatusBarItem.rs1
2use serde_json::json;
10use tauri::Emitter;
11use tonic::{Response, Status};
12use CommonLibrary::StatusBar::{DTO::StatusBarEntryDTO::StatusBarEntryDTO, StatusBarProvider::StatusBarProvider};
13
14use crate::{
15 RPC::CocoonService::CocoonServiceImpl,
16 Vine::Generated::{CreateStatusBarItemRequest, CreateStatusBarItemResponse},
17 dev_log,
18};
19
20pub async fn Fn(
21 Service:&CocoonServiceImpl,
22
23 Request:CreateStatusBarItemRequest,
24) -> Result<Response<CreateStatusBarItemResponse>, Status> {
25 dev_log!("cocoon", "[CocoonService] create_status_bar_item: {}", Request.id);
26
27 let Entry = StatusBarEntryDTO {
28 EntryIdentifier:Request.id.clone(),
29
30 ItemIdentifier:Request.id.clone(),
31
32 ExtensionIdentifier:String::new(),
33
34 Name:None,
35
36 Text:Request.text.clone(),
37
38 Tooltip:if Request.tooltip.is_empty() { None } else { Some(json!(Request.tooltip)) },
39
40 HasTooltipProvider:false,
41
42 Command:None,
43
44 Color:None,
45
46 BackgroundColor:None,
47
48 IsAlignedLeft:true,
49
50 Priority:None,
51
52 AccessibilityInformation:None,
53 };
54
55 if let Err(Error) = Service.environment.SetStatusBarEntry(Entry).await {
56 dev_log!("cocoon", "warn: [CocoonService] create_status_bar_item trait failed: {}", Error);
57
58 let _ = Service.environment.ApplicationHandle.emit(
59 "sky://statusbar/create",
60 json!({ "id": Request.id, "text": Request.text, "tooltip": Request.tooltip }),
61 );
62 }
63
64 Ok(Response::new(CreateStatusBarItemResponse { item_id:Request.id.clone() }))
65}