From bb3ffa4cc67df688998f78a0613e0376e812372d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Mon, 22 Jan 2024 15:02:28 +0100 Subject: [PATCH] At once --- czkawka_core/src/empty_folder.rs | 49 +++++++++++++++++--------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/czkawka_core/src/empty_folder.rs b/czkawka_core/src/empty_folder.rs index fb6098e..ab4abf4 100644 --- a/czkawka_core/src/empty_folder.rs +++ b/czkawka_core/src/empty_folder.rs @@ -104,19 +104,17 @@ impl EmptyFolder { let excluded_items = self.common_data.excluded_items.clone(); let directories = self.common_data.directories.clone(); - let mut folder_entries: HashMap = HashMap::new(); let mut non_empty_folders: Vec = vec![]; + let mut start_folder_entries = Vec::with_capacity(folders_to_check.len()); + let mut new_folder_entries_list = Vec::new(); for dir in &folders_to_check { - folder_entries.insert( - dir.to_string_lossy().to_string(), - FolderEntry { - path: dir.clone(), - parent_path: None, - is_empty: FolderEmptiness::Maybe, - modified_date: 0, - }, - ); + start_folder_entries.push(FolderEntry { + path: dir.clone(), + parent_path: None, + is_empty: FolderEmptiness::Maybe, + modified_date: 0, + }); } while !folders_to_check.is_empty() { @@ -187,9 +185,17 @@ impl EmptyFolder { if let Some(non_empty_folder) = non_empty_folder { non_empty_folders.push(non_empty_folder); } - for (path, entry) in fe_list { - folder_entries.insert(path, entry); - } + new_folder_entries_list.push(fe_list); + } + } + + let mut folder_entries: HashMap = HashMap::with_capacity(start_folder_entries.len() + new_folder_entries_list.iter().map(|e| e.len()).sum::()); + for fe in start_folder_entries { + folder_entries.insert(fe.path.to_string_lossy().to_string(), fe); + } + for fe_list in new_folder_entries_list { + for fe in fe_list { + folder_entries.insert(fe.path.to_string_lossy().to_string(), fe); } } @@ -239,7 +245,7 @@ impl EmptyFolder { warnings: &mut Vec, excluded_items: &ExcludedItems, non_empty_folder: &mut Option, - folder_entries_list: &mut Vec<(String, FolderEntry)>, + folder_entries_list: &mut Vec, ) { let next_folder = entry_data.path(); if excluded_items.is_excluded(&next_folder) || directories.is_excluded(&next_folder) { @@ -266,15 +272,12 @@ impl EmptyFolder { }; dir_result.push(next_folder.clone()); - folder_entries_list.push(( - next_folder.to_string_lossy().to_string(), - FolderEntry { - path: next_folder, - parent_path: Some(current_folder_as_str.to_string()), - is_empty: FolderEmptiness::Maybe, - modified_date: get_modified_time(&metadata, warnings, current_folder, true), - }, - )); + folder_entries_list.push(FolderEntry { + path: next_folder, + parent_path: Some(current_folder_as_str.to_string()), + is_empty: FolderEmptiness::Maybe, + modified_date: get_modified_time(&metadata, warnings, current_folder, true), + }); } #[fun_time(message = "delete_files", level = "debug")]