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