Skip to content

Commit

Permalink
pick language by system locale if not picked
Browse files Browse the repository at this point in the history
  • Loading branch information
shevernitskiy committed May 28, 2024
1 parent 831fdd1 commit 841105c
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 36 deletions.
2 changes: 1 addition & 1 deletion src/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ impl eframe::App for App {
if self.selected_language != "None" {
self
.dict_metadata
.pick_language(self.selected_language.clone())
.pick_language_by_name(self.selected_language.clone())
}
};
}
Expand Down
12 changes: 11 additions & 1 deletion src/dict_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ pub struct Manifest {
pub csv: String,
pub font: String,
pub encoding: String,
pub code: Option<String>,
}

impl Default for Manifest {
Expand All @@ -17,6 +18,7 @@ impl Default for Manifest {
csv: "".to_string(),
font: "".to_string(),
encoding: "".to_string(),
code: None,
}
}
}
Expand Down Expand Up @@ -56,7 +58,7 @@ impl DictMetadata {
})
}

pub fn pick_language(&mut self, language: String) {
pub fn pick_language_by_name(&mut self, language: String) {
if let Some(manifest) = self
.vec_manifests
.iter()
Expand All @@ -65,4 +67,12 @@ impl DictMetadata {
self.manifest = manifest.clone();
}
}

pub fn pick_language_by_code(&mut self, code: Option<String>) -> Option<String> {
if let Some(manifest) = self.vec_manifests.iter().find(|item| item.code == code) {
self.manifest = manifest.clone();
return Some(manifest.language.clone());
}
None
}
}
102 changes: 68 additions & 34 deletions src/logic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,17 @@ impl App {
Message::DictMetadataLoaded(result) => match result {
Ok(metadata) => {
self.dict_metadata = metadata;
if self.selected_language == "None" {
if let Some(language) = self.dict_metadata.pick_language_by_code(Some(
sys_locale::get_locale()
.unwrap_or("en-US".to_string())
.split('-')
.collect::<Vec<&str>>()[0]
.to_owned(),
)) {
self.selected_language = language
}
}
}
Err(err) => {
error!(self, t!("Unable to fetch hook metadata..."), err.to_string());
Expand Down Expand Up @@ -144,6 +155,18 @@ impl App {
Message::DictMetadataLoaded,
);

if self.selected_language == "None" {
if let Some(language) = self.dict_metadata.pick_language_by_code(Some(
sys_locale::get_locale()
.unwrap_or("en-US".to_string())
.split('-')
.collect::<Vec<&str>>()[0]
.to_owned(),
)) {
self.selected_language = language;
}
}

self.delete_old_data_show = self.delete_old_data_check();
self.state = State::Idle;
}
Expand Down Expand Up @@ -186,53 +209,64 @@ impl App {
}

pub fn delete_old_hook_dialog(&mut self, ctx: &egui::Context) {
let modal = egui_modal::Modal::new(ctx, "delete_old_data");
modal.show(|ui| {
modal.title(ui, t!("Warning"));
modal.frame(ui, |ui| {
modal.body_and_icon(
ui,
t!("Old version of translation files has been detected. It's better to delete them to avoid conflicts. Delete?"),
egui_modal::Icon::Info,
);
});
modal.buttons(ui, |ui| {
if modal.button(ui, t!("No")).clicked() {
self.delete_old_data_show = false;
modal.close();
};
if modal.suggested_button(ui, t!("Yes")).clicked() {
self.delete_old_data_show = false;
self.remove_old_data();
modal.close();
self.toast.success(t!("Old files successfully deleted"));
};
});
});
modal.open();
self.dialog(
ctx,
"delete_old_data",
"Old version of translation files has been detected. It's better to delete them to avoid conflicts. Delete?",
|app| {
app.delete_old_data_show = false;
},
|app| {
app.delete_old_data_show = false;
app.remove_old_data();
app.toast.success(t!("Old files successfully deleted"));
},
);
}

pub fn delete_hook_dialog(&mut self, ctx: &egui::Context) {
let modal = egui_modal::Modal::new(ctx, "delete_data");
self.dialog(
ctx,
"delete_data",
"Delete all localization files?",
|app| {
app.delete_hook_show = false;
app.selected_language = "English".to_string();
},
|app| {
app.delete_hook_show = false;
app.remove_hook_data();
app.hook_checksum = app.local_hook_checksum().unwrap_or(0);
app.dict_checksum = app.local_dict_checksum().unwrap_or(0);
app
.toast
.success(t!("Localization files successfully deleted"));
},
);
}

fn dialog(
&mut self,
ctx: &egui::Context,
tag: impl std::fmt::Display,
text: &str,
no: impl FnOnce(&mut App),
yes: impl FnOnce(&mut App),
) {
let modal = egui_modal::Modal::new(ctx, tag);
modal.show(|ui| {
modal.title(ui, t!("Warning"));
modal.frame(ui, |ui| {
modal.body_and_icon(ui, t!("Delete all localization files?"), egui_modal::Icon::Info);
modal.body_and_icon(ui, t!(text), egui_modal::Icon::Info);
});
modal.buttons(ui, |ui| {
if modal.button(ui, t!("No")).clicked() {
self.delete_hook_show = false;
no(self);
modal.close();
};
if modal.suggested_button(ui, t!("Yes")).clicked() {
self.delete_hook_show = false;
self.remove_hook_data();
self.hook_checksum = self.local_hook_checksum().unwrap_or(0);
self.dict_checksum = self.local_dict_checksum().unwrap_or(0);
yes(self);
modal.close();
self
.toast
.success(t!("Localization files successfully deleted"));
};
});
});
Expand Down

0 comments on commit 841105c

Please sign in to comment.