@@ -9,10 +9,10 @@ use crate::files::SAVED_TREE_DIR;
99
1010/* Saves current tree to saved_trees/name.json */
1111#[ tauri:: command]
12- pub fn save_tree ( state : tauri:: State < AppState > , tree_name : String ) -> Result < ( ) , SaveTreeError > {
12+ pub fn save_tree ( state : tauri:: State < AppState > , tree_name : String ) -> Result < String , SaveTreeError > {
1313 /* Access the `tree` field from the locked state */
1414 let saved_tree: SavedTree = SavedTree :: from ( state. get_tree ( ) ?) ;
15-
15+
1616 /* Get the serialised JSON */
1717 let tree_json: String = serde_json:: to_string_pretty ( & saved_tree)
1818 . map_err ( |_| SaveTreeError :: SerialiseFailed ) ?;
@@ -24,8 +24,12 @@ pub fn save_tree(state: tauri::State<AppState>, tree_name: String) -> Result<(),
2424
2525 /* Write tree json to the json file */
2626 data_file. write ( tree_json. as_bytes ( ) ) . map_err ( |_| SaveTreeError :: WriteTreeFailed ) ?;
27+
28+ /* Get a list of all saved tree names */
29+ let tree_names: Vec < String > = state. add_tree ( tree_name) . map_err ( |_| SaveTreeError :: AddTreeFailed ) ?;
2730
28- Ok ( ( ) )
31+ serde_json:: to_string_pretty ( & tree_names)
32+ . map_err ( |_| SaveTreeError :: SerialiseFailed )
2933}
3034
3135#[ derive( Debug , serde:: Serialize ) ]
@@ -35,6 +39,7 @@ pub enum SaveTreeError {
3539 SerialiseFailed ,
3640 CreateDirFailed ,
3741 WriteTreeFailed ,
42+ AddTreeFailed ,
3843}
3944
4045impl From < StateError > for SaveTreeError {
@@ -50,63 +55,49 @@ impl From<StateError> for SaveTreeError {
5055
5156/* Delete file associated with where tree is saved */
5257#[ tauri:: command]
53- pub fn delete_tree ( tree_name : String ) -> Result < ( ) , DeleteTreeError > {
58+ pub fn delete_tree ( state : tauri:: State < AppState > , index : usize ) -> Result < String , DeleteTreeError > {
59+ /* Get the tree name given the index */
60+ let tree_name: String = state. get_tree_name ( index) . map_err ( |_| DeleteTreeError :: NameRetrievalFail ) ?;
61+
5462 /* Path to the json file used to store the tree */
5563 let file_path: String = format ! ( "{}{}.json" , SAVED_TREE_DIR , tree_name) ;
5664
5765 /* Remove the file from the file system */
5866 fs:: remove_file ( file_path) . map_err ( |_| DeleteTreeError :: TreeFileRemoveFail ) ?;
59- Ok ( ( ) )
60- }
61-
62- #[ derive( Debug , serde:: Serialize ) ]
63- pub enum DeleteTreeError {
64- TreeFileRemoveFail ,
65- }
6667
68+ /* Returns a list of the tree names that are left */
69+ let tree_names: Vec < String > = state. rmv_tree ( index) . map_err ( |_| DeleteTreeError :: TreeRemovalFail ) ?;
6770
68- /* Returns a list of filenames in saved_trees */
69- #[ tauri:: command]
70- pub fn fetch_saved_tree_names ( ) -> Result < String , FetchTreeNameError > {
71- /* Get all path names inside the saved_trees folder */
72- let paths: fs:: ReadDir = fs:: read_dir ( SAVED_TREE_DIR ) . map_err ( |_| FetchTreeNameError :: ReadDirFailed ) ?;
73-
74- /* Strip off the extension and add only the name to names */
75- let names: Vec < String > = paths. into_iter ( )
76- . map ( |path| {
77- let path: fs:: DirEntry = path. map_err ( |_| FetchTreeNameError :: ReadPathFailed ) ?;
78- let file_name: String = path. file_name ( ) . into_string ( ) . map_err ( |_| FetchTreeNameError :: StringContainsInvalidUnicode ) ?;
79- let name: & str = file_name. strip_suffix ( ".json" ) . ok_or ( FetchTreeNameError :: SuffixNotFound ) ?;
80- Ok ( name. to_string ( ) )
81- } ) . collect :: < Result < Vec < String > , FetchTreeNameError > > ( ) ?;
82-
83- /* Serialise names */
84- serde_json:: to_string_pretty ( & names)
85- . map_err ( |_| FetchTreeNameError :: SerialiseFailed )
71+ serde_json:: to_string_pretty ( & tree_names)
72+ . map_err ( |_| DeleteTreeError :: SerialiseFailed )
8673}
8774
8875#[ derive( Debug , serde:: Serialize ) ]
89- pub enum FetchTreeNameError {
90- ReadDirFailed ,
91- ReadPathFailed ,
92- StringContainsInvalidUnicode ,
93- SuffixNotFound ,
76+ pub enum DeleteTreeError {
77+ TreeFileRemoveFail ,
78+ NameRetrievalFail ,
79+ TreeRemovalFail ,
9480 SerialiseFailed ,
9581}
9682
9783
9884/* Fetches a tree from saved_trees and resets the tree in the tauri state */
9985#[ tauri:: command]
100- pub fn load_saved_tree ( tree_name : String , state : tauri:: State < AppState > ) -> Result < ( ) , LoadTreeError > {
86+ pub fn load_saved_tree ( index : usize , state : tauri:: State < AppState > ) -> Result < ( ) , LoadTreeError > {
87+ /* Get the tree name given the index */
88+ let tree_name: String = state. get_tree_name ( index) . map_err ( |_| LoadTreeError :: NameRetrievalFail ) ?;
89+
10190 /* Get the file path of the tree to be reloaded */
10291 let file_path: String = format ! ( "{}{}.json" , SAVED_TREE_DIR , tree_name) ;
103-
92+
10493 /* Read the contents of the file as a string */
10594 let contents: String = fs:: read_to_string ( file_path)
10695 . map_err ( |_| LoadTreeError :: ReadFileFailed ) ?;
10796
97+
10898 /* Deserialize the tree into SavedTree, then convert to DebugTree */
10999 let saved_tree: SavedTree = serde_json:: from_str ( & contents) . map_err ( |_| LoadTreeError :: DeserialiseFailed ) ?;
100+
110101 let tree: DebugTree = DebugTree :: from ( saved_tree) ;
111102
112103 /* Update the global tauri state with the reloaded tree */
@@ -118,6 +109,7 @@ pub fn load_saved_tree(tree_name: String, state: tauri::State<AppState>) -> Resu
118109#[ derive( Debug , serde:: Serialize ) ]
119110#[ allow( clippy:: enum_variant_names) ]
120111pub enum LoadTreeError {
112+ NameRetrievalFail ,
121113 LockFailed ,
122114 ReadFileFailed ,
123115 DeserialiseFailed ,
0 commit comments