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

View File

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

View File

@@ -175,11 +175,10 @@ async fn update_log_pagination_handler(
let page = update_callback_data.page; let page = update_callback_data.page;
let total_pages = items_page.pages; 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); let keyboard = generic_get_pagination_keyboard(page, total_pages, update_callback_data, true);
bot bot

View File

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