mirror of
https://github.com/flibusta-apps/book_bot.git
synced 2025-12-06 07:25:36 +01:00
Update annotation spliting
This commit is contained in:
@@ -17,7 +17,7 @@ use crate::bots::{
|
||||
BotHandlerInternal,
|
||||
};
|
||||
|
||||
use super::utils::{filter_command, CommandParse, GetPaginationCallbackData};
|
||||
use super::utils::{filter_command, CommandParse, GetPaginationCallbackData, split_text_to_chunks};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum AnnotationCommand {
|
||||
@@ -138,7 +138,7 @@ impl AnnotationFormat for AuthorAnnotation {
|
||||
}
|
||||
|
||||
fn is_normal_text(&self) -> bool {
|
||||
self.text.replace('\n', "").replace(' ', "").len() != 0
|
||||
self.text.replace("\n", "").replace(' ', "").len() != 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,11 +217,8 @@ where
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let chunked_text: Vec<String> = textwrap::wrap(annotation.get_text(), 512)
|
||||
.into_iter()
|
||||
.filter(|text| text.replace('\r', "").len() != 0)
|
||||
.map(|text| text.to_string())
|
||||
.collect();
|
||||
let annotation_text = annotation.get_text();
|
||||
let chunked_text = split_text_to_chunks(annotation_text, 512);
|
||||
let current_text = chunked_text.get(0).unwrap();
|
||||
|
||||
let callback_data = match command {
|
||||
@@ -272,11 +269,9 @@ where
|
||||
};
|
||||
|
||||
let page_index: usize = page.try_into().unwrap();
|
||||
let chunked_text: Vec<String> = textwrap::wrap(annotation.get_text(), 512)
|
||||
.into_iter()
|
||||
.filter(|text| text.replace('\r', "").len() != 0)
|
||||
.map(|text| text.to_string())
|
||||
.collect();
|
||||
|
||||
let annotation_text = annotation.get_text();
|
||||
let chunked_text = split_text_to_chunks(annotation_text, 512);
|
||||
let current_text = chunked_text.get(page_index - 1).unwrap();
|
||||
|
||||
let keyboard = generic_get_pagination_keyboard(
|
||||
|
||||
@@ -112,3 +112,53 @@ where
|
||||
inline_keyboard: buttons,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn split_text_to_chunks(text: &str, width: usize) -> Vec<String> {
|
||||
let mut result: Vec<String> = vec![];
|
||||
|
||||
let chunks = textwrap::wrap(text, 512)
|
||||
.into_iter()
|
||||
.filter(|text| text.replace('\r', "").len() != 0)
|
||||
.map(|text| text.to_string());
|
||||
|
||||
let mut index = 0;
|
||||
|
||||
for val in chunks {
|
||||
if result.len() == index {
|
||||
result.push(val);
|
||||
continue;
|
||||
}
|
||||
|
||||
if result[index].len() + val.len() + 1 > width {
|
||||
result.push(val);
|
||||
index += 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
result[index] += &format!("\n{}", &val);
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::bots::approved_bot::modules::utils::split_text_to_chunks;
|
||||
|
||||
#[test]
|
||||
fn test_fix_annotation_text() {
|
||||
let input = "\n Библиотека современной фантастики. Том 21\n Содержание:\n РОМАН И ПОВЕСТИ:\n Разбивая стеклянные двери… Предисловие В. Ревича\n Джон Бойнтон Пристли. Дженни Вильерс. Роман о театре. Перевод с английского В. Ашкенази\n Уильям Сароян. Тигр Тома Трейси. Повесть. Перевод с английского Р. Рыбкина\n Роберт Янг. Срубить дерево. Повесть. Перевод с английского С. Васильевой\n РАССКАЗЫ:\n Жан Рей. Рука Геца фон Берлихингена. Перевод с французского А. Григорьева\n Клод Легран. По мерке. Перевод с французского А. Григорьева\n Саке Комацу. Смерть Бикуни. Перевод с японского З. Рахима\n Ана Мария Матуте. Король Зеннов. Перевод с испанского Е. Любимовой\n Антонио Минготе. Николас. Перевод с испанского Р. Рыбкина\n Юн Бинг. Риестофер Юсеф. Перевод с норвежского Л. Жданова\n Гораций Голд. Чего стоят крылья. Перевод с английского Ф. Мендельсона\n Питер С. Бигл. Милости просим, леди Смерть! Перевод с английского Я. Евдокимовой\n Андре Майе. Как я стала писательницей. Перевод с французского Р. Рыбкина\n Джеймс Поллард. Заколдованный поезд. Перевод с английского Р. Рыбкина\n Рэй Брэдбери. Апрельское колдовство. Перевод с английского Л. Жданова\n Айзек Азимов. Небывальщина. Перевод с английского К. Сенина и В. Тальми\n Р.А. Лэфферти. Семь дней ужаса. Перевод с английского И. Почиталина\n Генри Каттнер. Сим удостоверяется… Перевод с английского К. Сенина и В. Тальми\n ";
|
||||
let expected_result: Vec<String> = vec![
|
||||
" Библиотека современной фантастики. Том 21\n Содержание:\n РОМАН И ПОВЕСТИ:\n Разбивая стеклянные двери… Предисловие В. Ревича\n Джон Бойнтон Пристли. Дженни Вильерс. Роман о театре. Перевод с английского В. Ашкенази".to_string(),
|
||||
" Уильям Сароян. Тигр Тома Трейси. Повесть. Перевод с английского Р. Рыбкина\n Роберт Янг. Срубить дерево. Повесть. Перевод с английского С. Васильевой\n РАССКАЗЫ:\n Жан Рей. Рука Геца фон Берлихингена. Перевод с французского А. Григорьева".to_string(),
|
||||
" Клод Легран. По мерке. Перевод с французского А. Григорьева\n Саке Комацу. Смерть Бикуни. Перевод с японского З. Рахима\n Ана Мария Матуте. Король Зеннов. Перевод с испанского Е. Любимовой\n Антонио Минготе. Николас. Перевод с испанского Р. Рыбкина".to_string(),
|
||||
" Юн Бинг. Риестофер Юсеф. Перевод с норвежского Л. Жданова\n Гораций Голд. Чего стоят крылья. Перевод с английского Ф. Мендельсона\n Питер С. Бигл. Милости просим, леди Смерть! Перевод с английского Я. Евдокимовой\n Андре Майе. Как я стала писательницей. Перевод с французского Р. Рыбкина".to_string(),
|
||||
" Джеймс Поллард. Заколдованный поезд. Перевод с английского Р. Рыбкина\n Рэй Брэдбери. Апрельское колдовство. Перевод с английского Л. Жданова\n Айзек Азимов. Небывальщина. Перевод с английского К. Сенина и В. Тальми\n Р.А. Лэфферти. Семь дней ужаса. Перевод с английского И. Почиталина".to_string(),
|
||||
" Генри Каттнер. Сим удостоверяется… Перевод с английского К. Сенина и В. Тальми".to_string()
|
||||
];
|
||||
|
||||
let result = split_text_to_chunks(input, 512);
|
||||
|
||||
assert_eq!(result, expected_result);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user