1
0
Fork 0
mirror of synced 2024-04-25 00:02:07 +12:00

Fix included/excluded files which contains commas (#195)

This commit is contained in:
Rafał Mikrut 2021-01-10 20:44:10 +01:00 committed by GitHub
parent ff85453394
commit 7992ba30de
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
15 changed files with 79 additions and 87 deletions

View file

@ -180,8 +180,8 @@ pub struct ExcludedDirectories {
#[derive(Debug, StructOpt)]
pub struct ExcludedItems {
#[structopt(short = "E", long, parse(from_os_str), help = "Excluded item(s)", long_help = "List of excluded item(s) which contains * wildcard(may be slow, so use -e where possible)")]
pub excluded_items: Vec<PathBuf>,
#[structopt(short = "E", long, help = "Excluded item(s)", long_help = "List of excluded item(s) which contains * wildcard(may be slow, so use -e where possible)")]
pub excluded_items: Vec<String>,
}
#[derive(Debug, StructOpt)]

View file

@ -17,14 +17,9 @@ use czkawka_core::{
temporary::{self, Temporary},
zeroed::{self, ZeroedFiles},
};
use std::{path::PathBuf, process};
use std::process;
use structopt::StructOpt;
fn path_list_to_str(path_list: Vec<PathBuf>) -> String {
let path_list: Vec<String> = path_list.into_iter().filter_map(|a| a.into_os_string().into_string().ok()).collect();
path_list.join(",")
}
fn main() {
let command = Commands::from_args();
@ -45,9 +40,9 @@ fn main() {
} => {
let mut df = DuplicateFinder::new();
df.set_included_directory(path_list_to_str(directories.directories));
df.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
df.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
df.set_included_directory(directories.directories);
df.set_excluded_directory(excluded_directories.excluded_directories);
df.set_excluded_items(excluded_items.excluded_items);
df.set_minimal_file_size(minimal_file_size);
df.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
df.set_check_method(search_method);
@ -76,9 +71,9 @@ fn main() {
} => {
let mut ef = EmptyFolder::new();
ef.set_included_directory(path_list_to_str(directories.directories));
ef.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
ef.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
ef.set_included_directory(directories.directories);
ef.set_excluded_directory(excluded_directories.excluded_directories);
ef.set_excluded_items(excluded_items.excluded_items);
ef.set_delete_folder(delete_folders);
ef.find_empty_folders(None, None);
@ -106,9 +101,9 @@ fn main() {
} => {
let mut bf = BigFile::new();
bf.set_included_directory(path_list_to_str(directories.directories));
bf.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
bf.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
bf.set_included_directory(directories.directories);
bf.set_excluded_directory(excluded_directories.excluded_directories);
bf.set_excluded_items(excluded_items.excluded_items);
bf.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
bf.set_number_of_files_to_check(number_of_files);
bf.set_recursive_search(!not_recursive.not_recursive);
@ -140,9 +135,9 @@ fn main() {
} => {
let mut ef = EmptyFiles::new();
ef.set_included_directory(path_list_to_str(directories.directories));
ef.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
ef.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
ef.set_included_directory(directories.directories);
ef.set_excluded_directory(excluded_directories.excluded_directories);
ef.set_excluded_items(excluded_items.excluded_items);
ef.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
ef.set_recursive_search(!not_recursive.not_recursive);
@ -173,9 +168,9 @@ fn main() {
} => {
let mut tf = Temporary::new();
tf.set_included_directory(path_list_to_str(directories.directories));
tf.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
tf.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
tf.set_included_directory(directories.directories);
tf.set_excluded_directory(excluded_directories.excluded_directories);
tf.set_excluded_items(excluded_items.excluded_items);
tf.set_recursive_search(!not_recursive.not_recursive);
if delete_files {
@ -206,9 +201,9 @@ fn main() {
} => {
let mut sf = SimilarImages::new();
sf.set_included_directory(path_list_to_str(directories.directories));
sf.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
sf.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
sf.set_included_directory(directories.directories);
sf.set_excluded_directory(excluded_directories.excluded_directories);
sf.set_excluded_items(excluded_items.excluded_items);
sf.set_minimal_file_size(minimal_file_size);
sf.set_recursive_search(!not_recursive.not_recursive);
sf.set_similarity(similarity);
@ -238,9 +233,9 @@ fn main() {
} => {
let mut zf = ZeroedFiles::new();
zf.set_included_directory(path_list_to_str(directories.directories));
zf.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
zf.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
zf.set_included_directory(directories.directories);
zf.set_excluded_directory(excluded_directories.excluded_directories);
zf.set_excluded_items(excluded_items.excluded_items);
zf.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
zf.set_minimal_file_size(minimal_file_size);
zf.set_recursive_search(!not_recursive.not_recursive);
@ -274,9 +269,9 @@ fn main() {
} => {
let mut mf = SameMusic::new();
mf.set_included_directory(path_list_to_str(directories.directories));
mf.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
mf.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
mf.set_included_directory(directories.directories);
mf.set_excluded_directory(excluded_directories.excluded_directories);
mf.set_excluded_items(excluded_items.excluded_items);
mf.set_minimal_file_size(minimal_file_size);
mf.set_recursive_search(!not_recursive.not_recursive);
mf.set_music_similarity(music_similarity);
@ -309,9 +304,9 @@ fn main() {
} => {
let mut ifs = InvalidSymlinks::new();
ifs.set_included_directory(path_list_to_str(directories.directories));
ifs.set_excluded_directory(path_list_to_str(excluded_directories.excluded_directories));
ifs.set_excluded_items(path_list_to_str(excluded_items.excluded_items));
ifs.set_included_directory(directories.directories);
ifs.set_excluded_directory(excluded_directories.excluded_directories);
ifs.set_excluded_items(excluded_items.excluded_items);
ifs.set_allowed_extensions(allowed_extensions.allowed_extensions.join(","));
ifs.set_recursive_search(!not_recursive.not_recursive);
if delete_files {

View file

@ -276,7 +276,7 @@ impl BigFile {
/// Setting excluded items which needs to contains * wildcard
/// Are a lot of slower than absolute path, so it should be used to heavy
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
@ -286,12 +286,12 @@ impl BigFile {
}
/// Setting included directories, at least one must be provided
pub fn set_included_directory(&mut self, included_directory: String) {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) {
self.directories.set_included_directory(included_directory, &mut self.text_messages);
}
/// Setting absolute path to exclude
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}

View file

@ -14,7 +14,7 @@ impl Directories {
}
/// Setting included directories, at least one must be provided
pub fn set_included_directory(&mut self, included_directory: String, text_messages: &mut Messages) -> bool {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>, text_messages: &mut Messages) -> bool {
let start_time: SystemTime = SystemTime::now();
if included_directory.is_empty() {
@ -22,8 +22,7 @@ impl Directories {
return false;
}
let included_directory = included_directory.replace("\"", "");
let directories: Vec<_> = included_directory.split(',').map(|dir| dir.trim()).filter(|dir| !dir.is_empty()).map(PathBuf::from).collect();
let directories: Vec<PathBuf> = included_directory;
let mut checked_directories: Vec<PathBuf> = Vec::new();
for directory in directories {
@ -66,15 +65,13 @@ impl Directories {
}
/// Setting absolute path to exclude
pub fn set_excluded_directory(&mut self, excluded_directory: String, text_messages: &mut Messages) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>, text_messages: &mut Messages) {
let start_time: SystemTime = SystemTime::now();
if excluded_directory.is_empty() {
return;
}
let excluded_directory = excluded_directory.replace("\"", "");
let directories: Vec<PathBuf> = excluded_directory.split(',').map(|dir| dir.trim()).filter(|dir| !dir.is_empty()).map(PathBuf::from).collect();
let directories: Vec<PathBuf> = excluded_directory;
let mut checked_directories: Vec<PathBuf> = Vec::new();
for directory in directories {

View file

@ -14,15 +14,14 @@ impl ExcludedItems {
}
/// Setting excluded items which needs to contains * wildcard
/// Are a lot of slower than absolute path, so it should be used to heavy
pub fn set_excluded_items(&mut self, mut excluded_items: String, text_messages: &mut Messages) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>, text_messages: &mut Messages) {
let start_time: SystemTime = SystemTime::now();
if excluded_items.is_empty() {
return;
}
excluded_items = excluded_items.replace("\"", "");
let expressions: Vec<String> = excluded_items.split(',').map(String::from).collect();
let expressions: Vec<String> = excluded_items;
let mut checked_expressions: Vec<String> = Vec::new();
for expression in expressions {

View file

@ -202,18 +202,18 @@ impl DuplicateFinder {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: String) -> bool {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) {
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}

View file

@ -111,18 +111,18 @@ impl EmptyFiles {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: String) -> bool {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) {
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}

View file

@ -89,11 +89,11 @@ impl EmptyFolder {
&self.information
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
/// Public function used by CLI to search for empty folders
@ -283,7 +283,7 @@ impl EmptyFolder {
}
/// Set included dir which needs to be relative, exists etc.
pub fn set_included_directory(&mut self, included_directory: String) {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) {
self.directories.set_included_directory(included_directory, &mut self.text_messages);
}
}

View file

@ -120,18 +120,18 @@ impl InvalidSymlinks {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: String) -> bool {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) {
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}

View file

@ -157,15 +157,15 @@ impl SameMusic {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: String) -> bool {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}

View file

@ -531,15 +531,15 @@ impl SimilarImages {
}
/// Set included dir which needs to be relative, exists etc.
pub fn set_included_directory(&mut self, included_directory: String) {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) {
self.directories.set_included_directory(included_directory, &mut self.text_messages);
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}
}

View file

@ -106,15 +106,15 @@ impl Temporary {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: String) -> bool {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}

View file

@ -128,18 +128,18 @@ impl ZeroedFiles {
self.recursive_search = recursive_search;
}
pub fn set_included_directory(&mut self, included_directory: String) -> bool {
pub fn set_included_directory(&mut self, included_directory: Vec<PathBuf>) -> bool {
self.directories.set_included_directory(included_directory, &mut self.text_messages)
}
pub fn set_excluded_directory(&mut self, excluded_directory: String) {
pub fn set_excluded_directory(&mut self, excluded_directory: Vec<PathBuf>) {
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
}
pub fn set_allowed_extensions(&mut self, allowed_extensions: String) {
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
}
pub fn set_excluded_items(&mut self, excluded_items: String) {
pub fn set_excluded_items(&mut self, excluded_items: Vec<String>) {
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
}

View file

@ -83,10 +83,10 @@ pub fn connect_button_search(
let image_preview_similar_images = gui_data.main_notebook.image_preview_similar_images.clone();
buttons_search_clone.connect_clicked(move |_| {
let included_directories = get_string_from_list_store(&tree_view_included_directories);
let excluded_directories = get_string_from_list_store(&tree_view_excluded_directories);
let included_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_included_directories));
let excluded_directories = get_path_buf_from_vector_of_strings(get_string_from_list_store(&tree_view_excluded_directories));
let recursive_search = check_button_recursive.get_active();
let excluded_items = entry_excluded_items.get_text().as_str().to_string();
let excluded_items = entry_excluded_items.get_text().as_str().to_string().split(',').map(|e| e.to_string()).collect::<Vec<String>>();
let allowed_extensions = entry_allowed_extensions.get_text().as_str().to_string();
let show_dialog = Arc::new(AtomicBool::new(true));

View file

@ -12,7 +12,7 @@ use czkawka_core::zeroed::ZeroedFiles;
use gtk::prelude::*;
use gtk::{ListStore, TextView};
use std::collections::HashMap;
use std::path::Path;
use std::path::{Path, PathBuf};
pub enum Message {
Duplicates(DuplicateFinder),
@ -110,27 +110,28 @@ pub const HEADER_ROW_COLOR: &str = "#272727";
//pub const MAIN_ROW_COLOR: &str = "#f4f434"; // TEST
//pub const HEADER_ROW_COLOR: &str = "#010101"; // TEST
pub fn get_string_from_list_store(tree_view: &gtk::TreeView) -> String {
pub fn get_string_from_list_store(tree_view: &gtk::TreeView) -> Vec<String> {
let list_store: gtk::ListStore = get_list_store(&tree_view);
let mut first: bool = true;
let mut return_string: String = "".to_string();
let mut string_vector: Vec<String> = Vec::new();
let tree_iter = match list_store.get_iter_first() {
Some(t) => t,
None => return return_string,
None => {
return string_vector;
}
};
loop {
if !first {
return_string += ",";
} else {
first = false;
}
return_string += list_store.get_value(&tree_iter, 0).get::<String>().unwrap().unwrap().as_str();
string_vector.push(list_store.get_value(&tree_iter, 0).get::<String>().unwrap().unwrap());
if !list_store.iter_next(&tree_iter) {
return return_string;
return string_vector;
}
}
}
pub fn get_path_buf_from_vector_of_strings(vec_string: Vec<String>) -> Vec<PathBuf> {
vec_string.iter().map(PathBuf::from).collect()
}
pub fn split_path(path: &Path) -> (String, String) {
match (path.parent(), path.file_name()) {
(Some(dir), Some(file)) => (dir.display().to_string(), file.to_string_lossy().into_owned()),