1
0
Fork 0
mirror of synced 2024-05-05 21:13:41 +12:00

Use system language when available (#506)

* Use system language when available

* Use clippy nightly
This commit is contained in:
Rafał Mikrut 2021-12-18 23:45:37 +01:00 committed by GitHub
parent c97bacad99
commit c8ade1fb0f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 143 additions and 154 deletions

View file

@ -354,8 +354,7 @@ fn parse_maximal_file_size(src: &str) -> Result<u64, String> {
} }
fn parse_similar_image_filter(src: &str) -> Result<FilterType, String> { fn parse_similar_image_filter(src: &str) -> Result<FilterType, String> {
let filter_type; let filter_type = match src.to_lowercase().as_str() {
filter_type = match src.to_lowercase().as_str() {
"lanczos3" => FilterType::Lanczos3, "lanczos3" => FilterType::Lanczos3,
"nearest" => FilterType::Nearest, "nearest" => FilterType::Nearest,
"triangle" => FilterType::Triangle, "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> { fn parse_similar_hash_algorithm(src: &str) -> Result<HashAlg, String> {
let algorithm; let algorithm = match src.to_lowercase().as_str() {
algorithm = match src.to_lowercase().as_str() {
"mean" => HashAlg::Mean, "mean" => HashAlg::Mean,
"gradient" => HashAlg::Gradient, "gradient" => HashAlg::Gradient,
"blockhash" => HashAlg::Blockhash, "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> { fn parse_image_hash_size(src: &str) -> Result<u8, String> {
let hash_size; let hash_size = match src.to_lowercase().as_str() {
hash_size = match src.to_lowercase().as_str() {
"8" => 8, "8" => 8,
"16" => 16, "16" => 16,
"32" => 32, "32" => 32,

View file

@ -135,12 +135,11 @@ impl BigFile {
let atomic_file_counter = Arc::new(AtomicU64::new(0)); let atomic_file_counter = Arc::new(AtomicU64::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = 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_file_counter.load(Ordering::Relaxed) as usize,
@ -150,10 +149,10 @@ impl BigFile {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
while !folders_to_check.is_empty() { while !folders_to_check.is_empty() {

View file

@ -172,12 +172,11 @@ impl BrokenFiles {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -190,10 +189,10 @@ impl BrokenFiles {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
while !folders_to_check.is_empty() { while !folders_to_check.is_empty() {
@ -362,13 +361,12 @@ 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_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_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 { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 1, current_stage: 1,
@ -381,10 +379,10 @@ impl BrokenFiles {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
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()

View file

@ -106,7 +106,7 @@ impl Common {
match path.to_str() { match path.to_str() {
Some(path) if path.is_char_boundary(1) => { Some(path) if path.is_char_boundary(1) => {
let replaced = path.replace("/", "\\"); let replaced = path.replace('/', "\\");
let mut new_path = OsString::new(); let mut new_path = OsString::new();
if replaced[1..].starts_with(':') { if replaced[1..].starts_with(':') {
new_path.push(replaced[..1].to_ascii_uppercase()); new_path.push(replaced[..1].to_ascii_uppercase());

View file

@ -302,12 +302,11 @@ impl DuplicateFinder {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
checking_method: CheckingMethod::Name, checking_method: CheckingMethod::Name,
@ -321,10 +320,10 @@ impl DuplicateFinder {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
@ -482,8 +481,7 @@ impl DuplicateFinder {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
@ -493,7 +491,7 @@ impl DuplicateFinder {
CheckingMethod::Hash => 2, CheckingMethod::Hash => 2,
_ => panic!(), _ => panic!(),
}; };
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
checking_method, checking_method,
@ -507,10 +505,10 @@ impl DuplicateFinder {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
@ -645,12 +643,7 @@ impl DuplicateFinder {
continue; continue;
} }
let vector; let vector = if self.ignore_hard_links { filter_hard_links(&vec) } else { vec };
if self.ignore_hard_links {
vector = filter_hard_links(&vec);
} else {
vector = vec;
}
if vector.len() > 1 { if vector.len() > 1 {
self.information.number_of_duplicated_files_by_size += 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 atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_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; let checking_method = self.check_method;
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
checking_method, checking_method,
@ -701,10 +693,10 @@ impl DuplicateFinder {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
@ -847,14 +839,13 @@ impl DuplicateFinder {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_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 files_to_check = pre_checked_map.iter().map(|(_size, vec_file_entry)| vec_file_entry.len()).sum();
let checking_method = self.check_method; let checking_method = self.check_method;
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
checking_method, checking_method,
@ -868,10 +859,10 @@ impl DuplicateFinder {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END

View file

@ -145,12 +145,11 @@ impl EmptyFiles {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -162,10 +161,10 @@ impl EmptyFiles {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
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() {

View file

@ -151,12 +151,11 @@ impl EmptyFolder {
let atomic_folder_counter = Arc::new(AtomicUsize::new(0)); let atomic_folder_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_folder_counter = atomic_folder_counter.clone(); let atomic_folder_counter = atomic_folder_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -168,10 +167,10 @@ impl EmptyFolder {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
// Add root folders for finding // Add root folders for finding

View file

@ -154,12 +154,11 @@ impl InvalidSymlinks {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -171,10 +170,10 @@ impl InvalidSymlinks {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
while !folders_to_check.is_empty() { while !folders_to_check.is_empty() {

View file

@ -214,12 +214,11 @@ impl SameMusic {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -232,10 +231,10 @@ impl SameMusic {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
while !folders_to_check.is_empty() { while !folders_to_check.is_empty() {
@ -380,13 +379,12 @@ impl SameMusic {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_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 { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 1, current_stage: 1,
@ -399,10 +397,10 @@ impl SameMusic {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
let vec_file_entry = self let vec_file_entry = self
@ -477,13 +475,12 @@ impl SameMusic {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_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 { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 2, current_stage: 2,
@ -496,10 +493,10 @@ impl SameMusic {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
let mut old_duplicates: Vec<Vec<FileEntry>> = vec![self.music_entries.clone()]; 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 new_what = String::with_capacity(what.len());
let mut tab_number = 0; let mut tab_number = 0;
let mut space_before = true; let mut space_before = true;
for character in what.chars().into_iter() { for character in what.chars() {
match character { match character {
'(' => { '(' => {
tab_number += 1; tab_number += 1;

View file

@ -258,12 +258,11 @@ impl SimilarImages {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -276,10 +275,10 @@ impl SimilarImages {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
while !folders_to_check.is_empty() { while !folders_to_check.is_empty() {
@ -457,13 +456,12 @@ impl SimilarImages {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_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 { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 1, current_stage: 1,
@ -476,10 +474,10 @@ impl SimilarImages {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
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
.par_iter() .par_iter()

View file

@ -215,12 +215,11 @@ impl SimilarVideos {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -233,10 +232,10 @@ impl SimilarVideos {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
while !folders_to_check.is_empty() { while !folders_to_check.is_empty() {
@ -405,13 +404,12 @@ impl SimilarVideos {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
let videos_to_check = non_cached_files_to_check.len(); let videos_to_check = non_cached_files_to_check.len();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 1, current_stage: 1,
@ -424,10 +422,10 @@ impl SimilarVideos {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
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()

View file

@ -136,12 +136,11 @@ impl Temporary {
let atomic_file_counter = Arc::new(AtomicUsize::new(0)); let atomic_file_counter = Arc::new(AtomicUsize::new(0));
let progress_thread_handle; let progress_thread_handle = 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_file_counter = atomic_file_counter.clone();
progress_thread_handle = thread::spawn(move || loop { thread::spawn(move || loop {
progress_send progress_send
.unbounded_send(ProgressData { .unbounded_send(ProgressData {
current_stage: 0, current_stage: 0,
@ -153,10 +152,10 @@ impl Temporary {
break; break;
} }
sleep(Duration::from_millis(LOOP_DURATION as u64)); sleep(Duration::from_millis(LOOP_DURATION as u64));
}); })
} else { } else {
progress_thread_handle = thread::spawn(|| {}); thread::spawn(|| {})
} };
//// PROGRESS THREAD END //// PROGRESS THREAD END
while !folders_to_check.is_empty() { while !folders_to_check.is_empty() {

View file

@ -75,9 +75,7 @@ fn move_things(tree_view: &gtk::TreeView, column_file_name: i32, column_path: i3
let tree_view = tree_view.clone(); let tree_view = tree_view.clone();
chooser.connect_response(move |file_chooser, response_type| { chooser.connect_response(move |file_chooser, response_type| {
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
let folders: Vec<PathBuf>; let folders: Vec<PathBuf> = file_chooser.filenames();
// GTK 3
folders = file_chooser.filenames();
// GTK 4 // GTK 4
// folders = Vec::new(); // folders = Vec::new();
// if let Some(g_files) = file_chooser.files() { // if let Some(g_files) = file_chooser.files() {

View file

@ -1,7 +1,8 @@
use crate::language_functions::get_language_from_combo_box_text; use crate::language_functions::get_language_from_combo_box_text;
use crate::GuiData; use crate::{GuiData, LANGUAGES_ALL};
use gtk::prelude::*; use gtk::prelude::*;
use i18n_embed::unic_langid::LanguageIdentifier; use i18n_embed::unic_langid::LanguageIdentifier;
use i18n_embed::DesktopLanguageRequester;
// use i18n_embed::{DesktopLanguageRequester, Localizer}; // use i18n_embed::{DesktopLanguageRequester, Localizer};
pub fn connect_change_language(gui_data: &GuiData) { 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_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 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 { for (lib, localizer) in localizers {
if let Err(error) = localizer.select(&lang_identifier) { if let Err(error) = localizer.select(&lang_identifier) {
eprintln!("Error while loadings languages for {} {:?}", lib, error); eprintln!("Error while loadings languages for {} {:?}", lib, error);
} }
} }
gui_data.update_language(); gui_data.update_language();
}
// Try to use default OS language
// let requested_languages = DesktopLanguageRequester::requested_languages(); pub fn load_system_language(gui_data: &GuiData) {
// let localizers = vec![("czkawka_gui", crate::localizer::localizer())]; let requested_languages = DesktopLanguageRequester::requested_languages();
//
// println!("Requested Languages{:?}", requested_languages); if let Some(language) = requested_languages.get(0) {
// let old_short_lang = language.to_string();
// let lang_identifier = LanguageIdentifier::from_bytes("pl".as_bytes()); let mut short_lang = "".to_string();
// // let available_languages = Localizer::available_languages(); // removes from e.g. en_zb, ending _zd since Czkawka don't support this(maybe could add this in future, but only when)
// // println!("{:?}", available_languages); for i in old_short_lang.chars() {
// for (lib, localizer) in localizers { if i.is_ascii_alphabetic() {
// if let Err(error) = localizer.select(&requested_languages) { short_lang.push(i)
// eprintln!("Error while loadings languages for {} {:?}", lib, error); } 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);
}
}
} }

View file

@ -91,9 +91,7 @@ fn add_chosen_directories(window_main: &Window, tree_view: &TreeView, excluded_i
let tree_view = tree_view.clone(); let tree_view = tree_view.clone();
file_chooser.connect_response(move |file_chooser, response_type| { file_chooser.connect_response(move |file_chooser, response_type| {
if response_type == gtk::ResponseType::Ok { if response_type == gtk::ResponseType::Ok {
let folders: Vec<PathBuf>; let folders: Vec<PathBuf> = file_chooser.filenames();
// GTK 3
folders = file_chooser.filenames();
// GTK 4 // GTK 4
// folders = Vec::new(); // folders = Vec::new();
// if let Some(g_files) = file_chooser.files() { // if let Some(g_files) = file_chooser.files() {

View file

@ -28,6 +28,7 @@ use crate::connect_show_hide_ui::*;
use crate::connect_similar_image_size_change::*; use crate::connect_similar_image_size_change::*;
use crate::gui_data::*; use crate::gui_data::*;
use crate::initialize_gui::*; use crate::initialize_gui::*;
use crate::language_functions::LANGUAGES_ALL;
use crate::saving_loading::*; use crate::saving_loading::*;
use crate::tests::validate_notebook_data; use crate::tests::validate_notebook_data;
@ -103,6 +104,7 @@ fn main() {
initialize_gui(&mut gui_data); initialize_gui(&mut gui_data);
validate_notebook_data(&gui_data); // Must be run after initialization of gui, to check if everything was properly setup 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 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); 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 // Needs to run when entire GUI is initialized and

View file

@ -74,18 +74,15 @@ fn common_open_function(tree_view: &gtk::TreeView, column_name: i32, column_path
let (selected_rows, tree_model) = selection.selected_rows(); let (selected_rows, tree_model) = selection.selected_rows();
for tree_path in selected_rows.iter().rev() { 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 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(); let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::<String>().unwrap();
match opening_mode { let end_path = match opening_mode {
OpenMode::OnlyPath => { OpenMode::OnlyPath => path,
end_path = path;
}
OpenMode::PathAndName => { OpenMode::PathAndName => {
end_path = format!("{}/{}", path, name); format!("{}/{}", path, name)
} }
} };
open::that_in_background(&end_path); open::that_in_background(&end_path);

View file

@ -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 // Parsing Data - this are default values
let mut included_directories: Vec<String> = Vec::new(); 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 delete_outdated_cache_similar_videos: bool = false;
let mut use_prehash_cache: bool = false; let mut use_prehash_cache: bool = false;
let mut cache_prehash_minimal_size: u64 = 0; let mut cache_prehash_minimal_size: u64 = 0;
let mut short_language: String = "en".to_string();
let mut current_type = TypeOfLoadedData::None; let mut current_type = TypeOfLoadedData::None;
for (line_number, line) in loaded_data.replace("\r\n", "\n").split('\n').enumerate() { for (line_number, line) in loaded_data.replace("\r\n", "\n").split('\n').enumerate() {