Mountain/Environment/TreeViewProvider/
StatePersistence.rs1use CommonLibrary::Error::CommonError::CommonError;
6use serde_json::json;
7use tauri::Emitter;
8
9use crate::{Environment::Utility, dev_log};
10
11pub(super) async fn persist_tree_view_state(
14 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
15 view_identifier:String,
16) -> Result<serde_json::Value, CommonError> {
17 dev_log!(
18 "extensions",
19 "[TreeViewProvider] Persisting state for view '{}'",
20 view_identifier
21 );
22
23 let tree_views = env
24 .ApplicationState
25 .Feature
26 .TreeViews
27 .ActiveTreeViews
28 .lock()
29 .map_err(Utility::MapApplicationStateLockErrorToCommonError)?;
30
31 let state = tree_views.get(&view_identifier).map(|view| {
32 json!({
33 "ViewIdentifier": view_identifier,
34 "Title": view.Title,
35 "Description": view.Description,
36 "CanSelectMany": view.CanSelectMany,
37 "Message": view.Message,
38 "HasHandleDrag": view.HasHandleDrag,
39 "HasHandleDrop": view.HasHandleDrop,
40 })
41 });
42
43 state.ok_or(CommonError::TreeViewProviderNotFound { ViewIdentifier:view_identifier })
44}
45
46pub(super) async fn restore_tree_view_state(
49 env:&crate::Environment::MountainEnvironment::MountainEnvironment,
50 view_identifier:String,
51 state_value:serde_json::Value,
52) -> Result<(), CommonError> {
53 dev_log!(
54 "extensions",
55 "[TreeViewProvider] Restoring state for view '{}'",
56 view_identifier
57 );
58
59 let mut tree_views = env
60 .ApplicationState
61 .Feature
62 .TreeViews
63 .ActiveTreeViews
64 .lock()
65 .map_err(Utility::MapApplicationStateLockErrorToCommonError)?;
66
67 if let Some(view_state) = tree_views.get_mut(&view_identifier) {
68 if let Some(title) = state_value.get("Title").and_then(|v| v.as_str()) {
69 view_state.Title = Some(title.to_string());
70 }
71 if let Some(description) = state_value.get("Description").and_then(|v| v.as_str()) {
72 view_state.Description = Some(description.to_string());
73 }
74 env.ApplicationHandle
83 .emit(
84 "sky://tree-view/restore-state",
85 json!({
86 "ViewIdentifier": view_identifier,
87 "State": state_value
88 }),
89 )
90 .map_err(|Error| {
91 CommonError::UserInterfaceInteraction {
92 Reason:format!("Failed to emit restore state event: {}", Error),
93 }
94 })?;
95
96 Ok(())
97 } else {
98 Err(CommonError::TreeViewProviderNotFound { ViewIdentifier:view_identifier })
99 }
100}