From c8ade1fb0f67ac1f227319089b5272756c99b7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= <41945903+qarmin@users.noreply.github.com> Date: Sat, 18 Dec 2021 23:45:37 +0100 Subject: [PATCH] Use system language when available (#506) * Use system language when available * Use clippy nightly --- czkawka_cli/src/commands.rs | 9 ++-- czkawka_core/src/big_file.rs | 11 ++-- czkawka_core/src/broken_files.rs | 22 ++++---- czkawka_core/src/common.rs | 2 +- czkawka_core/src/duplicate.rs | 51 ++++++++----------- czkawka_core/src/empty_files.rs | 11 ++-- czkawka_core/src/empty_folder.rs | 11 ++-- czkawka_core/src/invalid_symlinks.rs | 11 ++-- czkawka_core/src/same_music.rs | 35 ++++++------- czkawka_core/src/similar_images.rs | 22 ++++---- czkawka_core/src/similar_videos.rs | 22 ++++---- czkawka_core/src/temporary.rs | 11 ++-- czkawka_gui/src/connect_button_move.rs | 4 +- czkawka_gui/src/connect_change_language.rs | 50 +++++++++++------- .../src/connect_selection_of_directories.rs | 4 +- czkawka_gui/src/main.rs | 2 + czkawka_gui/src/opening_selecting_records.rs | 11 ++-- czkawka_gui/src/saving_loading.rs | 8 ++- 18 files changed, 143 insertions(+), 154 deletions(-) diff --git a/czkawka_cli/src/commands.rs b/czkawka_cli/src/commands.rs index 8f7e659..2da40e2 100644 --- a/czkawka_cli/src/commands.rs +++ b/czkawka_cli/src/commands.rs @@ -354,8 +354,7 @@ fn parse_maximal_file_size(src: &str) -> Result { } fn parse_similar_image_filter(src: &str) -> Result { - 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 { } fn parse_similar_hash_algorithm(src: &str) -> Result { - 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 { } fn parse_image_hash_size(src: &str) -> Result { - 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, diff --git a/czkawka_core/src/big_file.rs b/czkawka_core/src/big_file.rs index 53e64d5..01f18f8 100644 --- a/czkawka_core/src/big_file.rs +++ b/czkawka_core/src/big_file.rs @@ -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() { diff --git a/czkawka_core/src/broken_files.rs b/czkawka_core/src/broken_files.rs index 497e1e4..b9a70d2 100644 --- a/czkawka_core/src/broken_files.rs +++ b/czkawka_core/src/broken_files.rs @@ -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 = non_cached_files_to_check .par_iter() diff --git a/czkawka_core/src/common.rs b/czkawka_core/src/common.rs index 5eada1a..e18ec07 100644 --- a/czkawka_core/src/common.rs +++ b/czkawka_core/src/common.rs @@ -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()); diff --git a/czkawka_core/src/duplicate.rs b/czkawka_core/src/duplicate.rs index 14686b2..26ad426 100644 --- a/czkawka_core/src/duplicate.rs +++ b/czkawka_core/src/duplicate.rs @@ -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 diff --git a/czkawka_core/src/empty_files.rs b/czkawka_core/src/empty_files.rs index 31c08e5..ec9625d 100644 --- a/czkawka_core/src/empty_files.rs +++ b/czkawka_core/src/empty_files.rs @@ -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() { diff --git a/czkawka_core/src/empty_folder.rs b/czkawka_core/src/empty_folder.rs index 3e453b2..e58d176 100644 --- a/czkawka_core/src/empty_folder.rs +++ b/czkawka_core/src/empty_folder.rs @@ -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 diff --git a/czkawka_core/src/invalid_symlinks.rs b/czkawka_core/src/invalid_symlinks.rs index 9d6b8a1..b3101ea 100644 --- a/czkawka_core/src/invalid_symlinks.rs +++ b/czkawka_core/src/invalid_symlinks.rs @@ -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() { diff --git a/czkawka_core/src/same_music.rs b/czkawka_core/src/same_music.rs index 32bfad0..be69feb 100644 --- a/czkawka_core/src/same_music.rs +++ b/czkawka_core/src/same_music.rs @@ -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![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; diff --git a/czkawka_core/src/similar_images.rs b/czkawka_core/src/similar_images.rs index d7f627e..947767b 100644 --- a/czkawka_core/src/similar_images.rs +++ b/czkawka_core/src/similar_images.rs @@ -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)> = non_cached_files_to_check .par_iter() diff --git a/czkawka_core/src/similar_videos.rs b/czkawka_core/src/similar_videos.rs index ad8338b..f97bf9e 100644 --- a/czkawka_core/src/similar_videos.rs +++ b/czkawka_core/src/similar_videos.rs @@ -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 = non_cached_files_to_check .par_iter() diff --git a/czkawka_core/src/temporary.rs b/czkawka_core/src/temporary.rs index 5fec89d..a8b84cf 100644 --- a/czkawka_core/src/temporary.rs +++ b/czkawka_core/src/temporary.rs @@ -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() { diff --git a/czkawka_gui/src/connect_button_move.rs b/czkawka_gui/src/connect_button_move.rs index 2adf840..63746f0 100644 --- a/czkawka_gui/src/connect_button_move.rs +++ b/czkawka_gui/src/connect_button_move.rs @@ -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; - // GTK 3 - folders = file_chooser.filenames(); + let folders: Vec = file_chooser.filenames(); // GTK 4 // folders = Vec::new(); // if let Some(g_files) = file_chooser.files() { diff --git a/czkawka_gui/src/connect_change_language.rs b/czkawka_gui/src/connect_change_language.rs index 1d6193c..c0aabcc 100644 --- a/czkawka_gui/src/connect_change_language.rs +++ b/czkawka_gui/src/connect_change_language.rs @@ -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); + } + } } diff --git a/czkawka_gui/src/connect_selection_of_directories.rs b/czkawka_gui/src/connect_selection_of_directories.rs index 0a46a2b..08dcb22 100644 --- a/czkawka_gui/src/connect_selection_of_directories.rs +++ b/czkawka_gui/src/connect_selection_of_directories.rs @@ -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; - // GTK 3 - folders = file_chooser.filenames(); + let folders: Vec = file_chooser.filenames(); // GTK 4 // folders = Vec::new(); // if let Some(g_files) = file_chooser.files() { diff --git a/czkawka_gui/src/main.rs b/czkawka_gui/src/main.rs index 40601f7..ccb2e6b 100644 --- a/czkawka_gui/src/main.rs +++ b/czkawka_gui/src/main.rs @@ -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 diff --git a/czkawka_gui/src/opening_selecting_records.rs b/czkawka_gui/src/opening_selecting_records.rs index 39d3bf6..41f843f 100644 --- a/czkawka_gui/src/opening_selecting_records.rs +++ b/czkawka_gui/src/opening_selecting_records.rs @@ -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::().unwrap(); let path = tree_model.value(&tree_model.iter(tree_path).unwrap(), column_path).get::().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); diff --git a/czkawka_gui/src/saving_loading.rs b/czkawka_gui/src/saving_loading.rs index a08efa5..2c09d67 100644 --- a/czkawka_gui/src/saving_loading.rs +++ b/czkawka_gui/src/saving_loading.rs @@ -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 = 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() {