DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/Window/
CreateWebviewPanel.rs1use std::time::{SystemTime, UNIX_EPOCH};
8
9use serde_json::json;
10use tauri::Emitter;
11use tonic::{Response, Status};
12use CommonLibrary::Webview::WebviewProvider::WebviewProvider;
13
14use crate::{
15 RPC::CocoonService::CocoonServiceImpl,
16 Vine::Generated::{CreateWebviewPanelRequest, CreateWebviewPanelResponse},
17 dev_log,
18};
19
20pub async fn Fn(
21 Service:&CocoonServiceImpl,
22
23 Request:CreateWebviewPanelRequest,
24) -> Result<Response<CreateWebviewPanelResponse>, Status> {
25 dev_log!(
26 "cocoon",
27 "[CocoonService] create_webview_panel: view_type={} title={}",
28 Request.view_type,
29 Request.title
30 );
31
32 let Handle = match Service
33 .environment
34 .CreateWebviewPanel(
35 json!({}),
36 Request.view_type.clone(),
37 Request.title.clone(),
38 json!({ "viewColumn": Request.view_column, "preserveFocus": Request.preserve_focus }),
39 json!({}),
40 json!({}),
41 )
42 .await
43 {
44 Ok(H) => H,
45
46 Err(Error) => {
47 dev_log!("cocoon", "warn: [CocoonService] create_webview_panel trait failed: {}", Error);
48
49 let Fallback = SystemTime::now()
50 .duration_since(UNIX_EPOCH)
51 .map(|D| D.as_millis() as u32)
52 .unwrap_or(0);
53
54 let _ = Service.environment.ApplicationHandle.emit(
55 "sky://webview/create",
56 json!({
57 "handle": Fallback,
58 "viewType": Request.view_type,
59 "title": Request.title,
60 "viewColumn": Request.view_column,
61 "preserveFocus": Request.preserve_focus,
62 "iconPath": Request.icon_path,
63 }),
64 );
65
66 return Ok(Response::new(CreateWebviewPanelResponse { handle:Fallback }));
67 },
68 };
69
70 let HandleU32 = Handle
71 .parse::<u32>()
72 .unwrap_or_else(|_| Handle.chars().map(|C| C as u32).fold(0u32, |Acc, Char| Acc.wrapping_add(Char)));
73
74 Ok(Response::new(CreateWebviewPanelResponse { handle:HandleU32 }))
75}