This commit is contained in:
2023-06-07 01:07:55 +02:00
parent e29c772e6e
commit 60864ac38f
4 changed files with 25 additions and 39 deletions

View File

@@ -167,12 +167,7 @@ where
return Ok(());
};
let total_pages = items_page.pages;
let footer = format!("\n\nСтраница 1/{total_pages}");
let formated_items = items_page.format_items(4096 - footer.len());
let message_text = format!("{formated_items}{footer}");
let formated_page = items_page.format(1, 4096);
let callback_data = match command {
BookCommand::Author { id } => BookCallbackData::Author { id, page: 1 },
@@ -180,10 +175,10 @@ where
BookCommand::Sequence { id } => BookCallbackData::Sequence { id, page: 1 },
};
let keyboard = generic_get_pagination_keyboard(1, total_pages, callback_data, true);
let keyboard = generic_get_pagination_keyboard(1, items_page.pages, callback_data, true);
bot
.send_message(chat_id, message_text)
.send_message(chat_id, formated_page)
.reply_markup(keyboard)
.send()
.await?;
@@ -260,17 +255,12 @@ where
};
}
let total_pages = items_page.pages;
let footer = format!("\n\nСтраница {page}/{total_pages}");
let formated_page = items_page.format(page, 4096);
let formated_items = items_page.format_items(4096 - footer.len());
let message_text = format!("{formated_items}{footer}");
let keyboard = generic_get_pagination_keyboard(page, total_pages, callback_data, true);
let keyboard = generic_get_pagination_keyboard(page, items_page.pages, callback_data, true);
bot
.edit_message_text(chat_id, message_id, message_text)
.edit_message_text(chat_id, message_id, formated_page)
.reply_markup(keyboard)
.send()
.await?;

View File

@@ -190,17 +190,12 @@ where
};
}
let total_pages = items_page.pages;
let footer = format!("\n\nСтраница {page}/{total_pages}");
let formated_page = items_page.format(page, 4096);
let formated_items = items_page.format_items(4096 - footer.len());
let message_text = format!("{formated_items}{footer}");
let keyboard = generic_get_pagination_keyboard(page, total_pages, search_data, true);
let keyboard = generic_get_pagination_keyboard(page, items_page.pages, search_data, true);
bot
.edit_message_text(chat_id, message_id, message_text)
.edit_message_text(chat_id, message_id, formated_page)
.reply_markup(keyboard)
.send()
.await?;

View File

@@ -175,11 +175,10 @@ async fn update_log_pagination_handler(
let page = update_callback_data.page;
let total_pages = items_page.pages;
let footer = format!("\n\nСтраница {page}/{total_pages}");
let formated_items = items_page.format_items(4096 - footer.len());
let formated_page = items_page.format(page, 4096);
let message_text = format!("{header}{formated_items}{footer}");
let message_text = format!("{header}{formated_page}");
let keyboard = generic_get_pagination_keyboard(page, total_pages, update_callback_data, true);
bot

View File

@@ -94,9 +94,7 @@ where
T: Format + Clone + Debug,
P: FormatTitle + Clone + Debug
{
pub fn format_items(&self, max_size: usize) -> String {
log::error!("format: {:?}", self);
pub fn format(&self, page: u32, max_size: usize) -> String {
let title: String = match &self.parent_item {
Some(parent_item) => {
let item_title = parent_item.format_title();
@@ -109,13 +107,21 @@ where
},
None => "".to_string(),
};
let title_len: usize = title.len();
let total_pages = self.pages;
let footer = format!("\n\nСтраница {page}/{total_pages}");
let formated_items = self.format_items(max_size - title.len() - footer.len());
format!("{title}{formated_items}{footer}")
}
fn format_items(&self, max_size: usize) -> String {
let separator = "\n\n\n";
let separator_len: usize = separator.len();
let items_count: usize = self.items.len();
let item_size: usize = (max_size - title_len - separator_len * items_count) / items_count;
let item_size: usize = (max_size - separator_len * items_count) / items_count;
let format_result: Vec<FormatResult> = self.items
.iter()
@@ -129,13 +135,11 @@ where
};
if !has_any_spliced {
let items_string = format_result
return format_result
.into_iter()
.map(|item| item.result)
.collect::<Vec<String>>()
.join(separator);
return format!("{title}{items_string}");
}
let mut free_symbols: usize = format_result
@@ -144,7 +148,7 @@ where
.map(|item| item_size - item.current_size)
.sum();
let items_string = self.items
self.items
.iter()
.enumerate()
.map(|(index, item)| {
@@ -162,9 +166,7 @@ where
}
})
.collect::<Vec<String>>()
.join(separator);
format!("{title}{items_string}")
.join(separator)
}
}