diff --git a/czkawka_core/src/big_file.rs b/czkawka_core/src/big_file.rs index c06e34e..1701c04 100644 --- a/czkawka_core/src/big_file.rs +++ b/czkawka_core/src/big_file.rs @@ -15,7 +15,7 @@ use humansize::format_size; use humansize::BINARY; use rayon::prelude::*; -use crate::common::split_path; +use crate::common::{check_folder_children, split_path}; use crate::common::{Common, LOOP_DURATION}; use crate::common_dir_traversal::{common_get_entry_data_metadata, common_read_dir}; use crate::common_directory::Directories; @@ -215,7 +215,15 @@ impl BigFile { }; if metadata.is_dir() { - self.check_folder_children(&mut dir_result, &mut warnings, current_folder, entry_data); + check_folder_children( + &mut dir_result, + &mut warnings, + current_folder, + entry_data, + self.recursive_search, + &self.directories, + &self.excluded_items, + ); } else if metadata.is_file() { self.collect_file_entry(&atomic_counter, &metadata, entry_data, &mut fe_result, &mut warnings, current_folder); } @@ -247,32 +255,6 @@ impl BigFile { true } - pub fn check_folder_children(&self, dir_result: &mut Vec, warnings: &mut Vec, current_folder: &Path, entry_data: &DirEntry) { - if !self.recursive_search { - return; - } - - let next_folder = current_folder.join(entry_data.file_name()); - if self.directories.is_excluded(&next_folder) { - return; - } - - if self.excluded_items.is_excluded(&next_folder) { - return; - } - - #[cfg(target_family = "unix")] - if self.directories.exclude_other_filesystems() { - match self.directories.is_on_other_filesystems(&next_folder) { - Ok(true) => return, - Err(e) => warnings.push(e), - _ => (), - } - } - - dir_result.push(next_folder); - } - pub fn collect_file_entry( &self, atomic_counter: &Arc, diff --git a/czkawka_core/src/broken_files.rs b/czkawka_core/src/broken_files.rs index 889db54..701d370 100644 --- a/czkawka_core/src/broken_files.rs +++ b/czkawka_core/src/broken_files.rs @@ -1,5 +1,5 @@ use std::collections::BTreeMap; -use std::fs::{DirEntry, File}; +use std::fs::File; use std::io::prelude::*; use std::io::{BufReader, BufWriter}; use std::path::{Path, PathBuf}; @@ -17,7 +17,7 @@ use pdf::PdfError::Try; use rayon::prelude::*; use serde::{Deserialize, Serialize}; -use crate::common::{create_crash_message, open_cache_folder, Common, LOOP_DURATION, PDF_FILES_EXTENSIONS}; +use crate::common::{check_folder_children, create_crash_message, open_cache_folder, Common, LOOP_DURATION, PDF_FILES_EXTENSIONS}; use crate::common::{AUDIO_FILES_EXTENSIONS, IMAGE_RS_BROKEN_FILES_EXTENSIONS, ZIP_FILES_EXTENSIONS}; use crate::common_dir_traversal::{common_get_entry_data_metadata, common_read_dir}; use crate::common_directory::Directories; @@ -273,7 +273,15 @@ impl BrokenFiles { }; if metadata.is_dir() { - self.check_folder_children(&mut dir_result, &mut warnings, current_folder, entry_data); + check_folder_children( + &mut dir_result, + &mut warnings, + current_folder, + entry_data, + self.recursive_search, + &self.directories, + &self.excluded_items, + ); } else if metadata.is_file() { atomic_counter.fetch_add(1, Ordering::Relaxed); @@ -360,31 +368,6 @@ impl BrokenFiles { Common::print_time(start_time, SystemTime::now(), "check_files"); true } - pub fn check_folder_children(&self, dir_result: &mut Vec, warnings: &mut Vec, current_folder: &Path, entry_data: &DirEntry) { - if !self.recursive_search { - return; - } - - let next_folder = current_folder.join(entry_data.file_name()); - if self.directories.is_excluded(&next_folder) { - return; - } - - if self.excluded_items.is_excluded(&next_folder) { - return; - } - - #[cfg(target_family = "unix")] - if self.directories.exclude_other_filesystems() { - match self.directories.is_on_other_filesystems(&next_folder) { - Ok(true) => return, - Err(e) => warnings.push(e), - _ => (), - } - } - - dir_result.push(next_folder); - } fn look_for_broken_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender>) -> bool { let system_time = SystemTime::now(); diff --git a/czkawka_core/src/common.rs b/czkawka_core/src/common.rs index 528be1f..53bbce2 100644 --- a/czkawka_core/src/common.rs +++ b/czkawka_core/src/common.rs @@ -1,5 +1,5 @@ use std::ffi::OsString; -use std::fs::{File, OpenOptions}; +use std::fs::{DirEntry, File, OpenOptions}; use std::io::BufReader; use std::path::{Path, PathBuf}; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; @@ -16,6 +16,8 @@ use imagepipe::{ImageSource, Pipeline}; // #[cfg(feature = "heif")] // use libheif_rs::LibHeif; use crate::common_dir_traversal::{CheckingMethod, ProgressData}; +use crate::common_directory::Directories; +use crate::common_items::ExcludedItems; #[cfg(feature = "heif")] use libheif_rs::{ColorSpace, HeifContext, RgbChroma}; @@ -322,6 +324,41 @@ impl Common { } } } + +pub fn check_folder_children( + dir_result: &mut Vec, + warnings: &mut Vec, + current_folder: &Path, + entry_data: &DirEntry, + recursive_search: bool, + directories: &Directories, + excluded_items: &ExcludedItems, +) { + if !recursive_search { + return; + } + + let next_folder = current_folder.join(entry_data.file_name()); + if directories.is_excluded(&next_folder) { + return; + } + + if excluded_items.is_excluded(&next_folder) { + return; + } + + #[cfg(target_family = "unix")] + if directories.exclude_other_filesystems() { + match directories.is_on_other_filesystems(&next_folder) { + Ok(true) => return, + Err(e) => warnings.push(e), + _ => (), + } + } + + dir_result.push(next_folder); +} + pub fn prepare_thread_handler_common( progress_sender: Option<&futures::channel::mpsc::UnboundedSender>, progress_thread_run: &Arc, diff --git a/czkawka_core/src/same_music.rs b/czkawka_core/src/same_music.rs index 3eb89d1..8528fcc 100644 --- a/czkawka_core/src/same_music.rs +++ b/czkawka_core/src/same_music.rs @@ -6,7 +6,7 @@ use std::path::{Path, PathBuf}; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; use std::sync::Arc; -use std::time::{SystemTime}; +use std::time::SystemTime; use std::{mem, panic}; use crossbeam_channel::Receiver; diff --git a/czkawka_core/src/similar_images.rs b/czkawka_core/src/similar_images.rs index 15c4f95..ff34be1 100644 --- a/czkawka_core/src/similar_images.rs +++ b/czkawka_core/src/similar_images.rs @@ -1,5 +1,5 @@ use std::collections::{BTreeSet, HashMap, HashSet}; -use std::fs::{DirEntry, File}; +use std::fs::File; use std::io::Write; use std::io::*; use std::panic; @@ -22,8 +22,8 @@ use serde::{Deserialize, Serialize}; #[cfg(feature = "heif")] use crate::common::get_dynamic_image_from_heic; use crate::common::{ - create_crash_message, get_dynamic_image_from_raw_image, get_number_of_threads, open_cache_folder, Common, HEIC_EXTENSIONS, IMAGE_RS_SIMILAR_IMAGES_EXTENSIONS, LOOP_DURATION, - RAW_IMAGE_EXTENSIONS, + check_folder_children, create_crash_message, get_dynamic_image_from_raw_image, get_number_of_threads, open_cache_folder, Common, HEIC_EXTENSIONS, + IMAGE_RS_SIMILAR_IMAGES_EXTENSIONS, LOOP_DURATION, RAW_IMAGE_EXTENSIONS, }; use crate::common_dir_traversal::{common_get_entry_data_metadata, common_read_dir}; use crate::common_directory::Directories; @@ -364,7 +364,15 @@ impl SimilarImages { }; if metadata.is_dir() { - self.check_folder_children(&mut dir_result, &mut warnings, current_folder, entry_data); + check_folder_children( + &mut dir_result, + &mut warnings, + current_folder, + entry_data, + self.recursive_search, + &self.directories, + &self.excluded_items, + ); } else if metadata.is_file() { atomic_counter.fetch_add(1, Ordering::Relaxed); @@ -985,31 +993,6 @@ impl SimilarImages { pub fn set_excluded_items(&mut self, excluded_items: Vec) { self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages); } - pub fn check_folder_children(&self, dir_result: &mut Vec, warnings: &mut Vec, current_folder: &Path, entry_data: &DirEntry) { - if !self.recursive_search { - return; - } - - let next_folder = current_folder.join(entry_data.file_name()); - if self.directories.is_excluded(&next_folder) { - return; - } - - if self.excluded_items.is_excluded(&next_folder) { - return; - } - - #[cfg(target_family = "unix")] - if self.directories.exclude_other_filesystems() { - match self.directories.is_on_other_filesystems(&next_folder) { - Ok(true) => return, - Err(e) => warnings.push(e), - _ => (), - } - } - - dir_result.push(next_folder); - } } fn image_to_check<'a>( diff --git a/czkawka_core/src/similar_videos.rs b/czkawka_core/src/similar_videos.rs index aa9aa67..6c50d17 100644 --- a/czkawka_core/src/similar_videos.rs +++ b/czkawka_core/src/similar_videos.rs @@ -1,5 +1,5 @@ use std::collections::{BTreeMap, BTreeSet, HashMap}; -use std::fs::{DirEntry, File}; +use std::fs::File; use std::io::Write; use std::io::*; use std::path::{Path, PathBuf}; @@ -18,7 +18,7 @@ use serde::{Deserialize, Serialize}; use vid_dup_finder_lib::HashCreationErrorKind::DetermineVideo; use vid_dup_finder_lib::{NormalizedTolerance, VideoHash}; -use crate::common::VIDEO_FILES_EXTENSIONS; +use crate::common::{check_folder_children, VIDEO_FILES_EXTENSIONS}; use crate::common::{open_cache_folder, Common, LOOP_DURATION}; use crate::common_dir_traversal::{common_get_entry_data_metadata, common_read_dir}; use crate::common_directory::Directories; @@ -329,7 +329,15 @@ impl SimilarVideos { }; if metadata.is_dir() { - self.check_folder_children(&mut dir_result, &mut warnings, current_folder, entry_data); + check_folder_children( + &mut dir_result, + &mut warnings, + current_folder, + entry_data, + self.recursive_search, + &self.directories, + &self.excluded_items, + ); } else if metadata.is_file() { atomic_counter.fetch_add(1, Ordering::Relaxed); @@ -411,31 +419,6 @@ impl SimilarVideos { true } - pub fn check_folder_children(&self, dir_result: &mut Vec, warnings: &mut Vec, current_folder: &Path, entry_data: &DirEntry) { - if !self.recursive_search { - return; - } - - let next_folder = current_folder.join(entry_data.file_name()); - if self.directories.is_excluded(&next_folder) { - return; - } - - if self.excluded_items.is_excluded(&next_folder) { - return; - } - - #[cfg(target_family = "unix")] - if self.directories.exclude_other_filesystems() { - match self.directories.is_on_other_filesystems(&next_folder) { - Ok(true) => return, - Err(e) => warnings.push(e), - _ => (), - } - } - - dir_result.push(next_folder); - } fn sort_videos(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender>) -> bool { let hash_map_modification = SystemTime::now(); diff --git a/czkawka_core/src/temporary.rs b/czkawka_core/src/temporary.rs index 92f2523..fb74555 100644 --- a/czkawka_core/src/temporary.rs +++ b/czkawka_core/src/temporary.rs @@ -11,7 +11,7 @@ use std::{fs, thread}; use crossbeam_channel::Receiver; use rayon::prelude::*; -use crate::common::{Common, LOOP_DURATION}; +use crate::common::{check_folder_children, Common, LOOP_DURATION}; use crate::common_dir_traversal::{common_get_entry_data_metadata, common_read_dir}; use crate::common_directory::Directories; use crate::common_items::ExcludedItems; @@ -202,7 +202,15 @@ impl Temporary { }; if metadata.is_dir() { - self.check_folder_children(&mut dir_result, &mut warnings, current_folder, entry_data); + check_folder_children( + &mut dir_result, + &mut warnings, + current_folder, + entry_data, + self.recursive_search, + &self.directories, + &self.excluded_items, + ); } else if metadata.is_file() { if let Some(file_entry) = self.get_file_entry(&metadata, &atomic_counter, entry_data, &mut warnings, current_folder) { fe_result.push(file_entry); @@ -306,32 +314,6 @@ impl Temporary { }) } - pub fn check_folder_children(&self, dir_result: &mut Vec, warnings: &mut Vec, current_folder: &Path, entry_data: &DirEntry) { - if !self.recursive_search { - return; - } - - let next_folder = current_folder.join(entry_data.file_name()); - if self.directories.is_excluded(&next_folder) { - return; - } - - if self.excluded_items.is_excluded(&next_folder) { - return; - } - - #[cfg(target_family = "unix")] - if self.directories.exclude_other_filesystems() { - match self.directories.is_on_other_filesystems(&next_folder) { - Ok(true) => return, - Err(e) => warnings.push(e), - _ => (), - } - } - - dir_result.push(next_folder); - } - /// Function to delete files, from filed Vector fn delete_files(&mut self) { let start_time: SystemTime = SystemTime::now();