Use system language when available (#506)
* Use system language when available * Use clippy nightly
This commit is contained in:
parent
c97bacad99
commit
c8ade1fb0f
|
@ -354,8 +354,7 @@ fn parse_maximal_file_size(src: &str) -> Result<u64, String> {
|
|||
}
|
||||
|
||||
fn parse_similar_image_filter(src: &str) -> Result<FilterType, String> {
|
||||
let filter_type;
|
||||
filter_type = match src.to_lowercase().as_str() {
|
||||
let filter_type = match src.to_lowercase().as_str() {
|
||||
"lanczos3" => FilterType::Lanczos3,
|
||||
"nearest" => FilterType::Nearest,
|
||||
"triangle" => FilterType::Triangle,
|
||||
|
@ -367,8 +366,7 @@ fn parse_similar_image_filter(src: &str) -> Result<FilterType, String> {
|
|||
}
|
||||
|
||||
fn parse_similar_hash_algorithm(src: &str) -> Result<HashAlg, String> {
|
||||
let algorithm;
|
||||
algorithm = match src.to_lowercase().as_str() {
|
||||
let algorithm = match src.to_lowercase().as_str() {
|
||||
"mean" => HashAlg::Mean,
|
||||
"gradient" => HashAlg::Gradient,
|
||||
"blockhash" => HashAlg::Blockhash,
|
||||
|
@ -380,8 +378,7 @@ fn parse_similar_hash_algorithm(src: &str) -> Result<HashAlg, String> {
|
|||
}
|
||||
|
||||
fn parse_image_hash_size(src: &str) -> Result<u8, String> {
|
||||
let hash_size;
|
||||
hash_size = match src.to_lowercase().as_str() {
|
||||
let hash_size = match src.to_lowercase().as_str() {
|
||||
"8" => 8,
|
||||
"16" => 16,
|
||||
"32" => 32,
|
||||
|
|
|
@ -135,12 +135,11 @@ impl BigFile {
|
|||
|
||||
let atomic_file_counter = Arc::new(AtomicU64::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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
files_checked: atomic_file_counter.load(Ordering::Relaxed) as usize,
|
||||
|
@ -150,10 +149,10 @@ impl BigFile {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
|
||||
//// PROGRESS THREAD END
|
||||
while !folders_to_check.is_empty() {
|
||||
|
|
|
@ -172,12 +172,11 @@ impl BrokenFiles {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -190,10 +189,10 @@ impl BrokenFiles {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
while !folders_to_check.is_empty() {
|
||||
|
@ -362,13 +361,12 @@ impl BrokenFiles {
|
|||
let progress_thread_run = Arc::new(AtomicBool::new(true));
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
let files_to_check = non_cached_files_to_check.len();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 1,
|
||||
|
@ -381,10 +379,10 @@ impl BrokenFiles {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
let mut vec_file_entry: Vec<FileEntry> = non_cached_files_to_check
|
||||
.par_iter()
|
||||
|
|
|
@ -106,7 +106,7 @@ impl Common {
|
|||
|
||||
match path.to_str() {
|
||||
Some(path) if path.is_char_boundary(1) => {
|
||||
let replaced = path.replace("/", "\\");
|
||||
let replaced = path.replace('/', "\\");
|
||||
let mut new_path = OsString::new();
|
||||
if replaced[1..].starts_with(':') {
|
||||
new_path.push(replaced[..1].to_ascii_uppercase());
|
||||
|
|
|
@ -302,12 +302,11 @@ impl DuplicateFinder {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
checking_method: CheckingMethod::Name,
|
||||
|
@ -321,10 +320,10 @@ impl DuplicateFinder {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
|
@ -482,8 +481,7 @@ impl DuplicateFinder {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
|
@ -493,7 +491,7 @@ impl DuplicateFinder {
|
|||
CheckingMethod::Hash => 2,
|
||||
_ => panic!(),
|
||||
};
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
checking_method,
|
||||
|
@ -507,10 +505,10 @@ impl DuplicateFinder {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
|
@ -645,12 +643,7 @@ impl DuplicateFinder {
|
|||
continue;
|
||||
}
|
||||
|
||||
let vector;
|
||||
if self.ignore_hard_links {
|
||||
vector = filter_hard_links(&vec);
|
||||
} else {
|
||||
vector = vec;
|
||||
}
|
||||
let vector = if self.ignore_hard_links { filter_hard_links(&vec) } else { vec };
|
||||
|
||||
if vector.len() > 1 {
|
||||
self.information.number_of_duplicated_files_by_size += vector.len() - 1;
|
||||
|
@ -680,14 +673,13 @@ impl DuplicateFinder {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.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 checking_method = self.check_method;
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
checking_method,
|
||||
|
@ -701,10 +693,10 @@ impl DuplicateFinder {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
|
@ -847,14 +839,13 @@ impl DuplicateFinder {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
let files_to_check = pre_checked_map.iter().map(|(_size, vec_file_entry)| vec_file_entry.len()).sum();
|
||||
let checking_method = self.check_method;
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
checking_method,
|
||||
|
@ -868,10 +859,10 @@ impl DuplicateFinder {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
|
|
|
@ -145,12 +145,11 @@ impl EmptyFiles {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -162,10 +161,10 @@ impl EmptyFiles {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
while !folders_to_check.is_empty() {
|
||||
if stop_receiver.is_some() && stop_receiver.unwrap().try_recv().is_ok() {
|
||||
|
|
|
@ -151,12 +151,11 @@ impl EmptyFolder {
|
|||
|
||||
let atomic_folder_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_folder_counter = atomic_folder_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -168,10 +167,10 @@ impl EmptyFolder {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
// Add root folders for finding
|
||||
|
|
|
@ -154,12 +154,11 @@ impl InvalidSymlinks {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -171,10 +170,10 @@ impl InvalidSymlinks {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
while !folders_to_check.is_empty() {
|
||||
|
|
|
@ -214,12 +214,11 @@ impl SameMusic {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -232,10 +231,10 @@ impl SameMusic {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
while !folders_to_check.is_empty() {
|
||||
|
@ -380,13 +379,12 @@ impl SameMusic {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
let music_to_check = self.music_to_check.len();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 1,
|
||||
|
@ -399,10 +397,10 @@ impl SameMusic {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
let vec_file_entry = self
|
||||
|
@ -477,13 +475,12 @@ impl SameMusic {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
let music_to_check = self.music_to_check.len();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 2,
|
||||
|
@ -496,10 +493,10 @@ impl SameMusic {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
let mut old_duplicates: Vec<Vec<FileEntry>> = vec![self.music_entries.clone()];
|
||||
|
@ -804,7 +801,7 @@ fn get_approximate_conversion(what: &mut String) {
|
|||
let mut new_what = String::with_capacity(what.len());
|
||||
let mut tab_number = 0;
|
||||
let mut space_before = true;
|
||||
for character in what.chars().into_iter() {
|
||||
for character in what.chars() {
|
||||
match character {
|
||||
'(' => {
|
||||
tab_number += 1;
|
||||
|
|
|
@ -258,12 +258,11 @@ impl SimilarImages {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -276,10 +275,10 @@ impl SimilarImages {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
while !folders_to_check.is_empty() {
|
||||
|
@ -457,13 +456,12 @@ impl SimilarImages {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
let images_to_check = non_cached_files_to_check.len();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 1,
|
||||
|
@ -476,10 +474,10 @@ impl SimilarImages {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
let mut vec_file_entry: Vec<(FileEntry, Vec<u8>)> = non_cached_files_to_check
|
||||
.par_iter()
|
||||
|
|
|
@ -215,12 +215,11 @@ impl SimilarVideos {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -233,10 +232,10 @@ impl SimilarVideos {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
while !folders_to_check.is_empty() {
|
||||
|
@ -405,13 +404,12 @@ impl SimilarVideos {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
let videos_to_check = non_cached_files_to_check.len();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 1,
|
||||
|
@ -424,10 +422,10 @@ impl SimilarVideos {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
let mut vec_file_entry: Vec<FileEntry> = non_cached_files_to_check
|
||||
.par_iter()
|
||||
|
|
|
@ -136,12 +136,11 @@ impl Temporary {
|
|||
|
||||
let atomic_file_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_thread_run = progress_thread_run.clone();
|
||||
let atomic_file_counter = atomic_file_counter.clone();
|
||||
progress_thread_handle = thread::spawn(move || loop {
|
||||
thread::spawn(move || loop {
|
||||
progress_send
|
||||
.unbounded_send(ProgressData {
|
||||
current_stage: 0,
|
||||
|
@ -153,10 +152,10 @@ impl Temporary {
|
|||
break;
|
||||
}
|
||||
sleep(Duration::from_millis(LOOP_DURATION as u64));
|
||||
});
|
||||
})
|
||||
} else {
|
||||
progress_thread_handle = thread::spawn(|| {});
|
||||
}
|
||||
thread::spawn(|| {})
|
||||
};
|
||||
//// PROGRESS THREAD END
|
||||
|
||||
while !folders_to_check.is_empty() {
|
||||
|
|
|
@ -75,9 +75,7 @@ fn move_things(tree_view: >k::TreeView, column_file_name: i32, column_path: i3
|
|||
let tree_view = tree_view.clone();
|
||||
chooser.connect_response(move |file_chooser, response_type| {
|
||||
if response_type == gtk::ResponseType::Ok {
|
||||
let folders: Vec<PathBuf>;
|
||||
// GTK 3
|
||||
folders = file_chooser.filenames();
|
||||
let folders: Vec<PathBuf> = file_chooser.filenames();
|
||||
// GTK 4
|
||||
// folders = Vec::new();
|
||||
// if let Some(g_files) = file_chooser.files() {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
use crate::language_functions::get_language_from_combo_box_text;
|
||||
use crate::GuiData;
|
||||
use crate::{GuiData, LANGUAGES_ALL};
|
||||
use gtk::prelude::*;
|
||||
use i18n_embed::unic_langid::LanguageIdentifier;
|
||||
use i18n_embed::DesktopLanguageRequester;
|
||||
// use i18n_embed::{DesktopLanguageRequester, Localizer};
|
||||
|
||||
pub fn connect_change_language(gui_data: &GuiData) {
|
||||
|
@ -20,27 +21,40 @@ fn change_language(gui_data: &GuiData) {
|
|||
let lang_short = get_language_from_combo_box_text(gui_data.settings.combo_box_settings_language.active_text().unwrap().to_string()).short_text;
|
||||
|
||||
let lang_identifier = vec![LanguageIdentifier::from_bytes(lang_short.as_bytes()).unwrap()];
|
||||
// let available_languages = Localizer::available_languages();
|
||||
// println!("{:?}", available_languages);
|
||||
for (lib, localizer) in localizers {
|
||||
if let Err(error) = localizer.select(&lang_identifier) {
|
||||
eprintln!("Error while loadings languages for {} {:?}", lib, error);
|
||||
}
|
||||
}
|
||||
gui_data.update_language();
|
||||
|
||||
// Try to use default OS language
|
||||
// let requested_languages = DesktopLanguageRequester::requested_languages();
|
||||
// let localizers = vec![("czkawka_gui", crate::localizer::localizer())];
|
||||
//
|
||||
// println!("Requested Languages{:?}", requested_languages);
|
||||
//
|
||||
// let lang_identifier = LanguageIdentifier::from_bytes("pl".as_bytes());
|
||||
// // let available_languages = Localizer::available_languages();
|
||||
// // println!("{:?}", available_languages);
|
||||
// for (lib, localizer) in localizers {
|
||||
// if let Err(error) = localizer.select(&requested_languages) {
|
||||
// eprintln!("Error while loadings languages for {} {:?}", lib, error);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
pub fn load_system_language(gui_data: &GuiData) {
|
||||
let requested_languages = DesktopLanguageRequester::requested_languages();
|
||||
|
||||
if let Some(language) = requested_languages.get(0) {
|
||||
let old_short_lang = language.to_string();
|
||||
let mut short_lang = "".to_string();
|
||||
// removes from e.g. en_zb, ending _zd since Czkawka don't support this(maybe could add this in future, but only when)
|
||||
for i in old_short_lang.chars() {
|
||||
if i.is_ascii_alphabetic() {
|
||||
short_lang.push(i)
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
let mut found: bool = false;
|
||||
for (index, lang) in LANGUAGES_ALL.iter().enumerate() {
|
||||
if lang.short_text == short_lang {
|
||||
found = true;
|
||||
gui_data.settings.combo_box_settings_language.set_active(Some(index as u32));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if found {
|
||||
println!("INFO: Default system language {} is available, so choosing them", short_lang);
|
||||
} else {
|
||||
println!("INFO: Default system language {} is not available, using English(en) instead", short_lang);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,9 +91,7 @@ fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_i
|
|||
let tree_view = tree_view.clone();
|
||||
file_chooser.connect_response(move |file_chooser, response_type| {
|
||||
if response_type == gtk::ResponseType::Ok {
|
||||
let folders: Vec<PathBuf>;
|
||||
// GTK 3
|
||||
folders = file_chooser.filenames();
|
||||
let folders: Vec<PathBuf> = file_chooser.filenames();
|
||||
// GTK 4
|
||||
// folders = Vec::new();
|
||||
// if let Some(g_files) = file_chooser.files() {
|
||||
|
|
|
@ -28,6 +28,7 @@ use crate::connect_show_hide_ui::*;
|
|||
use crate::connect_similar_image_size_change::*;
|
||||
use crate::gui_data::*;
|
||||
use crate::initialize_gui::*;
|
||||
use crate::language_functions::LANGUAGES_ALL;
|
||||
use crate::saving_loading::*;
|
||||
use crate::tests::validate_notebook_data;
|
||||
|
||||
|
@ -103,6 +104,7 @@ fn main() {
|
|||
initialize_gui(&mut gui_data);
|
||||
validate_notebook_data(&gui_data); // Must be run after initialization of gui, to check if everything was properly setup
|
||||
reset_configuration(false, &gui_data.upper_notebook, &gui_data.settings, &gui_data.text_view_errors); // Fallback for invalid loading setting project
|
||||
load_system_language(&gui_data); // Check for default system language, must be loaded after initializing GUI and before loading settings from file
|
||||
load_configuration(false, &gui_data.upper_notebook, &gui_data.settings, &gui_data.text_view_errors, &gui_data.scrolled_window_errors);
|
||||
|
||||
// Needs to run when entire GUI is initialized and
|
||||
|
|
|
@ -74,18 +74,15 @@ fn common_open_function(tree_view: >k::TreeView, column_name: i32, column_path
|
|||
let (selected_rows, tree_model) = selection.selected_rows();
|
||||
|
||||
for tree_path in selected_rows.iter().rev() {
|
||||
let end_path;
|
||||
let name = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_name).get::<String>().unwrap();
|
||||
let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
|
||||
|
||||
match opening_mode {
|
||||
OpenMode::OnlyPath => {
|
||||
end_path = path;
|
||||
}
|
||||
let end_path = match opening_mode {
|
||||
OpenMode::OnlyPath => path,
|
||||
OpenMode::PathAndName => {
|
||||
end_path = format!("{}/{}", path, name);
|
||||
format!("{}/{}", path, name)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
open::that_in_background(&end_path);
|
||||
|
||||
|
|
|
@ -264,6 +264,13 @@ pub fn load_configuration(manual_execution: bool, upper_notebook: &GuiUpperNoteb
|
|||
}
|
||||
};
|
||||
|
||||
let mut short_language: String;
|
||||
|
||||
// Load here language, default system language could change value in settings so we don't want to lose this value
|
||||
{
|
||||
short_language = get_language_from_combo_box_text(settings.combo_box_settings_language.active_text().unwrap().to_string()).short_text.to_string();
|
||||
}
|
||||
|
||||
// Parsing Data - this are default values
|
||||
|
||||
let mut included_directories: Vec<String> = Vec::new();
|
||||
|
@ -286,7 +293,6 @@ pub fn load_configuration(manual_execution: bool, upper_notebook: &GuiUpperNoteb
|
|||
let mut delete_outdated_cache_similar_videos: bool = false;
|
||||
let mut use_prehash_cache: bool = false;
|
||||
let mut cache_prehash_minimal_size: u64 = 0;
|
||||
let mut short_language: String = "en".to_string();
|
||||
|
||||
let mut current_type = TypeOfLoadedData::None;
|
||||
for (line_number, line) in loaded_data.replace("\r\n", "\n").split('\n').enumerate() {
|
||||
|
|
Loading…
Reference in a new issue