mirror of
https://github.com/flibusta-apps/book_bot.git
synced 2025-12-06 15:35:35 +01:00
Update annotation spliting
This commit is contained in:
@@ -17,7 +17,7 @@ use crate::bots::{
|
|||||||
BotHandlerInternal,
|
BotHandlerInternal,
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::utils::{filter_command, CommandParse, GetPaginationCallbackData};
|
use super::utils::{filter_command, CommandParse, GetPaginationCallbackData, split_text_to_chunks};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub enum AnnotationCommand {
|
pub enum AnnotationCommand {
|
||||||
@@ -138,7 +138,7 @@ impl AnnotationFormat for AuthorAnnotation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn is_normal_text(&self) -> bool {
|
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(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let chunked_text: Vec<String> = textwrap::wrap(annotation.get_text(), 512)
|
let annotation_text = annotation.get_text();
|
||||||
.into_iter()
|
let chunked_text = split_text_to_chunks(annotation_text, 512);
|
||||||
.filter(|text| text.replace('\r', "").len() != 0)
|
|
||||||
.map(|text| text.to_string())
|
|
||||||
.collect();
|
|
||||||
let current_text = chunked_text.get(0).unwrap();
|
let current_text = chunked_text.get(0).unwrap();
|
||||||
|
|
||||||
let callback_data = match command {
|
let callback_data = match command {
|
||||||
@@ -272,11 +269,9 @@ where
|
|||||||
};
|
};
|
||||||
|
|
||||||
let page_index: usize = page.try_into().unwrap();
|
let page_index: usize = page.try_into().unwrap();
|
||||||
let chunked_text: Vec<String> = textwrap::wrap(annotation.get_text(), 512)
|
|
||||||
.into_iter()
|
let annotation_text = annotation.get_text();
|
||||||
.filter(|text| text.replace('\r', "").len() != 0)
|
let chunked_text = split_text_to_chunks(annotation_text, 512);
|
||||||
.map(|text| text.to_string())
|
|
||||||
.collect();
|
|
||||||
let current_text = chunked_text.get(page_index - 1).unwrap();
|
let current_text = chunked_text.get(page_index - 1).unwrap();
|
||||||
|
|
||||||
let keyboard = generic_get_pagination_keyboard(
|
let keyboard = generic_get_pagination_keyboard(
|
||||||
|
|||||||
@@ -112,3 +112,53 @@ where
|
|||||||
inline_keyboard: buttons,
|
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