Atomic counter
This commit is contained in:
parent
e16c28a2e9
commit
f826d72f60
|
@ -325,12 +325,12 @@ impl BadExtensions {
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
|
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = prepare_thread_handler_common(
|
let progress_thread_handle = prepare_thread_handler_common(
|
||||||
progress_sender,
|
progress_sender,
|
||||||
&progress_thread_run,
|
&progress_thread_run,
|
||||||
&atomic_file_counter,
|
&atomic_counter,
|
||||||
1,
|
1,
|
||||||
1,
|
1,
|
||||||
self.files_to_check.len(),
|
self.files_to_check.len(),
|
||||||
|
@ -350,7 +350,7 @@ impl BadExtensions {
|
||||||
hashmap_workarounds.entry(found).or_insert_with(Vec::new).push(proper);
|
hashmap_workarounds.entry(found).or_insert_with(Vec::new).push(proper);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.bad_extensions_files = self.verify_extensions(files_to_check, &atomic_file_counter, stop_receiver, &check_was_stopped, &hashmap_workarounds);
|
self.bad_extensions_files = self.verify_extensions(files_to_check, &atomic_counter, stop_receiver, &check_was_stopped, &hashmap_workarounds);
|
||||||
|
|
||||||
// End thread which send info to gui
|
// End thread which send info to gui
|
||||||
progress_thread_run.store(false, Ordering::Relaxed);
|
progress_thread_run.store(false, Ordering::Relaxed);
|
||||||
|
@ -374,7 +374,7 @@ impl BadExtensions {
|
||||||
fn verify_extensions(
|
fn verify_extensions(
|
||||||
&self,
|
&self,
|
||||||
files_to_check: Vec<FileEntry>,
|
files_to_check: Vec<FileEntry>,
|
||||||
atomic_file_counter: &Arc<AtomicUsize>,
|
atomic_counter: &Arc<AtomicUsize>,
|
||||||
stop_receiver: Option<&Receiver<()>>,
|
stop_receiver: Option<&Receiver<()>>,
|
||||||
check_was_stopped: &AtomicBool,
|
check_was_stopped: &AtomicBool,
|
||||||
hashmap_workarounds: &HashMap<&str, Vec<&str>>,
|
hashmap_workarounds: &HashMap<&str, Vec<&str>>,
|
||||||
|
@ -382,7 +382,7 @@ impl BadExtensions {
|
||||||
files_to_check
|
files_to_check
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.map(|file_entry| {
|
.map(|file_entry| {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
check_was_stopped.store(true, Ordering::Relaxed);
|
check_was_stopped.store(true, Ordering::Relaxed);
|
||||||
return None;
|
return None;
|
||||||
|
|
|
@ -152,16 +152,16 @@ impl BigFile {
|
||||||
&self,
|
&self,
|
||||||
progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>,
|
progress_sender: Option<&futures::channel::mpsc::UnboundedSender<ProgressData>>,
|
||||||
progress_thread_run: &Arc<AtomicBool>,
|
progress_thread_run: &Arc<AtomicBool>,
|
||||||
atomic_file_counter: &Arc<AtomicU64>,
|
atomic_counter: &Arc<AtomicU64>,
|
||||||
) -> JoinHandle<()> {
|
) -> JoinHandle<()> {
|
||||||
if let Some(progress_sender) = progress_sender {
|
if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.unbounded_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
files_checked: atomic_counter.load(Ordering::Relaxed) as usize,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
if !progress_thread_run.load(Ordering::Relaxed) {
|
if !progress_thread_run.load(Ordering::Relaxed) {
|
||||||
|
@ -185,8 +185,8 @@ impl BigFile {
|
||||||
}
|
}
|
||||||
|
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
let atomic_file_counter = Arc::new(AtomicU64::new(0));
|
let atomic_counter = Arc::new(AtomicU64::new(0));
|
||||||
let progress_thread_handle = self.prepare_thread_handler(progress_sender, &progress_thread_run, &atomic_file_counter);
|
let progress_thread_handle = self.prepare_thread_handler(progress_sender, &progress_thread_run, &atomic_counter);
|
||||||
|
|
||||||
while !folders_to_check.is_empty() {
|
while !folders_to_check.is_empty() {
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
|
@ -239,7 +239,7 @@ impl BigFile {
|
||||||
if metadata.is_dir() {
|
if metadata.is_dir() {
|
||||||
self.check_folder_children(&mut dir_result, &mut warnings, current_folder, &entry_data);
|
self.check_folder_children(&mut dir_result, &mut warnings, current_folder, &entry_data);
|
||||||
} else if metadata.is_file() {
|
} else if metadata.is_file() {
|
||||||
self.collect_file_entry(&atomic_file_counter, &metadata, &entry_data, &mut fe_result, &mut warnings, current_folder);
|
self.collect_file_entry(&atomic_counter, &metadata, &entry_data, &mut fe_result, &mut warnings, current_folder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(dir_result, warnings, fe_result)
|
(dir_result, warnings, fe_result)
|
||||||
|
@ -297,14 +297,14 @@ impl BigFile {
|
||||||
|
|
||||||
pub fn collect_file_entry(
|
pub fn collect_file_entry(
|
||||||
&self,
|
&self,
|
||||||
atomic_file_counter: &Arc<AtomicU64>,
|
atomic_counter: &Arc<AtomicU64>,
|
||||||
metadata: &Metadata,
|
metadata: &Metadata,
|
||||||
entry_data: &DirEntry,
|
entry_data: &DirEntry,
|
||||||
fe_result: &mut Vec<(u64, FileEntry)>,
|
fe_result: &mut Vec<(u64, FileEntry)>,
|
||||||
warnings: &mut Vec<String>,
|
warnings: &mut Vec<String>,
|
||||||
current_folder: &Path,
|
current_folder: &Path,
|
||||||
) {
|
) {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
|
|
||||||
if metadata.len() == 0 {
|
if metadata.len() == 0 {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -241,8 +241,8 @@ impl BrokenFiles {
|
||||||
|
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
let progress_thread_handle = self.prepare_thread_handler_broken_files(progress_sender, &progress_thread_run, &atomic_file_counter, 0, 1, 0);
|
let progress_thread_handle = self.prepare_thread_handler_broken_files(progress_sender, &progress_thread_run, &atomic_counter, 0, 1, 0);
|
||||||
|
|
||||||
//// PROGRESS THREAD END
|
//// PROGRESS THREAD END
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ impl BrokenFiles {
|
||||||
|
|
||||||
dir_result.push(next_folder);
|
dir_result.push(next_folder);
|
||||||
} else if metadata.is_file() {
|
} else if metadata.is_file() {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
|
|
||||||
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
||||||
Ok(t) => t,
|
Ok(t) => t,
|
||||||
|
@ -443,13 +443,13 @@ impl BrokenFiles {
|
||||||
}
|
}
|
||||||
|
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
let progress_thread_handle = self.prepare_thread_handler_broken_files(progress_sender, &progress_thread_run, &atomic_file_counter, 1, 1, non_cached_files_to_check.len());
|
let progress_thread_handle = self.prepare_thread_handler_broken_files(progress_sender, &progress_thread_run, &atomic_counter, 1, 1, non_cached_files_to_check.len());
|
||||||
|
|
||||||
let mut vec_file_entry: Vec<FileEntry> = non_cached_files_to_check
|
let mut vec_file_entry: Vec<FileEntry> = non_cached_files_to_check
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.map(|(_, mut file_entry)| {
|
.map(|(_, mut file_entry)| {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
|
@ -655,11 +655,11 @@ impl DuplicateFinder {
|
||||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||||
|
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
let progress_thread_handle = prepare_thread_handler_common(
|
let progress_thread_handle = prepare_thread_handler_common(
|
||||||
progress_sender,
|
progress_sender,
|
||||||
&progress_thread_run,
|
&progress_thread_run,
|
||||||
&atomic_file_counter,
|
&atomic_counter,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
self.files_with_identical_size.values().map(Vec::len).sum(),
|
self.files_with_identical_size.values().map(Vec::len).sum(),
|
||||||
|
@ -716,7 +716,7 @@ impl DuplicateFinder {
|
||||||
let mut errors: Vec<String> = Vec::new();
|
let mut errors: Vec<String> = Vec::new();
|
||||||
let mut buffer = [0u8; 1024 * 2];
|
let mut buffer = [0u8; 1024 * 2];
|
||||||
|
|
||||||
atomic_file_counter.fetch_add(vec_file_entry.len(), Ordering::Relaxed);
|
atomic_counter.fetch_add(vec_file_entry.len(), Ordering::Relaxed);
|
||||||
for file_entry in vec_file_entry {
|
for file_entry in vec_file_entry {
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
check_was_stopped.store(true, Ordering::Relaxed);
|
check_was_stopped.store(true, Ordering::Relaxed);
|
||||||
|
@ -800,12 +800,12 @@ impl DuplicateFinder {
|
||||||
let start_time: SystemTime = SystemTime::now();
|
let start_time: SystemTime = SystemTime::now();
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = prepare_thread_handler_common(
|
let progress_thread_handle = prepare_thread_handler_common(
|
||||||
progress_sender,
|
progress_sender,
|
||||||
&progress_thread_run,
|
&progress_thread_run,
|
||||||
&atomic_file_counter,
|
&atomic_counter,
|
||||||
2,
|
2,
|
||||||
2,
|
2,
|
||||||
pre_checked_map.values().map(Vec::len).sum(),
|
pre_checked_map.values().map(Vec::len).sum(),
|
||||||
|
@ -866,7 +866,7 @@ impl DuplicateFinder {
|
||||||
let mut errors: Vec<String> = Vec::new();
|
let mut errors: Vec<String> = Vec::new();
|
||||||
let mut buffer = [0u8; 1024 * 16];
|
let mut buffer = [0u8; 1024 * 16];
|
||||||
|
|
||||||
atomic_file_counter.fetch_add(vec_file_entry.len(), Ordering::Relaxed);
|
atomic_counter.fetch_add(vec_file_entry.len(), Ordering::Relaxed);
|
||||||
for mut file_entry in vec_file_entry {
|
for mut file_entry in vec_file_entry {
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
check_was_stopped.store(true, Ordering::Relaxed);
|
check_was_stopped.store(true, Ordering::Relaxed);
|
||||||
|
|
|
@ -360,12 +360,12 @@ impl SameMusic {
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
let music_to_check = non_cached_files_to_check.len();
|
let music_to_check = non_cached_files_to_check.len();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
|
@ -373,7 +373,7 @@ impl SameMusic {
|
||||||
checking_method: CheckingMethod::None,
|
checking_method: CheckingMethod::None,
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 2,
|
max_stage: 2,
|
||||||
entries_checked: atomic_file_counter.load(Ordering::Relaxed),
|
entries_checked: atomic_counter.load(Ordering::Relaxed),
|
||||||
entries_to_check: music_to_check,
|
entries_to_check: music_to_check,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -391,7 +391,7 @@ impl SameMusic {
|
||||||
let mut vec_file_entry = non_cached_files_to_check
|
let mut vec_file_entry = non_cached_files_to_check
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.map(|(path, mut music_entry)| {
|
.map(|(path, mut music_entry)| {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
check_was_stopped.store(true, Ordering::Relaxed);
|
check_was_stopped.store(true, Ordering::Relaxed);
|
||||||
return None;
|
return None;
|
||||||
|
@ -530,12 +530,12 @@ impl SameMusic {
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
let music_to_check = self.music_to_check.len();
|
let music_to_check = self.music_to_check.len();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
|
@ -543,7 +543,7 @@ impl SameMusic {
|
||||||
checking_method: CheckingMethod::None,
|
checking_method: CheckingMethod::None,
|
||||||
current_stage: 2,
|
current_stage: 2,
|
||||||
max_stage: 2,
|
max_stage: 2,
|
||||||
entries_checked: atomic_file_counter.load(Ordering::Relaxed),
|
entries_checked: atomic_counter.load(Ordering::Relaxed),
|
||||||
entries_to_check: music_to_check,
|
entries_to_check: music_to_check,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -562,7 +562,7 @@ impl SameMusic {
|
||||||
|
|
||||||
if (self.music_similarity & MusicSimilarity::TRACK_TITLE) == MusicSimilarity::TRACK_TITLE {
|
if (self.music_similarity & MusicSimilarity::TRACK_TITLE) == MusicSimilarity::TRACK_TITLE {
|
||||||
for vec_file_entry in old_duplicates {
|
for vec_file_entry in old_duplicates {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
// End thread which send info to gui
|
// End thread which send info to gui
|
||||||
progress_thread_run.store(false, Ordering::Relaxed);
|
progress_thread_run.store(false, Ordering::Relaxed);
|
||||||
|
@ -590,7 +590,7 @@ impl SameMusic {
|
||||||
}
|
}
|
||||||
if (self.music_similarity & MusicSimilarity::TRACK_ARTIST) == MusicSimilarity::TRACK_ARTIST {
|
if (self.music_similarity & MusicSimilarity::TRACK_ARTIST) == MusicSimilarity::TRACK_ARTIST {
|
||||||
for vec_file_entry in old_duplicates {
|
for vec_file_entry in old_duplicates {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
// End thread which send info to gui
|
// End thread which send info to gui
|
||||||
progress_thread_run.store(false, Ordering::Relaxed);
|
progress_thread_run.store(false, Ordering::Relaxed);
|
||||||
|
@ -618,7 +618,7 @@ impl SameMusic {
|
||||||
}
|
}
|
||||||
if (self.music_similarity & MusicSimilarity::YEAR) == MusicSimilarity::YEAR {
|
if (self.music_similarity & MusicSimilarity::YEAR) == MusicSimilarity::YEAR {
|
||||||
for vec_file_entry in old_duplicates {
|
for vec_file_entry in old_duplicates {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
// End thread which send info to gui
|
// End thread which send info to gui
|
||||||
progress_thread_run.store(false, Ordering::Relaxed);
|
progress_thread_run.store(false, Ordering::Relaxed);
|
||||||
|
@ -643,7 +643,7 @@ impl SameMusic {
|
||||||
}
|
}
|
||||||
if (self.music_similarity & MusicSimilarity::LENGTH) == MusicSimilarity::LENGTH {
|
if (self.music_similarity & MusicSimilarity::LENGTH) == MusicSimilarity::LENGTH {
|
||||||
for vec_file_entry in old_duplicates {
|
for vec_file_entry in old_duplicates {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
// End thread which send info to gui
|
// End thread which send info to gui
|
||||||
progress_thread_run.store(false, Ordering::Relaxed);
|
progress_thread_run.store(false, Ordering::Relaxed);
|
||||||
|
@ -668,7 +668,7 @@ impl SameMusic {
|
||||||
}
|
}
|
||||||
if (self.music_similarity & MusicSimilarity::GENRE) == MusicSimilarity::GENRE {
|
if (self.music_similarity & MusicSimilarity::GENRE) == MusicSimilarity::GENRE {
|
||||||
for vec_file_entry in old_duplicates {
|
for vec_file_entry in old_duplicates {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
// End thread which send info to gui
|
// End thread which send info to gui
|
||||||
progress_thread_run.store(false, Ordering::Relaxed);
|
progress_thread_run.store(false, Ordering::Relaxed);
|
||||||
|
@ -693,7 +693,7 @@ impl SameMusic {
|
||||||
}
|
}
|
||||||
if (self.music_similarity & MusicSimilarity::BITRATE) == MusicSimilarity::BITRATE {
|
if (self.music_similarity & MusicSimilarity::BITRATE) == MusicSimilarity::BITRATE {
|
||||||
for vec_file_entry in old_duplicates {
|
for vec_file_entry in old_duplicates {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
// End thread which send info to gui
|
// End thread which send info to gui
|
||||||
progress_thread_run.store(false, Ordering::Relaxed);
|
progress_thread_run.store(false, Ordering::Relaxed);
|
||||||
|
|
|
@ -304,18 +304,18 @@ impl SimilarImages {
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.unbounded_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 3,
|
max_stage: 3,
|
||||||
images_checked: atomic_file_counter.load(Ordering::Relaxed),
|
images_checked: atomic_counter.load(Ordering::Relaxed),
|
||||||
images_to_check: 0,
|
images_to_check: 0,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -402,7 +402,7 @@ impl SimilarImages {
|
||||||
|
|
||||||
dir_result.push(next_folder);
|
dir_result.push(next_folder);
|
||||||
} else if metadata.is_file() {
|
} else if metadata.is_file() {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
|
|
||||||
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
||||||
Ok(t) => t,
|
Ok(t) => t,
|
||||||
|
@ -529,19 +529,19 @@ impl SimilarImages {
|
||||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
let images_to_check = non_cached_files_to_check.len();
|
let images_to_check = non_cached_files_to_check.len();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.unbounded_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 3,
|
max_stage: 3,
|
||||||
images_checked: atomic_file_counter.load(Ordering::Relaxed),
|
images_checked: atomic_counter.load(Ordering::Relaxed),
|
||||||
images_to_check,
|
images_to_check,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -558,7 +558,7 @@ impl SimilarImages {
|
||||||
let mut vec_file_entry: Vec<(FileEntry, Vec<u8>)> = non_cached_files_to_check
|
let mut vec_file_entry: Vec<(FileEntry, Vec<u8>)> = non_cached_files_to_check
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.map(|(_s, mut file_entry)| {
|
.map(|(_s, mut file_entry)| {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
check_was_stopped.store(true, Ordering::Relaxed);
|
check_was_stopped.store(true, Ordering::Relaxed);
|
||||||
return None;
|
return None;
|
||||||
|
|
|
@ -269,18 +269,18 @@ impl SimilarVideos {
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.unbounded_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 0,
|
current_stage: 0,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
videos_checked: atomic_file_counter.load(Ordering::Relaxed),
|
videos_checked: atomic_counter.load(Ordering::Relaxed),
|
||||||
videos_to_check: 0,
|
videos_to_check: 0,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -367,7 +367,7 @@ impl SimilarVideos {
|
||||||
|
|
||||||
dir_result.push(next_folder);
|
dir_result.push(next_folder);
|
||||||
} else if metadata.is_file() {
|
} else if metadata.is_file() {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
|
|
||||||
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
||||||
Ok(t) => t,
|
Ok(t) => t,
|
||||||
|
@ -486,19 +486,19 @@ impl SimilarVideos {
|
||||||
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
let check_was_stopped = AtomicBool::new(false); // Used for breaking from GUI and ending check thread
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
let videos_to_check = non_cached_files_to_check.len();
|
let videos_to_check = non_cached_files_to_check.len();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.unbounded_send(ProgressData {
|
.unbounded_send(ProgressData {
|
||||||
current_stage: 1,
|
current_stage: 1,
|
||||||
max_stage: 1,
|
max_stage: 1,
|
||||||
videos_checked: atomic_file_counter.load(Ordering::Relaxed),
|
videos_checked: atomic_counter.load(Ordering::Relaxed),
|
||||||
videos_to_check,
|
videos_to_check,
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -514,7 +514,7 @@ impl SimilarVideos {
|
||||||
let mut vec_file_entry: Vec<FileEntry> = non_cached_files_to_check
|
let mut vec_file_entry: Vec<FileEntry> = non_cached_files_to_check
|
||||||
.par_iter()
|
.par_iter()
|
||||||
.map(|file_entry| {
|
.map(|file_entry| {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||||
check_was_stopped.store(true, Ordering::Relaxed);
|
check_was_stopped.store(true, Ordering::Relaxed);
|
||||||
return None;
|
return None;
|
||||||
|
|
|
@ -146,18 +146,18 @@ impl Temporary {
|
||||||
//// PROGRESS THREAD START
|
//// PROGRESS THREAD START
|
||||||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||||
|
|
||||||
let atomic_file_counter = Arc::new(AtomicUsize::new(0));
|
let atomic_counter = Arc::new(AtomicUsize::new(0));
|
||||||
|
|
||||||
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
let progress_thread_handle = if let Some(progress_sender) = progress_sender {
|
||||||
let 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_counter = atomic_counter.clone();
|
||||||
thread::spawn(move || loop {
|
thread::spawn(move || loop {
|
||||||
progress_send
|
progress_send
|
||||||
.unbounded_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),
|
files_checked: atomic_counter.load(Ordering::Relaxed),
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
if !progress_thread_run.load(Ordering::Relaxed) {
|
if !progress_thread_run.load(Ordering::Relaxed) {
|
||||||
|
@ -243,7 +243,7 @@ impl Temporary {
|
||||||
|
|
||||||
dir_result.push(next_folder);
|
dir_result.push(next_folder);
|
||||||
} else if metadata.is_file() {
|
} else if metadata.is_file() {
|
||||||
atomic_file_counter.fetch_add(1, Ordering::Relaxed);
|
atomic_counter.fetch_add(1, Ordering::Relaxed);
|
||||||
|
|
||||||
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
let file_name_lowercase: String = match entry_data.file_name().into_string() {
|
||||||
Ok(t) => t,
|
Ok(t) => t,
|
||||||
|
|
Loading…
Reference in a new issue