2023-10-05 19:06:47 +13:00
|
|
|
use std::path::PathBuf;
|
|
|
|
|
|
|
|
use crate::common_dir_traversal::ToolType;
|
|
|
|
use crate::common_directory::Directories;
|
|
|
|
use crate::common_extensions::Extensions;
|
|
|
|
use crate::common_items::ExcludedItems;
|
|
|
|
use crate::common_messages::Messages;
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Default)]
|
|
|
|
pub struct CommonToolData {
|
|
|
|
pub(crate) tool_type: ToolType,
|
|
|
|
pub(crate) text_messages: Messages,
|
|
|
|
pub(crate) directories: Directories,
|
|
|
|
pub(crate) allowed_extensions: Extensions,
|
|
|
|
pub(crate) excluded_items: ExcludedItems,
|
|
|
|
pub(crate) recursive_search: bool,
|
2023-10-11 07:54:41 +13:00
|
|
|
pub(crate) delete_method: DeleteMethod,
|
2023-10-05 19:06:47 +13:00
|
|
|
pub(crate) maximal_file_size: u64,
|
|
|
|
pub(crate) minimal_file_size: u64,
|
|
|
|
pub(crate) stopped_search: bool,
|
|
|
|
pub(crate) use_cache: bool,
|
|
|
|
pub(crate) delete_outdated_cache: bool,
|
|
|
|
pub(crate) save_also_as_json: bool,
|
|
|
|
pub(crate) use_reference_folders: bool,
|
2023-10-14 07:33:17 +13:00
|
|
|
pub(crate) dry_run: bool,
|
2023-10-05 19:06:47 +13:00
|
|
|
}
|
|
|
|
|
2023-10-11 07:54:41 +13:00
|
|
|
#[derive(Eq, PartialEq, Clone, Debug, Copy, Default)]
|
|
|
|
pub enum DeleteMethod {
|
|
|
|
#[default]
|
|
|
|
None,
|
|
|
|
Delete, // Just delete items
|
|
|
|
AllExceptNewest,
|
|
|
|
AllExceptOldest,
|
|
|
|
OneOldest,
|
|
|
|
OneNewest,
|
|
|
|
HardLink,
|
|
|
|
}
|
|
|
|
|
2023-10-05 19:06:47 +13:00
|
|
|
impl CommonToolData {
|
|
|
|
pub fn new(tool_type: ToolType) -> Self {
|
|
|
|
Self {
|
|
|
|
tool_type,
|
|
|
|
text_messages: Messages::new(),
|
|
|
|
directories: Directories::new(),
|
|
|
|
allowed_extensions: Extensions::new(),
|
|
|
|
excluded_items: ExcludedItems::new(),
|
|
|
|
recursive_search: true,
|
2023-10-11 07:54:41 +13:00
|
|
|
delete_method: DeleteMethod::None,
|
2023-10-05 19:06:47 +13:00
|
|
|
maximal_file_size: u64::MAX,
|
|
|
|
minimal_file_size: 8192,
|
|
|
|
stopped_search: false,
|
|
|
|
use_cache: true,
|
|
|
|
delete_outdated_cache: true,
|
|
|
|
save_also_as_json: false,
|
|
|
|
use_reference_folders: false,
|
2023-10-14 07:33:17 +13:00
|
|
|
dry_run: false,
|
2023-10-05 19:06:47 +13:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait CommonData {
|
|
|
|
fn get_cd(&self) -> &CommonToolData;
|
|
|
|
fn get_cd_mut(&mut self) -> &mut CommonToolData;
|
|
|
|
|
2023-10-14 07:33:17 +13:00
|
|
|
fn set_dry_run(&mut self, dry_run: bool) {
|
|
|
|
self.get_cd_mut().dry_run = dry_run;
|
|
|
|
}
|
|
|
|
fn get_dry_run(&self) -> bool {
|
|
|
|
self.get_cd().dry_run
|
|
|
|
}
|
|
|
|
|
2023-10-05 19:06:47 +13:00
|
|
|
fn set_use_cache(&mut self, use_cache: bool) {
|
|
|
|
self.get_cd_mut().use_cache = use_cache;
|
|
|
|
}
|
|
|
|
fn get_use_cache(&self) -> bool {
|
|
|
|
self.get_cd().use_cache
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_delete_outdated_cache(&mut self, delete_outdated_cache: bool) {
|
|
|
|
self.get_cd_mut().delete_outdated_cache = delete_outdated_cache;
|
|
|
|
}
|
|
|
|
fn get_delete_outdated_cache(&self) -> bool {
|
|
|
|
self.get_cd().delete_outdated_cache
|
|
|
|
}
|
|
|
|
|
|
|
|
fn get_stopped_search(&self) -> bool {
|
|
|
|
self.get_cd().stopped_search
|
|
|
|
}
|
|
|
|
fn set_stopped_search(&mut self, stopped_search: bool) {
|
|
|
|
self.get_cd_mut().stopped_search = stopped_search;
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_maximal_file_size(&mut self, maximal_file_size: u64) {
|
|
|
|
self.get_cd_mut().maximal_file_size = match maximal_file_size {
|
|
|
|
0 => 1,
|
|
|
|
t => t,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
fn get_maximal_file_size(&self) -> u64 {
|
|
|
|
self.get_cd().maximal_file_size
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_minimal_file_size(&mut self, minimal_file_size: u64) {
|
|
|
|
self.get_cd_mut().minimal_file_size = match minimal_file_size {
|
|
|
|
0 => 1,
|
|
|
|
t => t,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
fn get_minimal_file_size(&self) -> u64 {
|
|
|
|
self.get_cd().minimal_file_size
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_reference_directory(&mut self, reference_directory: Vec<PathBuf>) {
|
|
|
|
self.get_cd_mut().directories.set_reference_directory(reference_directory);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(target_family = "unix")]
|
|
|
|
fn set_exclude_other_filesystems(&mut self, exclude_other_filesystems: bool) {
|
|
|
|
self.get_cd_mut().directories.set_exclude_other_filesystems(exclude_other_filesystems);
|
|
|
|
}
|
|
|
|
#[cfg(not(target_family = "unix"))]
|
|
|
|
fn set_exclude_other_filesystems(&mut self, _exclude_other_filesystems: bool) {}
|
|
|
|
|
|
|
|
fn get_text_messages(&self) -> &Messages {
|
|
|
|
&self.get_cd().text_messages
|
|
|
|
}
|
2023-10-08 05:04:17 +13:00
|
|
|
fn get_text_messages_mut(&mut self) -> &mut Messages {
|
|
|
|
&mut self.get_cd_mut().text_messages
|
|
|
|
}
|
2023-10-05 19:06:47 +13:00
|
|
|
|
|
|
|
fn set_save_also_as_json(&mut self, save_also_as_json: bool) {
|
|
|
|
self.get_cd_mut().save_also_as_json = save_also_as_json;
|
|
|
|
}
|
|
|
|
fn get_save_also_as_json(&self) -> bool {
|
|
|
|
self.get_cd().save_also_as_json
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_recursive_search(&mut self, recursive_search: bool) {
|
|
|
|
self.get_cd_mut().recursive_search = recursive_search;
|
|
|
|
}
|
|
|
|
fn get_recursive_search(&self) -> bool {
|
|
|
|
self.get_cd().recursive_search
|
|
|
|
}
|
|
|
|
|
|
|
|
fn set_use_reference_folders(&mut self, use_reference_folders: bool) {
|
|
|
|
self.get_cd_mut().use_reference_folders = use_reference_folders;
|
|
|
|
}
|
|
|
|
fn get_use_reference_folders(&self) -> bool {
|
|
|
|
self.get_cd().use_reference_folders
|
|
|
|
}
|
|
|
|
|
2023-10-11 07:54:41 +13:00
|
|
|
fn set_delete_method(&mut self, delete_method: DeleteMethod) {
|
|
|
|
self.get_cd_mut().delete_method = delete_method;
|
|
|
|
}
|
|
|
|
fn get_delete_method(&self) -> DeleteMethod {
|
|
|
|
self.get_cd().delete_method
|
|
|
|
}
|
|
|
|
|
2023-10-05 19:06:47 +13:00
|
|
|
fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) {
|
2023-10-11 07:54:41 +13:00
|
|
|
let messages = self.get_cd_mut().directories.set_included_directory(included_directory);
|
|
|
|
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
|
2023-10-05 19:06:47 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
|
2023-10-11 07:54:41 +13:00
|
|
|
let messages = self.get_cd_mut().directories.set_excluded_directory(excluded_directory);
|
|
|
|
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
|
2023-10-05 19:06:47 +13:00
|
|
|
}
|
|
|
|
fn set_allowed_extensions(&mut self, allowed_extensions: String) {
|
2023-10-11 07:54:41 +13:00
|
|
|
let messages = self.get_cd_mut().allowed_extensions.set_allowed_extensions(allowed_extensions);
|
|
|
|
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
|
2023-10-05 19:06:47 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
|
|
|
|
let (messages, warnings, errors) = self.get_cd_mut().excluded_items.set_excluded_items(excluded_items);
|
|
|
|
self.get_cd_mut().text_messages.messages.extend(messages);
|
|
|
|
self.get_cd_mut().text_messages.warnings.extend(warnings);
|
|
|
|
self.get_cd_mut().text_messages.errors.extend(errors);
|
|
|
|
}
|
|
|
|
|
|
|
|
fn optimize_dirs_before_start(&mut self) {
|
|
|
|
let recursive_search = self.get_cd().recursive_search;
|
2023-10-11 07:54:41 +13:00
|
|
|
let messages = self.get_cd_mut().directories.optimize_directories(recursive_search);
|
|
|
|
self.get_cd_mut().text_messages.extend_with_another_messages(messages);
|
2023-10-05 19:06:47 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
fn debug_print_common(&self) {
|
|
|
|
println!("---------------DEBUG PRINT COMMON---------------");
|
|
|
|
println!("Tool type: {:?}", self.get_cd().tool_type);
|
|
|
|
println!("Directories: {:?}", self.get_cd().directories);
|
|
|
|
println!("Allowed extensions: {:?}", self.get_cd().allowed_extensions);
|
|
|
|
println!("Excluded items: {:?}", self.get_cd().excluded_items);
|
|
|
|
println!("Recursive search: {:?}", self.get_cd().recursive_search);
|
|
|
|
println!("Maximal file size: {:?}", self.get_cd().maximal_file_size);
|
|
|
|
println!("Minimal file size: {:?}", self.get_cd().minimal_file_size);
|
|
|
|
println!("Stopped search: {:?}", self.get_cd().stopped_search);
|
|
|
|
println!("Use cache: {:?}", self.get_cd().use_cache);
|
|
|
|
println!("Delete outdated cache: {:?}", self.get_cd().delete_outdated_cache);
|
|
|
|
println!("Save also as json: {:?}", self.get_cd().save_also_as_json);
|
2023-10-11 07:54:41 +13:00
|
|
|
println!("Delete method: {:?}", self.get_cd().delete_method);
|
2023-10-14 07:33:17 +13:00
|
|
|
println!("Use reference folders: {:?}", self.get_cd().use_reference_folders);
|
|
|
|
println!("Dry run: {:?}", self.get_cd().dry_run);
|
2023-10-05 19:06:47 +13:00
|
|
|
|
|
|
|
println!("---------------DEBUG PRINT MESSAGES---------------");
|
|
|
|
println!("Errors size - {}", self.get_cd().text_messages.errors.len());
|
|
|
|
println!("Warnings size - {}", self.get_cd().text_messages.warnings.len());
|
|
|
|
println!("Messages size - {}", self.get_cd().text_messages.messages.len());
|
|
|
|
}
|
|
|
|
}
|