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