Mountain/Track/Effect/CreateEffectForRequest/
TreeView.rs1#![allow(unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
9
10use CommonLibrary::{
11 Environment::Requires::Requires,
12 IPC::SkyEvent::SkyEvent,
13 TreeView::TreeViewProvider::TreeViewProvider,
14};
15use serde_json::{Value, json};
16use tauri::Runtime;
17
18use crate::{
19 IPC::SkyEmit::LogSkyEmit,
20 RunTime::ApplicationRunTime::ApplicationRunTime,
21 Track::Effect::MappedEffectType::MappedEffect,
22 dev_log,
23};
24
25pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
26 match MethodName {
27 "$tree:register" | "tree.register" => {
28 let effect =
29 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
30 Box::pin(async move {
31 let provider:Arc<dyn TreeViewProvider> = run_time.Environment.Require();
32
33 let first = Parameters.get(0).and_then(Value::as_str).unwrap_or("");
34
35 let (ViewId, Options) = if Parameters.get(2).is_some() {
36 let vid = Parameters.get(1).and_then(Value::as_str).unwrap_or(first).to_string();
37 let opts = Parameters.get(2).cloned().unwrap_or_default();
38 (vid, opts)
39 } else {
40 let vid = first.to_string();
41 let opts = Parameters.get(1).cloned().unwrap_or_default();
42 (vid, opts)
43 };
44
45 dev_log!("tree-view", "[TreeView] register view={}", ViewId);
46
47 let Result = provider.RegisterTreeDataProvider(ViewId.clone(), Options.clone()).await;
48
49 dev_log!(
50 "tree-view",
51 "[TreeView] register view={} result={}",
52 ViewId,
53 if Result.is_ok() { "ok" } else { "err" }
54 );
55
56 if Result.is_ok() {
57 if let Err(Error) = LogSkyEmit(
58 &run_time.Environment.ApplicationHandle,
59 SkyEvent::TreeViewCreate.AsStr(),
60 json!({ "viewId": ViewId, "options": Options }),
61 ) {
62 dev_log!("tree-view", "warn: [TreeView] emit failed view={}: {}", ViewId, Error);
63 }
64 }
65
66 Result.map(|_| json!(null)).map_err(|E| E.to_string())
67 })
68 };
69
70 Some(Ok(Box::new(effect)))
71 },
72
73 "tree.unregister" | "tree.dispose" => {
74 let effect =
75 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
76 Box::pin(async move {
77 let ViewId = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
78
79 if ViewId.is_empty() {
80 return Ok(json!(null));
81 }
82
83 dev_log!("tree-view", "[TreeView] unregister view={}", ViewId);
84
85 let provider:Arc<dyn TreeViewProvider> = run_time.Environment.Require();
86
87 let Result = provider.UnregisterTreeDataProvider(ViewId.clone()).await;
88
89 if Result.is_ok() {
90 if let Err(Error) = LogSkyEmit(
91 &run_time.Environment.ApplicationHandle,
92 SkyEvent::TreeViewDispose.AsStr(),
93 json!({ "viewId": ViewId }),
94 ) {
95 dev_log!(
96 "tree-view",
97 "warn: [TreeView] dispose emit failed view={}: {}",
98 ViewId,
99 Error
100 );
101 }
102 }
103
104 Result.map(|_| json!(null)).map_err(|E| E.to_string())
105 })
106 };
107
108 Some(Ok(Box::new(effect)))
109 },
110
111 _ => None,
112 }
113}