refactor: restructure MessageInfo with logical field grouping (P2.6)

Сгруппированы 16 плоских полей MessageInfo в 4 логические структуры
для улучшения организации кода и maintainability.

Новые структуры:
- MessageMetadata: id, sender_name, date, edit_date
- MessageContent: text, entities
- MessageState: is_outgoing, is_read, can_be_edited, can_be_deleted_*
- MessageInteractions: reply_to, forward_from, reactions

Изменения:
- Добавлены 4 новые структуры в tdlib/types.rs
- Обновлена MessageInfo для использования новых структур
- Добавлен конструктор MessageInfo::new() для удобного создания
- Добавлены getter методы (id(), text(), sender_name() и др.) для удобного доступа
- Обновлены все места создания MessageInfo (convert_message)
- Обновлены все места использования (~200+ обращений):
  * ui/messages.rs: рендеринг сообщений
  * app/mod.rs: логика приложения
  * input/main_input.rs: обработка ввода и копирование
  * tdlib/client.rs: обработка updates
  * Все тестовые файлы (14 файлов)

Преимущества:
- Логическая группировка данных
- Проще понимать структуру сообщения
- Легче добавлять новые поля в будущем
- Улучшенная читаемость кода

Статус: Priority 2 теперь 80% (4/5 задач)
-  Error enum
-  Config validation
-  Newtype для ID
-  MessageInfo реструктуризация
-  MessageBuilder pattern

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Kilin
2026-01-31 01:45:54 +03:00
parent 7081a886ad
commit 43960332d9
14 changed files with 274 additions and 144 deletions

View File

@@ -24,7 +24,7 @@ fn test_edit_message_changes_text() {
// Проверяем что текст сообщения изменился
let messages = client.get_messages(123);
assert_eq!(messages.len(), 1);
assert_eq!(messages[0].content, "Edited text");
assert_eq!(messages[0].content.text(), "Edited text");
}
/// Test: Редактирование устанавливает edit_date
@@ -97,7 +97,7 @@ fn test_multiple_edits_of_same_message() {
// Проверяем что сообщение содержит последнюю версию
let messages = client.get_messages(123);
assert_eq!(messages.len(), 1);
assert_eq!(messages[0].content, "Final version");
assert_eq!(messages[0].content.text(), "Final version");
}
/// Test: Редактирование несуществующего сообщения (ничего не происходит)
@@ -129,21 +129,21 @@ fn test_edit_history_tracking() {
// Сохраняем original
let messages_before = client.get_messages(123);
let original = messages_before[0].content.clone();
let original = messages_before[0].text().to_string();
// Редактируем
client.edit_message(123, msg_id, "Edited".to_string());
// Проверяем что изменилось
let messages_edited = client.get_messages(123);
assert_eq!(messages_edited[0].content, "Edited");
assert_eq!(messages_edited[0].content.text(), "Edited");
// Можем "отменить" редактирование вернув original
client.edit_message(123, msg_id, original);
// Проверяем что вернулось
let messages_restored = client.get_messages(123);
assert_eq!(messages_restored[0].content, "Original");
assert_eq!(messages_restored[0].content.text(), "Original");
// История показывает 2 редактирования
assert_eq!(client.edited_messages().len(), 2);