2022-02-26 06:47:25 +13:00
|
|
|
#![allow(clippy::needless_late_init)]
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
use std::thread;
|
|
|
|
|
2022-06-18 20:59:46 +12:00
|
|
|
use clap::Parser;
|
2024-01-15 02:38:55 +13:00
|
|
|
use crossbeam_channel::{bounded, unbounded, Receiver, Sender};
|
2023-10-11 07:54:41 +13:00
|
|
|
use log::error;
|
2022-07-25 06:48:02 +12:00
|
|
|
|
2021-11-28 08:49:20 +13:00
|
|
|
use commands::Commands;
|
2023-07-10 18:36:03 +12:00
|
|
|
use czkawka_core::bad_extensions::BadExtensions;
|
2023-10-11 07:54:41 +13:00
|
|
|
use czkawka_core::big_file::{BigFile, SearchMode};
|
|
|
|
use czkawka_core::broken_files::BrokenFiles;
|
|
|
|
use czkawka_core::common::{print_version_mode, set_number_of_threads, setup_logger};
|
2024-01-15 02:38:55 +13:00
|
|
|
use czkawka_core::common_dir_traversal::ProgressData;
|
2023-10-11 07:54:41 +13:00
|
|
|
use czkawka_core::common_tool::{CommonData, DeleteMethod};
|
|
|
|
#[allow(unused_imports)] // It is used in release for print_results_to_output().
|
2020-10-05 10:36:49 +13:00
|
|
|
use czkawka_core::common_traits::*;
|
2023-07-10 18:36:03 +12:00
|
|
|
use czkawka_core::duplicate::DuplicateFinder;
|
2023-10-11 07:54:41 +13:00
|
|
|
use czkawka_core::empty_files::EmptyFiles;
|
2023-07-10 18:36:03 +12:00
|
|
|
use czkawka_core::empty_folder::EmptyFolder;
|
2023-10-11 07:54:41 +13:00
|
|
|
use czkawka_core::invalid_symlinks::InvalidSymlinks;
|
2023-07-10 18:36:03 +12:00
|
|
|
use czkawka_core::same_music::SameMusic;
|
|
|
|
use czkawka_core::similar_images::{return_similarity_from_similarity_preset, test_image_conversion_speed, SimilarImages};
|
|
|
|
use czkawka_core::similar_videos::SimilarVideos;
|
2023-10-11 07:54:41 +13:00
|
|
|
use czkawka_core::temporary::Temporary;
|
2021-11-28 08:49:20 +13:00
|
|
|
|
2023-05-03 08:37:12 +12:00
|
|
|
use crate::commands::{
|
2024-01-15 02:38:55 +13:00
|
|
|
Args, BadExtensionsArgs, BiggestFilesArgs, BrokenFilesArgs, CommonCliItems, DuplicatesArgs, EmptyFilesArgs, EmptyFoldersArgs, InvalidSymlinksArgs, SameMusicArgs,
|
|
|
|
SimilarImagesArgs, SimilarVideosArgs, TemporaryArgs,
|
2023-05-03 08:37:12 +12:00
|
|
|
};
|
2024-01-15 02:38:55 +13:00
|
|
|
use crate::progress::connect_progress;
|
2023-05-03 08:37:12 +12:00
|
|
|
|
2021-11-28 08:49:20 +13:00
|
|
|
mod commands;
|
2024-01-15 02:38:55 +13:00
|
|
|
mod progress;
|
2020-10-05 10:36:49 +13:00
|
|
|
|
|
|
|
fn main() {
|
2022-12-20 22:19:30 +13:00
|
|
|
let command = Args::parse().command;
|
2020-08-30 05:11:55 +12:00
|
|
|
|
2023-10-05 19:06:47 +13:00
|
|
|
setup_logger(true);
|
2023-10-11 07:54:41 +13:00
|
|
|
print_version_mode();
|
2023-10-05 19:06:47 +13:00
|
|
|
|
2023-10-11 07:54:41 +13:00
|
|
|
if cfg!(debug_assertions) {
|
|
|
|
println!("{command:?}");
|
|
|
|
}
|
2020-10-05 10:36:49 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
let (progress_sender, progress_receiver): (Sender<ProgressData>, Receiver<ProgressData>) = unbounded();
|
|
|
|
let (stop_sender, stop_receiver): (Sender<()>, Receiver<()>) = bounded(1);
|
|
|
|
|
|
|
|
let calculate_thread = thread::spawn(move || match command {
|
|
|
|
Commands::Duplicates(duplicates_args) => duplicates(duplicates_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::EmptyFolders(empty_folders_args) => empty_folders(empty_folders_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::BiggestFiles(biggest_files_args) => biggest_files(biggest_files_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::EmptyFiles(empty_files_args) => empty_files(empty_files_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::Temporary(temporary_args) => temporary(temporary_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::SimilarImages(similar_images_args) => similar_images(similar_images_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::SameMusic(same_music_args) => same_music(same_music_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::InvalidSymlinks(invalid_symlinks_args) => invalid_symlinks(invalid_symlinks_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::BrokenFiles(broken_files_args) => broken_files(broken_files_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::SimilarVideos(similar_videos_args) => similar_videos(similar_videos_args, &stop_receiver, &progress_sender),
|
|
|
|
Commands::BadExtensions(bad_extensions_args) => bad_extensions(bad_extensions_args, &stop_receiver, &progress_sender),
|
2022-12-20 22:19:30 +13:00
|
|
|
Commands::Tester {} => {
|
|
|
|
test_image_conversion_speed();
|
|
|
|
}
|
2024-01-15 02:38:55 +13:00
|
|
|
});
|
|
|
|
ctrlc::set_handler(move || {
|
|
|
|
println!("Get Sender");
|
|
|
|
stop_sender.send(()).expect("Could not send signal on channel.");
|
|
|
|
})
|
|
|
|
.expect("Error setting Ctrl-C handler");
|
|
|
|
|
|
|
|
connect_progress(&progress_receiver);
|
|
|
|
|
|
|
|
calculate_thread.join().unwrap();
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn duplicates(duplicates: DuplicatesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
2022-12-20 22:19:30 +13:00
|
|
|
let DuplicatesArgs {
|
2024-01-15 02:38:55 +13:00
|
|
|
common_cli_items,
|
2022-12-20 22:19:30 +13:00
|
|
|
minimal_file_size,
|
|
|
|
maximal_file_size,
|
|
|
|
minimal_cached_file_size,
|
|
|
|
search_method,
|
|
|
|
delete_method,
|
|
|
|
hash_type,
|
|
|
|
allow_hard_links,
|
2023-10-14 07:33:17 +13:00
|
|
|
dry_run,
|
2022-12-20 22:19:30 +13:00
|
|
|
case_sensitive_name_comparison,
|
|
|
|
} = duplicates;
|
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = DuplicateFinder::new();
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_minimal_file_size(minimal_file_size);
|
|
|
|
item.set_maximal_file_size(maximal_file_size);
|
|
|
|
item.set_minimal_cache_file_size(minimal_cached_file_size);
|
|
|
|
item.set_check_method(search_method);
|
2023-10-14 07:33:17 +13:00
|
|
|
item.set_delete_method(delete_method.delete_method);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_hash_type(hash_type);
|
|
|
|
item.set_ignore_hard_links(!allow_hard_links.allow_hard_links);
|
2023-10-14 07:33:17 +13:00
|
|
|
item.set_dry_run(dry_run.dry_run);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_case_sensitive_name_comparison(case_sensitive_name_comparison.case_sensitive_name_comparison);
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_duplicates(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn empty_folders(empty_folders: EmptyFoldersArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
|
|
|
let EmptyFoldersArgs { common_cli_items, delete_folders } = empty_folders;
|
2023-05-11 07:27:41 +12:00
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = EmptyFolder::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2023-10-14 07:33:17 +13:00
|
|
|
if delete_folders {
|
|
|
|
item.set_delete_method(DeleteMethod::Delete);
|
|
|
|
}
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_empty_folders(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn biggest_files(biggest_files: BiggestFilesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
2022-12-20 22:19:30 +13:00
|
|
|
let BiggestFilesArgs {
|
2024-01-15 02:38:55 +13:00
|
|
|
common_cli_items,
|
2022-12-20 22:19:30 +13:00
|
|
|
number_of_files,
|
|
|
|
delete_files,
|
|
|
|
smallest_mode,
|
|
|
|
} = biggest_files;
|
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = BigFile::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_number_of_files_to_check(number_of_files);
|
2022-12-20 22:19:30 +13:00
|
|
|
if delete_files {
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_delete_method(DeleteMethod::Delete);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
if smallest_mode {
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_search_mode(SearchMode::SmallestFiles);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_big_files(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn empty_files(empty_files: EmptyFilesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
|
|
|
let EmptyFilesArgs { common_cli_items, delete_files } = empty_files;
|
2023-05-11 07:27:41 +12:00
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = EmptyFiles::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
if delete_files {
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_delete_method(DeleteMethod::Delete);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_empty_files(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn temporary(temporary: TemporaryArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
|
|
|
let TemporaryArgs { common_cli_items, delete_files } = temporary;
|
2023-05-11 07:27:41 +12:00
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = Temporary::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
if delete_files {
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_delete_method(DeleteMethod::Delete);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_temporary_files(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn similar_images(similar_images: SimilarImagesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
2022-12-20 22:19:30 +13:00
|
|
|
let SimilarImagesArgs {
|
2024-01-15 02:38:55 +13:00
|
|
|
common_cli_items,
|
2022-12-20 22:19:30 +13:00
|
|
|
minimal_file_size,
|
|
|
|
maximal_file_size,
|
|
|
|
similarity_preset,
|
|
|
|
hash_alg,
|
|
|
|
image_filter,
|
|
|
|
hash_size,
|
2023-10-14 07:33:17 +13:00
|
|
|
delete_method,
|
|
|
|
dry_run,
|
2022-12-20 22:19:30 +13:00
|
|
|
} = similar_images;
|
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = SimilarImages::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_minimal_file_size(minimal_file_size);
|
|
|
|
item.set_maximal_file_size(maximal_file_size);
|
|
|
|
item.set_image_filter(image_filter);
|
|
|
|
item.set_hash_alg(hash_alg);
|
|
|
|
item.set_hash_size(hash_size);
|
2023-10-14 07:33:17 +13:00
|
|
|
item.set_delete_method(delete_method.delete_method);
|
|
|
|
item.set_dry_run(dry_run.dry_run);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_similarity(return_similarity_from_similarity_preset(&similarity_preset, hash_size));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_similar_images(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn same_music(same_music: SameMusicArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
2022-12-20 22:19:30 +13:00
|
|
|
let SameMusicArgs {
|
2024-01-15 02:38:55 +13:00
|
|
|
common_cli_items,
|
2023-10-14 07:33:17 +13:00
|
|
|
delete_method,
|
2022-12-20 22:19:30 +13:00
|
|
|
minimal_file_size,
|
|
|
|
maximal_file_size,
|
|
|
|
music_similarity,
|
2023-10-14 07:33:17 +13:00
|
|
|
dry_run,
|
|
|
|
minimum_segment_duration,
|
|
|
|
maximum_difference,
|
|
|
|
search_method,
|
2022-12-20 22:19:30 +13:00
|
|
|
} = same_music;
|
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = SameMusic::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_minimal_file_size(minimal_file_size);
|
|
|
|
item.set_maximal_file_size(maximal_file_size);
|
|
|
|
item.set_music_similarity(music_similarity);
|
2023-10-14 07:33:17 +13:00
|
|
|
item.set_delete_method(delete_method.delete_method);
|
|
|
|
item.set_dry_run(dry_run.dry_run);
|
|
|
|
item.set_minimum_segment_duration(minimum_segment_duration);
|
|
|
|
item.set_maximum_difference(maximum_difference);
|
|
|
|
item.set_check_type(search_method);
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_same_music(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn invalid_symlinks(invalid_symlinks: InvalidSymlinksArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
|
|
|
let InvalidSymlinksArgs { common_cli_items, delete_files } = invalid_symlinks;
|
2023-05-11 07:27:41 +12:00
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = InvalidSymlinks::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
if delete_files {
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_delete_method(DeleteMethod::Delete);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_invalid_links(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn broken_files(broken_files: BrokenFilesArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
|
|
|
let BrokenFilesArgs { common_cli_items, delete_files } = broken_files;
|
2023-05-11 07:27:41 +12:00
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = BrokenFiles::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
if delete_files {
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_delete_method(DeleteMethod::Delete);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_broken_files(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn similar_videos(similar_videos: SimilarVideosArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
2022-12-20 22:19:30 +13:00
|
|
|
let SimilarVideosArgs {
|
2024-01-15 02:38:55 +13:00
|
|
|
common_cli_items,
|
2022-12-20 22:19:30 +13:00
|
|
|
tolerance,
|
|
|
|
minimal_file_size,
|
|
|
|
maximal_file_size,
|
2023-10-14 07:33:17 +13:00
|
|
|
delete_method,
|
|
|
|
dry_run,
|
2022-12-20 22:19:30 +13:00
|
|
|
} = similar_videos;
|
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = SimilarVideos::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2023-10-13 05:48:46 +13:00
|
|
|
item.set_minimal_file_size(minimal_file_size);
|
|
|
|
item.set_maximal_file_size(maximal_file_size);
|
|
|
|
item.set_tolerance(tolerance);
|
2023-10-14 07:33:17 +13:00
|
|
|
item.set_delete_method(delete_method.delete_method);
|
|
|
|
item.set_dry_run(dry_run.dry_run);
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_similar_videos(Some(stop_receiver), Some(progress_sender));
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2022-12-20 22:19:30 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn bad_extensions(bad_extensions: BadExtensionsArgs, stop_receiver: &Receiver<()>, progress_sender: &Sender<ProgressData>) {
|
|
|
|
let BadExtensionsArgs { common_cli_items } = bad_extensions;
|
2023-05-11 07:27:41 +12:00
|
|
|
|
2023-10-13 05:48:46 +13:00
|
|
|
let mut item = BadExtensions::new();
|
2022-12-20 22:19:30 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
set_common_settings(&mut item, &common_cli_items);
|
2023-10-11 07:54:41 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
item.find_bad_extensions_files(Some(stop_receiver), Some(progress_sender));
|
2023-10-13 05:48:46 +13:00
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
save_and_print_results(&mut item, &common_cli_items);
|
2023-10-13 05:48:46 +13:00
|
|
|
}
|
|
|
|
|
2024-01-15 02:38:55 +13:00
|
|
|
fn save_and_print_results<T: CommonData + PrintResults>(component: &mut T, common_cli_items: &CommonCliItems) {
|
|
|
|
if let Some(file_name) = common_cli_items.file_to_save.file_name() {
|
|
|
|
if let Err(e) = component.print_results_to_file(file_name) {
|
2023-10-11 07:54:41 +13:00
|
|
|
error!("Failed to save results to file {e}");
|
2021-11-18 23:23:17 +13:00
|
|
|
}
|
2020-10-05 10:36:49 +13:00
|
|
|
}
|
2024-01-15 02:38:55 +13:00
|
|
|
if let Some(file_name) = common_cli_items.json_compact_file_to_save.file_name() {
|
|
|
|
if let Err(e) = component.save_results_to_file_as_json(file_name, false) {
|
2023-10-13 05:48:46 +13:00
|
|
|
error!("Failed to save compact json results to file {e}");
|
|
|
|
}
|
|
|
|
}
|
2024-01-15 02:38:55 +13:00
|
|
|
if let Some(file_name) = common_cli_items.json_pretty_file_to_save.file_name() {
|
|
|
|
if let Err(e) = component.save_results_to_file_as_json(file_name, true) {
|
2023-10-13 05:48:46 +13:00
|
|
|
error!("Failed to save pretty json results to file {e}");
|
|
|
|
}
|
2023-10-11 07:54:41 +13:00
|
|
|
}
|
2024-01-15 02:38:55 +13:00
|
|
|
|
|
|
|
if !cfg!(debug_assertions) {
|
|
|
|
component.print_results_to_output();
|
|
|
|
}
|
|
|
|
component.get_text_messages().print_messages();
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_common_settings<T>(component: &mut T, common_cli_items: &CommonCliItems)
|
|
|
|
where
|
|
|
|
T: CommonData + PrintResults,
|
|
|
|
{
|
|
|
|
set_number_of_threads(common_cli_items.thread_number);
|
|
|
|
|
|
|
|
component.set_included_directory(common_cli_items.directories.clone());
|
|
|
|
component.set_excluded_directory(common_cli_items.excluded_directories.clone());
|
|
|
|
component.set_excluded_items(common_cli_items.excluded_items.clone());
|
|
|
|
component.set_recursive_search(!common_cli_items.not_recursive);
|
|
|
|
#[cfg(target_family = "unix")]
|
|
|
|
component.set_exclude_other_filesystems(common_cli_items.exclude_other_filesystems);
|
|
|
|
component.set_allowed_extensions(common_cli_items.allowed_extensions.clone().join(","));
|
2020-08-26 21:17:16 +12:00
|
|
|
}
|