Fix crashes with too small message queue (#316)
This commit is contained in:
parent
d90d2270fb
commit
775b6b4f10
|
@ -79,7 +79,7 @@ impl BigFile {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.optimize_directories();
|
self.optimize_directories();
|
||||||
if !self.look_for_big_files(stop_receiver, progress_sender) {
|
if !self.look_for_big_files(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -117,7 +117,7 @@ impl BigFile {
|
||||||
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
|
self.allowed_extensions.set_allowed_extensions(allowed_extensions, &mut self.text_messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn look_for_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn look_for_big_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -134,12 +134,12 @@ impl BigFile {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
|
@ -98,7 +98,7 @@ impl BrokenFiles {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_broken_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_broken_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
||||||
if !self.check_files(stop_receiver, progress_sender) {
|
if !self.check_files(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -155,7 +155,7 @@ impl BrokenFiles {
|
||||||
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
|
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -172,12 +172,12 @@ impl BrokenFiles {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
@ -300,7 +300,7 @@ impl BrokenFiles {
|
||||||
Common::print_time(start_time, SystemTime::now(), "check_files".to_string());
|
Common::print_time(start_time, SystemTime::now(), "check_files".to_string());
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
fn look_for_broken_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn look_for_broken_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let system_time = SystemTime::now();
|
let system_time = SystemTime::now();
|
||||||
|
|
||||||
let loaded_hash_map;
|
let loaded_hash_map;
|
||||||
|
@ -341,13 +341,13 @@ impl BrokenFiles {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let files_to_check = non_cached_files_to_check.len();
|
let files_to_check = non_cached_files_to_check.len();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -177,7 +177,7 @@ impl DuplicateFinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_duplicates(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_duplicates(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
||||||
|
|
||||||
match self.check_method {
|
match self.check_method {
|
||||||
|
@ -289,7 +289,7 @@ impl DuplicateFinder {
|
||||||
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
|
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_files_name(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files_name(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -306,12 +306,12 @@ impl DuplicateFinder {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
checking_method: CheckingMethod::Name,
|
checking_method: CheckingMethod::Name,
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 0,
|
max_stage: 0,
|
||||||
|
@ -454,7 +454,7 @@ impl DuplicateFinder {
|
||||||
|
|
||||||
/// Read file length and puts it to different boxes(each for different lengths)
|
/// Read file length and puts it to different boxes(each for different lengths)
|
||||||
/// If in box is only 1 result, then it is removed
|
/// If in box is only 1 result, then it is removed
|
||||||
fn check_files_size(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files_size(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@ impl DuplicateFinder {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let checking_method = self.check_method.clone();
|
let checking_method = self.check_method.clone();
|
||||||
|
@ -482,7 +482,7 @@ impl DuplicateFinder {
|
||||||
};
|
};
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
checking_method: checking_method.clone(),
|
checking_method: checking_method.clone(),
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage,
|
max_stage,
|
||||||
|
@ -636,7 +636,7 @@ impl DuplicateFinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The slowest checking type, which must be applied after checking for size
|
/// The slowest checking type, which must be applied after checking for size
|
||||||
fn check_files_hash(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files_hash(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let check_type = Arc::new(self.hash_type);
|
let check_type = Arc::new(self.hash_type);
|
||||||
|
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
|
@ -651,14 +651,14 @@ impl DuplicateFinder {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let files_to_check = self.files_with_identical_size.iter().map(|e| e.1.len()).sum();
|
let files_to_check = self.files_with_identical_size.iter().map(|e| e.1.len()).sum();
|
||||||
let checking_method = self.check_method.clone();
|
let checking_method = self.check_method.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
checking_method: checking_method.clone(),
|
checking_method: checking_method.clone(),
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 2,
|
max_stage: 2,
|
||||||
|
@ -741,14 +741,14 @@ impl DuplicateFinder {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let files_to_check = pre_checked_map.iter().map(|e| e.1.len()).sum();
|
let files_to_check = pre_checked_map.iter().map(|e| e.1.len()).sum();
|
||||||
let checking_method = self.check_method.clone();
|
let checking_method = self.check_method.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
checking_method: checking_method.clone(),
|
checking_method: checking_method.clone(),
|
||||||
current_stage: 2,
|
current_stage: 2,
|
||||||
max_stage: 2,
|
max_stage: 2,
|
||||||
|
|
|
@ -77,7 +77,7 @@ impl EmptyFiles {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Finding empty files, save results to internal struct variables
|
/// Finding empty files, save results to internal struct variables
|
||||||
pub fn find_empty_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_empty_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
||||||
if !self.check_files(stop_receiver, progress_sender) {
|
if !self.check_files(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -127,7 +127,7 @@ impl EmptyFiles {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check files for any with size == 0
|
/// Check files for any with size == 0
|
||||||
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -144,12 +144,12 @@ impl EmptyFiles {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 0,
|
max_stage: 0,
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -97,7 +97,7 @@ impl EmptyFolder {
|
||||||
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
|
self.directories.set_excluded_directory(excluded_directory, &mut self.text_messages);
|
||||||
}
|
}
|
||||||
/// Public function used by CLI to search for empty folders
|
/// Public function used by CLI to search for empty folders
|
||||||
pub fn find_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(true, &mut self.text_messages);
|
self.directories.optimize_directories(true, &mut self.text_messages);
|
||||||
if !self.check_for_empty_folders(stop_receiver, progress_sender) {
|
if !self.check_for_empty_folders(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -137,7 +137,7 @@ impl EmptyFolder {
|
||||||
|
|
||||||
/// Function to check if folder are empty.
|
/// Function to check if folder are empty.
|
||||||
/// Parameter initial_checking for second check before deleting to be sure that checked folder is still empty
|
/// Parameter initial_checking for second check before deleting to be sure that checked folder is still empty
|
||||||
fn check_for_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_for_empty_folders(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
let mut folders_checked: BTreeMap<PathBuf, FolderEntry> = Default::default();
|
let mut folders_checked: BTreeMap<PathBuf, FolderEntry> = Default::default();
|
||||||
|
@ -150,12 +150,12 @@ impl EmptyFolder {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_folder_counter = atomic_folder_counter.clone();
|
let atomic_folder_counter = atomic_folder_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 0,
|
max_stage: 0,
|
||||||
folders_checked: atomic_folder_counter.load(Ordering::Relaxed) as usize,
|
folders_checked: atomic_folder_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -86,7 +86,7 @@ impl InvalidSymlinks {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_invalid_links(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_invalid_links(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
||||||
if !self.check_files(stop_receiver, progress_sender) {
|
if !self.check_files(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -136,7 +136,7 @@ impl InvalidSymlinks {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check files for any with size == 0
|
/// Check files for any with size == 0
|
||||||
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -153,12 +153,12 @@ impl InvalidSymlinks {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 0,
|
max_stage: 0,
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -112,7 +112,7 @@ impl SameMusic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_same_music(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_same_music(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
||||||
if !self.check_files(stop_receiver, progress_sender) {
|
if !self.check_files(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -174,7 +174,7 @@ impl SameMusic {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check files for any with size == 0
|
/// Check files for any with size == 0
|
||||||
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -191,12 +191,12 @@ impl SameMusic {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 2,
|
max_stage: 2,
|
||||||
music_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
music_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
@ -312,7 +312,7 @@ impl SameMusic {
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_records_multithreaded(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_records_multithreaded(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
|
|
||||||
let check_was_breaked = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
let check_was_breaked = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||||
|
@ -325,13 +325,13 @@ impl SameMusic {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let music_to_check = self.music_to_check.len();
|
let music_to_check = self.music_to_check.len();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 2,
|
max_stage: 2,
|
||||||
music_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
music_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
@ -408,7 +408,7 @@ impl SameMusic {
|
||||||
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
fn check_for_duplicates(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_for_duplicates(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
if MusicSimilarity::NONE == self.music_similarity {
|
if MusicSimilarity::NONE == self.music_similarity {
|
||||||
panic!("This can't be none");
|
panic!("This can't be none");
|
||||||
}
|
}
|
||||||
|
@ -422,13 +422,13 @@ impl SameMusic {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let music_to_check = self.music_to_check.len();
|
let music_to_check = self.music_to_check.len();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 2,
|
current_stage: 2,
|
||||||
max_stage: 2,
|
max_stage: 2,
|
||||||
music_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
music_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -151,7 +151,7 @@ impl SimilarImages {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Public function used by CLI to search for empty folders
|
/// Public function used by CLI to search for empty folders
|
||||||
pub fn find_similar_images(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_similar_images(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(true, &mut self.text_messages);
|
self.directories.optimize_directories(true, &mut self.text_messages);
|
||||||
if !self.check_for_similar_images(stop_receiver, progress_sender) {
|
if !self.check_for_similar_images(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -173,7 +173,7 @@ impl SimilarImages {
|
||||||
|
|
||||||
/// Function to check if folder are empty.
|
/// Function to check if folder are empty.
|
||||||
/// Parameter initial_checking for second check before deleting to be sure that checked folder is still empty
|
/// Parameter initial_checking for second check before deleting to be sure that checked folder is still empty
|
||||||
fn check_for_similar_images(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_for_similar_images(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -190,12 +190,12 @@ impl SimilarImages {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
images_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
images_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
@ -324,7 +324,7 @@ impl SimilarImages {
|
||||||
// - Join already read hashes with hashes which were read from file
|
// - Join already read hashes with hashes which were read from file
|
||||||
// - Join all hashes and save it to file
|
// - Join all hashes and save it to file
|
||||||
|
|
||||||
fn sort_images(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn sort_images(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let hash_map_modification = SystemTime::now();
|
let hash_map_modification = SystemTime::now();
|
||||||
|
|
||||||
let loaded_hash_map;
|
let loaded_hash_map;
|
||||||
|
@ -367,13 +367,13 @@ impl SimilarImages {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let images_to_check = non_cached_files_to_check.len();
|
let images_to_check = non_cached_files_to_check.len();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
images_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
images_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -74,7 +74,7 @@ impl Temporary {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Finding temporary files, save results to internal struct variables
|
/// Finding temporary files, save results to internal struct variables
|
||||||
pub fn find_temporary_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_temporary_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
||||||
if !self.check_files(stop_receiver, progress_sender) {
|
if !self.check_files(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -118,7 +118,7 @@ impl Temporary {
|
||||||
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
|
self.excluded_items.set_excluded_items(excluded_items, &mut self.text_messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -135,12 +135,12 @@ impl Temporary {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 0,
|
max_stage: 0,
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -83,7 +83,7 @@ impl ZeroedFiles {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn find_zeroed_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) {
|
pub fn find_zeroed_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) {
|
||||||
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
self.directories.optimize_directories(self.recursive_search, &mut self.text_messages);
|
||||||
if !self.check_files(stop_receiver, progress_sender) {
|
if !self.check_files(stop_receiver, progress_sender) {
|
||||||
self.stopped_search = true;
|
self.stopped_search = true;
|
||||||
|
@ -144,7 +144,7 @@ impl ZeroedFiles {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check files for files which have 0
|
/// Check files for files which have 0
|
||||||
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
let mut folders_to_check: Vec<PathBuf> = Vec::with_capacity(1024 * 2); // This should be small enough too not see to big difference and big enough to store most of paths without needing to resize vector
|
||||||
|
|
||||||
|
@ -161,12 +161,12 @@ impl ZeroedFiles {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
@ -286,7 +286,7 @@ impl ZeroedFiles {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check files for files which have 0
|
/// Check files for files which have 0
|
||||||
fn check_for_zeroed_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::Sender<ProgressData>>) -> bool {
|
fn check_for_zeroed_files(&mut self, stop_receiver: Option<&Receiver<()>>, progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>) -> bool {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
|
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
|
@ -297,13 +297,13 @@ impl ZeroedFiles {
|
||||||
|
|
||||||
let progress_thread_handle;
|
let progress_thread_handle;
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let mut progress_send = progress_sender.clone();
|
let progress_send = progress_sender.clone();
|
||||||
let progress_thread_run = progress_thread_run.clone();
|
let progress_thread_run = progress_thread_run.clone();
|
||||||
let atomic_file_counter = atomic_file_counter.clone();
|
let atomic_file_counter = atomic_file_counter.clone();
|
||||||
let files_to_check = self.files_to_check.len();
|
let files_to_check = self.files_to_check.len();
|
||||||
progress_thread_handle = thread::spawn(move || loop {
|
progress_thread_handle = thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.try_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||||
|
|
|
@ -27,16 +27,16 @@ use crate::taskbar_progress::tbp_flags::TBPF_NOPROGRESS;
|
||||||
pub fn connect_button_search(
|
pub fn connect_button_search(
|
||||||
gui_data: &GuiData,
|
gui_data: &GuiData,
|
||||||
glib_stop_sender: Sender<Message>,
|
glib_stop_sender: Sender<Message>,
|
||||||
futures_sender_duplicate_files: futures::channel::mpsc::Sender<duplicate::ProgressData>,
|
futures_sender_duplicate_files: futures::channel::mpsc::UnboundedSender<duplicate::ProgressData>,
|
||||||
futures_sender_empty_files: futures::channel::mpsc::Sender<empty_files::ProgressData>,
|
futures_sender_empty_files: futures::channel::mpsc::UnboundedSender<empty_files::ProgressData>,
|
||||||
futures_sender_empty_folder: futures::channel::mpsc::Sender<empty_folder::ProgressData>,
|
futures_sender_empty_folder: futures::channel::mpsc::UnboundedSender<empty_folder::ProgressData>,
|
||||||
futures_sender_big_file: futures::channel::mpsc::Sender<big_file::ProgressData>,
|
futures_sender_big_file: futures::channel::mpsc::UnboundedSender<big_file::ProgressData>,
|
||||||
futures_sender_same_music: futures::channel::mpsc::Sender<same_music::ProgressData>,
|
futures_sender_same_music: futures::channel::mpsc::UnboundedSender<same_music::ProgressData>,
|
||||||
futures_sender_similar_images: futures::channel::mpsc::Sender<similar_images::ProgressData>,
|
futures_sender_similar_images: futures::channel::mpsc::UnboundedSender<similar_images::ProgressData>,
|
||||||
futures_sender_temporary: futures::channel::mpsc::Sender<temporary::ProgressData>,
|
futures_sender_temporary: futures::channel::mpsc::UnboundedSender<temporary::ProgressData>,
|
||||||
futures_sender_zeroed: futures::channel::mpsc::Sender<zeroed::ProgressData>,
|
futures_sender_zeroed: futures::channel::mpsc::UnboundedSender<zeroed::ProgressData>,
|
||||||
futures_sender_invalid_symlinks: futures::channel::mpsc::Sender<invalid_symlinks::ProgressData>,
|
futures_sender_invalid_symlinks: futures::channel::mpsc::UnboundedSender<invalid_symlinks::ProgressData>,
|
||||||
futures_sender_broken_files: futures::channel::mpsc::Sender<broken_files::ProgressData>,
|
futures_sender_broken_files: futures::channel::mpsc::UnboundedSender<broken_files::ProgressData>,
|
||||||
) {
|
) {
|
||||||
let entry_info = gui_data.entry_info.clone();
|
let entry_info = gui_data.entry_info.clone();
|
||||||
let notebook_main = gui_data.main_notebook.notebook_main.clone();
|
let notebook_main = gui_data.main_notebook.notebook_main.clone();
|
||||||
|
|
|
@ -9,16 +9,16 @@ use gtk::{LabelExt, ProgressBarExt, WidgetExt};
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn connect_progress_window(
|
pub fn connect_progress_window(
|
||||||
gui_data: &GuiData,
|
gui_data: &GuiData,
|
||||||
mut futures_receiver_duplicate_files: futures::channel::mpsc::Receiver<duplicate::ProgressData>,
|
mut futures_receiver_duplicate_files: futures::channel::mpsc::UnboundedReceiver<duplicate::ProgressData>,
|
||||||
mut futures_receiver_empty_files: futures::channel::mpsc::Receiver<empty_files::ProgressData>,
|
mut futures_receiver_empty_files: futures::channel::mpsc::UnboundedReceiver<empty_files::ProgressData>,
|
||||||
mut futures_receiver_empty_folder: futures::channel::mpsc::Receiver<empty_folder::ProgressData>,
|
mut futures_receiver_empty_folder: futures::channel::mpsc::UnboundedReceiver<empty_folder::ProgressData>,
|
||||||
mut futures_receiver_big_files: futures::channel::mpsc::Receiver<big_file::ProgressData>,
|
mut futures_receiver_big_files: futures::channel::mpsc::UnboundedReceiver<big_file::ProgressData>,
|
||||||
mut futures_receiver_same_music: futures::channel::mpsc::Receiver<same_music::ProgressData>,
|
mut futures_receiver_same_music: futures::channel::mpsc::UnboundedReceiver<same_music::ProgressData>,
|
||||||
mut futures_receiver_similar_images: futures::channel::mpsc::Receiver<similar_images::ProgressData>,
|
mut futures_receiver_similar_images: futures::channel::mpsc::UnboundedReceiver<similar_images::ProgressData>,
|
||||||
mut futures_receiver_temporary: futures::channel::mpsc::Receiver<temporary::ProgressData>,
|
mut futures_receiver_temporary: futures::channel::mpsc::UnboundedReceiver<temporary::ProgressData>,
|
||||||
mut futures_receiver_zeroed: futures::channel::mpsc::Receiver<zeroed::ProgressData>,
|
mut futures_receiver_zeroed: futures::channel::mpsc::UnboundedReceiver<zeroed::ProgressData>,
|
||||||
mut futures_receiver_invalid_symlinks: futures::channel::mpsc::Receiver<invalid_symlinks::ProgressData>,
|
mut futures_receiver_invalid_symlinks: futures::channel::mpsc::UnboundedReceiver<invalid_symlinks::ProgressData>,
|
||||||
mut futures_receiver_broken_files: futures::channel::mpsc::Receiver<broken_files::ProgressData>,
|
mut futures_receiver_broken_files: futures::channel::mpsc::UnboundedReceiver<broken_files::ProgressData>,
|
||||||
) {
|
) {
|
||||||
let main_context = glib::MainContext::default();
|
let main_context = glib::MainContext::default();
|
||||||
|
|
||||||
|
|
|
@ -88,16 +88,18 @@ fn main() {
|
||||||
let (glib_stop_sender, glib_stop_receiver) = glib::MainContext::channel(glib::PRIORITY_DEFAULT);
|
let (glib_stop_sender, glib_stop_receiver) = glib::MainContext::channel(glib::PRIORITY_DEFAULT);
|
||||||
|
|
||||||
// Futures progress report
|
// Futures progress report
|
||||||
let (futures_sender_duplicate_files, futures_receiver_duplicate_files): (futures::channel::mpsc::Sender<duplicate::ProgressData>, futures::channel::mpsc::Receiver<duplicate::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_duplicate_files, futures_receiver_duplicate_files): (futures::channel::mpsc::UnboundedSender<duplicate::ProgressData>, futures::channel::mpsc::UnboundedReceiver<duplicate::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_empty_files, futures_receiver_empty_files): (futures::channel::mpsc::Sender<empty_files::ProgressData>, futures::channel::mpsc::Receiver<empty_files::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_empty_files, futures_receiver_empty_files): (futures::channel::mpsc::UnboundedSender<empty_files::ProgressData>, futures::channel::mpsc::UnboundedReceiver<empty_files::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_empty_folder, futures_receiver_empty_folder): (futures::channel::mpsc::Sender<empty_folder::ProgressData>, futures::channel::mpsc::Receiver<empty_folder::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_empty_folder, futures_receiver_empty_folder): (futures::channel::mpsc::UnboundedSender<empty_folder::ProgressData>, futures::channel::mpsc::UnboundedReceiver<empty_folder::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_big_file, futures_receiver_big_file): (futures::channel::mpsc::Sender<big_file::ProgressData>, futures::channel::mpsc::Receiver<big_file::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_big_file, futures_receiver_big_file): (futures::channel::mpsc::UnboundedSender<big_file::ProgressData>, futures::channel::mpsc::UnboundedReceiver<big_file::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_same_music, futures_receiver_same_music): (futures::channel::mpsc::Sender<same_music::ProgressData>, futures::channel::mpsc::Receiver<same_music::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_same_music, futures_receiver_same_music): (futures::channel::mpsc::UnboundedSender<same_music::ProgressData>, futures::channel::mpsc::UnboundedReceiver<same_music::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_similar_images, futures_receiver_similar_images): (futures::channel::mpsc::Sender<similar_images::ProgressData>, futures::channel::mpsc::Receiver<similar_images::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_similar_images, futures_receiver_similar_images): (futures::channel::mpsc::UnboundedSender<similar_images::ProgressData>, futures::channel::mpsc::UnboundedReceiver<similar_images::ProgressData>) =
|
||||||
let (futures_sender_temporary, futures_receiver_temporary): (futures::channel::mpsc::Sender<temporary::ProgressData>, futures::channel::mpsc::Receiver<temporary::ProgressData>) = futures::channel::mpsc::channel(20);
|
futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_zeroed, futures_receiver_zeroed): (futures::channel::mpsc::Sender<zeroed::ProgressData>, futures::channel::mpsc::Receiver<zeroed::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_temporary, futures_receiver_temporary): (futures::channel::mpsc::UnboundedSender<temporary::ProgressData>, futures::channel::mpsc::UnboundedReceiver<temporary::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_invalid_symlinks, futures_receiver_invalid_symlinks): (futures::channel::mpsc::Sender<invalid_symlinks::ProgressData>, futures::channel::mpsc::Receiver<invalid_symlinks::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_zeroed, futures_receiver_zeroed): (futures::channel::mpsc::UnboundedSender<zeroed::ProgressData>, futures::channel::mpsc::UnboundedReceiver<zeroed::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
let (futures_sender_broken_files, futures_receiver_broken_files): (futures::channel::mpsc::Sender<broken_files::ProgressData>, futures::channel::mpsc::Receiver<broken_files::ProgressData>) = futures::channel::mpsc::channel(20);
|
let (futures_sender_invalid_symlinks, futures_receiver_invalid_symlinks): (futures::channel::mpsc::UnboundedSender<invalid_symlinks::ProgressData>, futures::channel::mpsc::UnboundedReceiver<invalid_symlinks::ProgressData>) =
|
||||||
|
futures::channel::mpsc::unbounded();
|
||||||
|
let (futures_sender_broken_files, futures_receiver_broken_files): (futures::channel::mpsc::UnboundedSender<broken_files::ProgressData>, futures::channel::mpsc::UnboundedReceiver<broken_files::ProgressData>) = futures::channel::mpsc::unbounded();
|
||||||
|
|
||||||
initialize_gui(&mut gui_data);
|
initialize_gui(&mut gui_data);
|
||||||
reset_configuration(&gui_data, false); // Fallback for invalid loading setting project
|
reset_configuration(&gui_data, false); // Fallback for invalid loading setting project
|
||||||
|
|
Loading…
Reference in a new issue