Mountain/RPC/CocoonService/Window/
CreateStatusBarItem.rs1#![allow(non_snake_case)]
2
3use serde_json::json;
11use tauri::Emitter;
12use tonic::{Response, Status};
13use CommonLibrary::StatusBar::{DTO::StatusBarEntryDTO::StatusBarEntryDTO, StatusBarProvider::StatusBarProvider};
14
15use crate::{
16 RPC::CocoonService::CocoonServiceImpl,
17 Vine::Generated::{CreateStatusBarItemRequest, CreateStatusBarItemResponse},
18 dev_log,
19};
20
21pub async fn Fn(
22 Service:&CocoonServiceImpl,
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 ItemIdentifier:Request.id.clone(),
30 ExtensionIdentifier:String::new(),
31 Name:None,
32 Text:Request.text.clone(),
33 Tooltip:if Request.tooltip.is_empty() { None } else { Some(json!(Request.tooltip)) },
34 HasTooltipProvider:false,
35 Command:None,
36 Color:None,
37 BackgroundColor:None,
38 IsAlignedLeft:true,
39 Priority:None,
40 AccessibilityInformation:None,
41 };
42 if let Err(Error) = Service.environment.SetStatusBarEntry(Entry).await {
43 dev_log!("cocoon", "warn: [CocoonService] create_status_bar_item trait failed: {}", Error);
44 let _ = Service.environment.ApplicationHandle.emit(
45 "sky://statusbar/create",
46 json!({ "id": Request.id, "text": Request.text, "tooltip": Request.tooltip }),
47 );
48 }
49
50 Ok(Response::new(CreateStatusBarItemResponse { item_id:Request.id.clone() }))
51}