fix: исправлены баги с сообщениями, редактированием и reply

- Изменён порядок хранения сообщений (теперь от старых к новым)
- Исправлена логика выбора сообщений для редактирования
- Исправлена отправка reply (структура условий)
- Добавлено сохранение reply_info при отправке
- Удалены отладочные логи

Fixes: сообщения теперь отображаются корректно в UI
Fixes: редактирование работает без ошибки 'Message not found'
Fixes: reply показывает превью исходного сообщения
This commit is contained in:
Mikhail Kilin
2026-01-31 18:29:02 +03:00
parent 644e36597d
commit 07c401e0f9
4 changed files with 129 additions and 82 deletions

View File

@@ -133,30 +133,34 @@ impl App {
/// Начать выбор сообщения для редактирования (при стрелке вверх в пустом инпуте)
pub fn start_message_selection(&mut self) {
if self.td_client.current_chat_messages().is_empty() {
let total = self.td_client.current_chat_messages().len();
if total == 0 {
return;
}
// Начинаем с последнего сообщения (индекс 0 = самое новое снизу)
self.chat_state = ChatState::MessageSelection { selected_index: 0 };
// Начинаем с последнего сообщения (индекс len-1 = самое новое внизу)
self.chat_state = ChatState::MessageSelection { selected_index: total - 1 };
}
/// Выбрать предыдущее сообщение (вверх по списку = увеличить индекс)
/// Выбрать предыдущее сообщение (вверх по списку = к старым = уменьшить индекс)
pub fn select_previous_message(&mut self) {
if let ChatState::MessageSelection { selected_index } = &mut self.chat_state {
if *selected_index > 0 {
*selected_index -= 1;
}
}
}
/// Выбрать следующее сообщение (вниз по списку = к новым = увеличить индекс)
pub fn select_next_message(&mut self) {
let total = self.td_client.current_chat_messages().len();
if total == 0 {
return;
}
if let ChatState::MessageSelection { selected_index } = &mut self.chat_state {
*selected_index = (*selected_index + 1).min(total - 1);
}
}
/// Выбрать следующее сообщение (вниз по списку = уменьшить индекс)
pub fn select_next_message(&mut self) {
if let ChatState::MessageSelection { selected_index } = &mut self.chat_state {
if *selected_index > 0 {
*selected_index -= 1;
if *selected_index < total - 1 {
*selected_index += 1;
} else {
// Дошли до самого нового сообщения - выходим из режима выбора
self.chat_state = ChatState::Normal;
}
}
@@ -165,12 +169,7 @@ impl App {
/// Получить выбранное сообщение
pub fn get_selected_message(&self) -> Option<&crate::tdlib::MessageInfo> {
self.chat_state.selected_message_index().and_then(|idx| {
let total = self.td_client.current_chat_messages().len();
if total == 0 || idx >= total {
return None;
}
// idx=0 это последнее сообщение (total-1), idx=1 это предпоследнее (total-2), и т.д.
self.td_client.current_chat_messages().get(total - 1 - idx)
self.td_client.current_chat_messages().get(idx)
})
}