Vine/Server/Notification/
WindowCreateTerminal.rs1use serde_json::{Value, json};
6
7use crate::{Host::VineHost, dev_log};
8
9pub async fn WindowCreateTerminal(Host:&dyn VineHost, Parameter:&Value) {
10 let Handle = Parameter.get("handle").and_then(Value::as_str).unwrap_or("").to_string();
11
12 let Options = Parameter.get("options").cloned().unwrap_or_else(|| Parameter.clone());
13
14 let Name = Options.get("name").and_then(Value::as_str).unwrap_or("Terminal").to_string();
15
16 dev_log!("grpc", "[WindowCreateTerminal] handle={} name={}", Handle, Name);
17
18 let Some(Result) = Host.CreateTerminal(&Options).await else {
19 dev_log!("grpc", "warn: [WindowCreateTerminal] CreateTerminal returned None");
20
21 return;
22 };
23
24 let Id = Result.get("id").and_then(Value::as_u64).unwrap_or(0);
25
26 let Pid = Result.get("pid").and_then(Value::as_u64).unwrap_or(0);
27
28 let ResultName = Result.get("name").and_then(Value::as_str).unwrap_or(&Name).to_string();
29
30 dev_log!("grpc", "[WindowCreateTerminal] created id={} pid={}", Id, Pid);
31
32 Host.EmitToRenderer(
33 "sky://terminal/create",
34 json!({
35 "handle": Handle,
36 "id": Id,
37 "pid": Pid,
38 "name": ResultName,
39 }),
40 );
41}