diff --git a/src/bots/approved_bot/modules/book.rs b/src/bots/approved_bot/modules/book.rs index 442cf3c..1296fd2 100644 --- a/src/bots/approved_bot/modules/book.rs +++ b/src/bots/approved_bot/modules/book.rs @@ -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?; diff --git a/src/bots/approved_bot/modules/search.rs b/src/bots/approved_bot/modules/search.rs index 119143e..e5e8b0e 100644 --- a/src/bots/approved_bot/modules/search.rs +++ b/src/bots/approved_bot/modules/search.rs @@ -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?; diff --git a/src/bots/approved_bot/modules/update_history.rs b/src/bots/approved_bot/modules/update_history.rs index 233b9af..afd9a1f 100644 --- a/src/bots/approved_bot/modules/update_history.rs +++ b/src/bots/approved_bot/modules/update_history.rs @@ -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 diff --git a/src/bots/approved_bot/services/book_library/types.rs b/src/bots/approved_bot/services/book_library/types.rs index fe84b29..9b3bd05 100644 --- a/src/bots/approved_bot/services/book_library/types.rs +++ b/src/bots/approved_bot/services/book_library/types.rs @@ -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 = 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::>() .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::>() - .join(separator); - - format!("{title}{items_string}") + .join(separator) } }