1
0
Fork 0
mirror of synced 2024-05-18 03:13:36 +12:00
This commit is contained in:
Rafał Mikrut 2023-12-16 21:34:35 +01:00
parent 7e49bc6d33
commit 28111121aa
6 changed files with 24 additions and 20 deletions

View file

@ -122,7 +122,6 @@ impl Directories {
}
// Try to canonicalize them
if cfg!(windows) {
// Only canonicalize if it's not a network path
// This can be check by checking if path starts with \\?\UNC\

View file

@ -310,7 +310,7 @@ impl PrintResults for EmptyFolder {
writeln!(writer, "--------------------------Empty folder list--------------------------")?;
writeln!(writer, "Found {} empty folders", self.information.number_of_empty_folders)?;
let mut empty_folder_list = self.empty_folder_list.keys().collect::<Vec<_>>();
empty_folder_list.sort_unstable();
empty_folder_list.par_sort_unstable();
for name in empty_folder_list {
writeln!(writer, "{name}")?;
}

View file

@ -12,12 +12,13 @@ repository = "https://github.com/qarmin/czkawka"
[dependencies]
gdk4 = "0.7"
glib = "0.18"
gtk4 = { version = "0.7", default-features = false, features = ["v4_6"] }
humansize = "2.1"
chrono = "0.4.31"
# Used for sending stop signal across threads
crossbeam-channel = "0.5.8"
crossbeam-channel = "0.5"
# For saving/loading config files to specific directories
directories-next = "2.0"
@ -49,9 +50,9 @@ once_cell = "1.19"
log = "0.4.20"
handsome_logger = "0.8"
fun_time = { version = "0.3", features = ["log"] }
rayon = "1.8"
czkawka_core = { path = "../czkawka_core", version = "6.1.0", features = [] }
gtk4 = { version = "0.7", default-features = false, features = ["v4_6"] }
[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3.9", features = ["combaseapi", "objbase", "shobjidl_core", "windef", "winerror", "wtypesbase", "winuser"] }

View file

@ -8,6 +8,7 @@ use glib::Receiver;
use gtk4::prelude::*;
use gtk4::{Entry, ListStore, TextView, TreeView, Widget};
use humansize::{format_size, BINARY};
use rayon::prelude::*;
use czkawka_core::bad_extensions::BadExtensions;
use czkawka_core::big_file::BigFile;
@ -265,7 +266,7 @@ fn computer_bad_extensions(
// Sort
let mut vector = vector.clone();
vector.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
@ -337,7 +338,7 @@ fn computer_broken_files(
// Sort
let mut vector = vector.clone();
vector.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
@ -500,7 +501,7 @@ fn computer_same_music(
// Sort
let vec_file_entry = if vec_file_entry.len() >= 2 {
let mut vec_file_entry = vec_file_entry.clone();
vec_file_entry.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry
} else {
vec_file_entry.clone()
@ -552,7 +553,7 @@ fn computer_same_music(
// Sort
let vec_file_entry = if vec_file_entry.len() >= 2 {
let mut vec_file_entry = vec_file_entry.clone();
vec_file_entry.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry
} else {
vec_file_entry.clone()
@ -658,7 +659,7 @@ fn computer_similar_videos(
// Sort
let vec_file_entry = if vec_file_entry.len() >= 2 {
let mut vec_file_entry = vec_file_entry.clone();
vec_file_entry.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry
} else {
vec_file_entry.clone()
@ -677,7 +678,7 @@ fn computer_similar_videos(
// Sort
let vec_file_entry = if vec_file_entry.len() >= 2 {
let mut vec_file_entry = vec_file_entry.clone();
vec_file_entry.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vec_file_entry
} else {
vec_file_entry.clone()
@ -756,7 +757,7 @@ fn computer_similar_images(
let vec_file_entry = if vec_file_entry.len() >= 2 {
let mut vec_file_entry = vec_file_entry.clone();
// Use comparison by similarity, because it is more important that path here
vec_file_entry.sort_unstable_by_key(|e| e.similarity);
vec_file_entry.par_sort_unstable_by_key(|e| e.similarity);
vec_file_entry
} else {
vec_file_entry.clone()
@ -799,7 +800,7 @@ fn computer_similar_images(
let vec_file_entry = if vec_file_entry.len() >= 2 {
let mut vec_file_entry = vec_file_entry.clone();
// Use comparison by similarity, because it is more important that path here
vec_file_entry.sort_unstable_by_key(|e| e.similarity);
vec_file_entry.par_sort_unstable_by_key(|e| e.similarity);
vec_file_entry
} else {
vec_file_entry.clone()
@ -877,7 +878,7 @@ fn computer_temporary_files(
// Sort // TODO maybe simplify this via common file entry
let mut vector = vector.clone();
vector.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
for file_entry in vector {
let (directory, file) = split_path(&file_entry.path);
@ -1081,7 +1082,7 @@ fn computer_empty_folders(
let hashmap = ef.get_empty_folder_list();
let mut vector = hashmap.values().collect::<Vec<_>>();
vector.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
for fe in vector {
let (directory, file) = split_path(&fe.path);
@ -1329,10 +1330,11 @@ fn computer_duplicate_finder(
fn vector_sort_unstable_entry_by_path<T>(vector: &[T]) -> Vec<T>
where
T: ResultEntry + Clone,
T: std::marker::Send,
{
if vector.len() >= 2 {
let mut vector = vector.to_vec();
vector.sort_unstable_by(|a, b| split_path_compare(a.get_path(), b.get_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.get_path(), b.get_path()));
vector
} else {
vector.to_vec()
@ -1342,9 +1344,10 @@ where
fn vector_sort_simple_unstable_entry_by_path<T>(vector: &[T]) -> Vec<T>
where
T: ResultEntry + Clone,
T: std::marker::Send,
{
let mut vector = vector.to_vec();
vector.sort_unstable_by(|a, b| split_path_compare(a.get_path(), b.get_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.get_path(), b.get_path()));
vector
}

View file

@ -24,7 +24,7 @@ rand = "0.8"
czkawka_core = { version = "6.1.0", path = "../czkawka_core" }
chrono = "0.4.31"
open = "5.0"
crossbeam-channel = "0.5.8"
crossbeam-channel = "0.5"
handsome_logger = "0.8"
rfd = { version = "0.12", default-features = false, features = ["xdg-portal"] }
home = "0.5"

View file

@ -11,6 +11,7 @@ use czkawka_core::empty_folder::{EmptyFolder, FolderEntry};
use czkawka_core::similar_images;
use czkawka_core::similar_images::SimilarImages;
use humansize::{format_size, BINARY};
use rayon::prelude::*;
use slint::{ComponentHandle, ModelRc, SharedString, VecModel, Weak};
use std::rc::Rc;
use std::thread;
@ -74,7 +75,7 @@ fn scan_similar_images(a: Weak<MainWindow>, progress_sender: Sender<ProgressData
let messages = finder.get_text_messages().create_messages_text();
for vec_fe in &mut vector {
vec_fe.sort_unstable_by_key(|e| e.similarity);
vec_fe.par_sort_unstable_by_key(|e| e.similarity);
}
let hash_size = custom_settings.similar_images_sub_hash_size;
@ -120,7 +121,7 @@ fn scan_empty_files(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>,
let mut vector = finder.get_empty_files().clone();
let messages = finder.get_text_messages().create_messages_text();
vector.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
a.upgrade_in_event_loop(move |app| {
write_empty_files_results(&app, vector, messages);
@ -157,7 +158,7 @@ fn scan_empty_folders(a: Weak<MainWindow>, progress_sender: Sender<ProgressData>
let mut vector = finder.get_empty_folder_list().values().cloned().collect::<Vec<_>>();
let messages = finder.get_text_messages().create_messages_text();
vector.sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
vector.par_sort_unstable_by(|a, b| split_path_compare(a.path.as_path(), b.path.as_path()));
a.upgrade_in_event_loop(move |app| {
write_empty_folders_results(&app, vector, messages);