lingxia_browser_shell/
panel.rs1use lingxia_platform::traits::app_runtime::LxAppOpenMode;
2use lxapp::startup::LxAppStartupOptions;
3use lxapp::{LxAppError, ReleaseType};
4
5pub fn panel_item_for_id(panel_id: &str) -> Option<(String, String)> {
6 lingxia_app_context::app_config()
7 .and_then(|config| config.panels.as_ref())
8 .and_then(|panels| panels.items.iter().find(|item| item.id == panel_id))
9 .filter(|item| item.content.kind.is_lxapp())
10 .map(|item| {
11 (
12 item.content.app_id.clone(),
13 item.content.path.clone().unwrap_or_default(),
14 )
15 })
16}
17
18pub fn panels_config_json() -> Option<String> {
19 lingxia_app_context::app_config()
20 .and_then(|config| config.panels.as_ref())
21 .and_then(|panels| serde_json::to_string(panels).ok())
22}
23
24pub fn open_panel_lxapp(panel_id: &str, appid: &str, path: &str) {
25 let panel_id = panel_id.to_string();
26 let appid = appid.to_string();
27 let path = path.to_string();
28
29 std::mem::drop(rong::RongExecutor::global().spawn(async move {
30 if let Err(err) = do_open_panel_lxapp(&panel_id, &appid, &path).await {
31 log::error!("open_panel_lxapp failed for {}: {}", appid, err);
32 }
33 }));
34}
35
36async fn do_open_panel_lxapp(panel_id: &str, appid: &str, path: &str) -> Result<(), LxAppError> {
37 lxapp::prepare_lxapp_open(appid, ReleaseType::Release).await?;
38
39 let _ = lxapp::open_lxapp(
40 appid,
41 LxAppStartupOptions::new(path)
42 .set_open_mode(LxAppOpenMode::Panel)
43 .set_panel_id(panel_id.to_string()),
44 )?;
45
46 lxapp::schedule_lxapp_update_check(appid, ReleaseType::Release);
47 Ok(())
48}