mirror of
https://github.com/flibusta-apps/book_bot.git
synced 2026-03-03 07:00:53 +01:00
Add back button for language settings
Add LangSettingsBack callback variant and serialization (Display/FromStr). Add a "← Назад" button to the language keyboard and handle its callback to return to the main settings. Make the keyboard vector mutable and adjust match arms to use references and clone/remove as needed.
This commit is contained in:
@@ -20,6 +20,8 @@ pub enum SettingsCallbackData {
|
|||||||
},
|
},
|
||||||
/// Return from default search submenu to main settings
|
/// Return from default search submenu to main settings
|
||||||
DefaultSearchBack,
|
DefaultSearchBack,
|
||||||
|
/// Return from languages submenu to main settings
|
||||||
|
LangSettingsBack,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for SettingsCallbackData {
|
impl FromStr for SettingsCallbackData {
|
||||||
@@ -35,6 +37,9 @@ impl FromStr for SettingsCallbackData {
|
|||||||
if s == "defsearch_back" {
|
if s == "defsearch_back" {
|
||||||
return Ok(SettingsCallbackData::DefaultSearchBack);
|
return Ok(SettingsCallbackData::DefaultSearchBack);
|
||||||
}
|
}
|
||||||
|
if s == "lang_settings_back" {
|
||||||
|
return Ok(SettingsCallbackData::LangSettingsBack);
|
||||||
|
}
|
||||||
if let Some(value) = s.strip_prefix("defsearch_") {
|
if let Some(value) = s.strip_prefix("defsearch_") {
|
||||||
return Ok(SettingsCallbackData::DefaultSearch {
|
return Ok(SettingsCallbackData::DefaultSearch {
|
||||||
value: value.to_string().into(),
|
value: value.to_string().into(),
|
||||||
@@ -69,6 +74,7 @@ impl Display for SettingsCallbackData {
|
|||||||
SettingsCallbackData::DefaultSearchMenu => write!(f, "defsearch"),
|
SettingsCallbackData::DefaultSearchMenu => write!(f, "defsearch"),
|
||||||
SettingsCallbackData::DefaultSearch { value } => write!(f, "defsearch_{value}"),
|
SettingsCallbackData::DefaultSearch { value } => write!(f, "defsearch_{value}"),
|
||||||
SettingsCallbackData::DefaultSearchBack => write!(f, "defsearch_back"),
|
SettingsCallbackData::DefaultSearchBack => write!(f, "defsearch_back"),
|
||||||
|
SettingsCallbackData::LangSettingsBack => write!(f, "lang_settings_back"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ fn get_lang_keyboard(
|
|||||||
all_langs: Vec<Lang>,
|
all_langs: Vec<Lang>,
|
||||||
allowed_langs: HashSet<SmartString>,
|
allowed_langs: HashSet<SmartString>,
|
||||||
) -> InlineKeyboardMarkup {
|
) -> InlineKeyboardMarkup {
|
||||||
let buttons = all_langs
|
let mut buttons: Vec<Vec<InlineKeyboardButton>> = all_langs
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|lang| {
|
.map(|lang| {
|
||||||
let (emoji, callback_data) = match allowed_langs.contains(&lang.code) {
|
let (emoji, callback_data) = match allowed_langs.contains(&lang.code) {
|
||||||
@@ -78,6 +78,13 @@ fn get_lang_keyboard(
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
buttons.push(vec![InlineKeyboardButton {
|
||||||
|
text: "← Назад".to_string(),
|
||||||
|
kind: teloxide::types::InlineKeyboardButtonKind::CallbackData(
|
||||||
|
SettingsCallbackData::LangSettingsBack.to_string(),
|
||||||
|
),
|
||||||
|
}]);
|
||||||
|
|
||||||
InlineKeyboardMarkup {
|
InlineKeyboardMarkup {
|
||||||
inline_keyboard: buttons,
|
inline_keyboard: buttons,
|
||||||
}
|
}
|
||||||
@@ -180,6 +187,14 @@ async fn settings_callback_handler(
|
|||||||
bot.answer_callback_query(cq.id).send().await?;
|
bot.answer_callback_query(cq.id).send().await?;
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
SettingsCallbackData::LangSettingsBack => {
|
||||||
|
bot.edit_message_text(message.chat().id, message.id(), "Настройки")
|
||||||
|
.reply_markup(get_main_settings_keyboard())
|
||||||
|
.send()
|
||||||
|
.await?;
|
||||||
|
bot.answer_callback_query(cq.id).send().await?;
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
SettingsCallbackData::DefaultSearch { value } => {
|
SettingsCallbackData::DefaultSearch { value } => {
|
||||||
let current = get_user_settings(user.id).await.ok().flatten();
|
let current = get_user_settings(user.id).await.ok().flatten();
|
||||||
let allowed_langs: SmallVec<[SmartString; 3]> = match current {
|
let allowed_langs: SmallVec<[SmartString; 3]> = match current {
|
||||||
@@ -233,15 +248,18 @@ async fn settings_callback_handler(
|
|||||||
allowed_langs_set.insert(v);
|
allowed_langs_set.insert(v);
|
||||||
});
|
});
|
||||||
|
|
||||||
match callback_data {
|
match &callback_data {
|
||||||
SettingsCallbackData::Settings => (),
|
SettingsCallbackData::Settings => (),
|
||||||
SettingsCallbackData::On { code } => {
|
SettingsCallbackData::On { code } => {
|
||||||
allowed_langs_set.insert(code);
|
allowed_langs_set.insert(code.clone());
|
||||||
}
|
}
|
||||||
SettingsCallbackData::Off { code } => {
|
SettingsCallbackData::Off { code } => {
|
||||||
allowed_langs_set.remove(&code);
|
allowed_langs_set.remove(code);
|
||||||
}
|
}
|
||||||
_ => {}
|
SettingsCallbackData::LangSettingsBack
|
||||||
|
| SettingsCallbackData::DefaultSearchBack
|
||||||
|
| SettingsCallbackData::DefaultSearchMenu
|
||||||
|
| SettingsCallbackData::DefaultSearch { .. } => {}
|
||||||
};
|
};
|
||||||
|
|
||||||
if allowed_langs_set.is_empty() {
|
if allowed_langs_set.is_empty() {
|
||||||
|
|||||||
Reference in New Issue
Block a user