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:
@@ -188,8 +188,8 @@ impl App {
|
||||
|
||||
// Сначала извлекаем данные из сообщения
|
||||
let msg_data = self.get_selected_message().and_then(|msg| {
|
||||
if msg.can_be_edited && msg.is_outgoing {
|
||||
Some((msg.id, msg.content.clone(), selected_idx.unwrap()))
|
||||
if msg.can_be_edited() && msg.is_outgoing() {
|
||||
Some((msg.id()(), msg.text().to_string(), selected_idx.unwrap()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
@@ -328,7 +328,7 @@ impl App {
|
||||
pub fn start_reply_to_selected(&mut self) -> bool {
|
||||
if let Some(msg) = self.get_selected_message() {
|
||||
self.chat_state = ChatState::Reply {
|
||||
message_id: msg.id,
|
||||
message_id: msg.id(),
|
||||
};
|
||||
return true;
|
||||
}
|
||||
@@ -351,7 +351,7 @@ impl App {
|
||||
self.td_client
|
||||
.current_chat_messages()
|
||||
.iter()
|
||||
.find(|m| m.id == id)
|
||||
.find(|m| m.id() == id)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -359,7 +359,7 @@ impl App {
|
||||
pub fn start_forward_selected(&mut self) -> bool {
|
||||
if let Some(msg) = self.get_selected_message() {
|
||||
self.chat_state = ChatState::Forward {
|
||||
message_id: msg.id,
|
||||
message_id: msg.id(),
|
||||
selecting_chat: true,
|
||||
};
|
||||
// Сбрасываем выбор чата на первый
|
||||
@@ -388,7 +388,7 @@ impl App {
|
||||
self.td_client
|
||||
.current_chat_messages()
|
||||
.iter()
|
||||
.find(|m| m.id == id)
|
||||
.find(|m| m.id() == id)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -451,7 +451,7 @@ impl App {
|
||||
|
||||
/// Получить ID текущего pinned для перехода в историю
|
||||
pub fn get_selected_pinned_id(&self) -> Option<i64> {
|
||||
self.get_selected_pinned().map(|m| m.id)
|
||||
self.get_selected_pinned().map(|m| m.id())
|
||||
}
|
||||
|
||||
// === Message Search Mode ===
|
||||
@@ -522,7 +522,7 @@ impl App {
|
||||
|
||||
/// Получить ID выбранного результата для перехода
|
||||
pub fn get_selected_search_result_id(&self) -> Option<i64> {
|
||||
self.get_selected_search_result().map(|m| m.id)
|
||||
self.get_selected_search_result().map(|m| m.id())
|
||||
}
|
||||
|
||||
/// Получить поисковый запрос из режима поиска
|
||||
|
||||
Reference in New Issue
Block a user