fix: исправлены баги с сообщениями, редактированием и reply
- Изменён порядок хранения сообщений (теперь от старых к новым) - Исправлена логика выбора сообщений для редактирования - Исправлена отправка reply (структура условий) - Добавлено сохранение reply_info при отправке - Удалены отладочные логи Fixes: сообщения теперь отображаются корректно в UI Fixes: редактирование работает без ошибки 'Message not found' Fixes: reply показывает превью исходного сообщения
This commit is contained in:
@@ -494,7 +494,12 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(Ok(_)) => {
|
||||
Ok(Ok(messages)) => {
|
||||
// Сохраняем загруженные сообщения
|
||||
*app.td_client.current_chat_messages_mut() = messages;
|
||||
// ВАЖНО: Устанавливаем current_chat_id ТОЛЬКО ПОСЛЕ сохранения истории
|
||||
// Это предотвращает race condition с Update::NewMessage
|
||||
app.td_client.set_current_chat_id(Some(ChatId::new(chat_id)));
|
||||
// Загружаем недостающие reply info
|
||||
let _ = timeout(
|
||||
Duration::from_secs(5),
|
||||
@@ -563,39 +568,39 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
if let Some(chat_id) = app.get_selected_chat_id() {
|
||||
let text = app.message_input.clone();
|
||||
|
||||
if let Some(msg_id) = app.chat_state.selected_message_id() {
|
||||
if app.is_editing() {
|
||||
// Режим редактирования
|
||||
app.message_input.clear();
|
||||
app.cursor_position = 0;
|
||||
app.chat_state = crate::app::ChatState::Normal;
|
||||
|
||||
match timeout(
|
||||
Duration::from_secs(5),
|
||||
app.td_client.edit_message(ChatId::new(chat_id), msg_id, text),
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(Ok(edited_msg)) => {
|
||||
// Обновляем сообщение в списке
|
||||
if let Some(msg) = app
|
||||
.td_client
|
||||
.current_chat_messages_mut()
|
||||
.iter_mut()
|
||||
.find(|m| m.id() == msg_id)
|
||||
{
|
||||
msg.content.text = edited_msg.content.text;
|
||||
msg.content.entities = edited_msg.content.entities;
|
||||
msg.metadata.edit_date = edited_msg.metadata.edit_date;
|
||||
if app.is_editing() {
|
||||
// Режим редактирования
|
||||
if let Some(msg_id) = app.chat_state.selected_message_id() {
|
||||
match timeout(
|
||||
Duration::from_secs(5),
|
||||
app.td_client.edit_message(ChatId::new(chat_id), msg_id, text),
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(Ok(edited_msg)) => {
|
||||
// Обновляем сообщение в списке
|
||||
if let Some(msg) = app
|
||||
.td_client
|
||||
.current_chat_messages_mut()
|
||||
.iter_mut()
|
||||
.find(|m| m.id() == msg_id)
|
||||
{
|
||||
msg.content.text = edited_msg.content.text;
|
||||
msg.content.entities = edited_msg.content.entities;
|
||||
msg.metadata.edit_date = edited_msg.metadata.edit_date;
|
||||
}
|
||||
// Очищаем инпут и сбрасываем состояние ПОСЛЕ успешного редактирования
|
||||
app.message_input.clear();
|
||||
app.cursor_position = 0;
|
||||
app.chat_state = crate::app::ChatState::Normal;
|
||||
}
|
||||
Ok(Err(e)) => {
|
||||
app.error_message = Some(e);
|
||||
}
|
||||
Err(_) => {
|
||||
app.error_message = Some("Таймаут редактирования".to_string());
|
||||
}
|
||||
}
|
||||
Ok(Err(e)) => {
|
||||
app.error_message = Some(e);
|
||||
}
|
||||
Err(_) => {
|
||||
app.error_message = Some("Таймаут редактирования".to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Обычная отправка (или reply)
|
||||
@@ -663,7 +668,12 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
)
|
||||
.await
|
||||
{
|
||||
Ok(Ok(_)) => {
|
||||
Ok(Ok(messages)) => {
|
||||
// Сохраняем загруженные сообщения
|
||||
*app.td_client.current_chat_messages_mut() = messages;
|
||||
// ВАЖНО: Устанавливаем current_chat_id ТОЛЬКО ПОСЛЕ сохранения истории
|
||||
// Это предотвращает race condition с Update::NewMessage
|
||||
app.td_client.set_current_chat_id(Some(ChatId::new(chat_id)));
|
||||
// Загружаем недостающие reply info
|
||||
let _ = timeout(
|
||||
Duration::from_secs(5),
|
||||
|
||||
Reference in New Issue
Block a user