fix: исправлены баги с сообщениями, редактированием и reply
- Изменён порядок хранения сообщений (теперь от старых к новым) - Исправлена логика выбора сообщений для редактирования - Исправлена отправка reply (структура условий) - Добавлено сохранение reply_info при отправке - Удалены отладочные логи Fixes: сообщения теперь отображаются корректно в UI Fixes: редактирование работает без ошибки 'Message not found' Fixes: reply показывает превью исходного сообщения
This commit is contained in:
@@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user