fixes
This commit is contained in:
@@ -67,6 +67,51 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Режим выбора чата для пересылки
|
||||
if app.is_forwarding() {
|
||||
match key.code {
|
||||
KeyCode::Esc => {
|
||||
app.cancel_forward();
|
||||
}
|
||||
KeyCode::Enter => {
|
||||
// Выбираем чат и пересылаем сообщение
|
||||
let filtered = app.get_filtered_chats();
|
||||
if let Some(i) = app.chat_list_state.selected() {
|
||||
if let Some(chat) = filtered.get(i) {
|
||||
let to_chat_id = chat.id;
|
||||
if let Some(msg_id) = app.forwarding_message_id {
|
||||
if let Some(from_chat_id) = app.get_selected_chat_id() {
|
||||
match timeout(
|
||||
Duration::from_secs(5),
|
||||
app.td_client.forward_messages(to_chat_id, from_chat_id, vec![msg_id])
|
||||
).await {
|
||||
Ok(Ok(_)) => {
|
||||
app.status_message = Some("Сообщение переслано".to_string());
|
||||
}
|
||||
Ok(Err(e)) => {
|
||||
app.error_message = Some(e);
|
||||
}
|
||||
Err(_) => {
|
||||
app.error_message = Some("Таймаут пересылки".to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
app.cancel_forward();
|
||||
}
|
||||
KeyCode::Down => {
|
||||
app.next_chat();
|
||||
}
|
||||
KeyCode::Up => {
|
||||
app.previous_chat();
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Режим поиска
|
||||
if app.is_searching {
|
||||
match key.code {
|
||||
@@ -81,7 +126,8 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
app.message_scroll_offset = 0;
|
||||
match timeout(Duration::from_secs(10), app.td_client.get_chat_history(chat_id, 100)).await {
|
||||
Ok(Ok(_)) => {
|
||||
// Сообщения уже сохранены в td_client.current_chat_messages
|
||||
// Загружаем недостающие reply info
|
||||
let _ = timeout(Duration::from_secs(5), app.td_client.fetch_missing_reply_info()).await;
|
||||
app.status_message = None;
|
||||
}
|
||||
Ok(Err(e)) => {
|
||||
@@ -161,11 +207,21 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Обычная отправка
|
||||
// Обычная отправка (или reply)
|
||||
let reply_to_id = app.replying_to_message_id;
|
||||
// Создаём ReplyInfo ДО отправки, пока сообщение точно доступно
|
||||
let reply_info = app.get_replying_to_message().map(|m| {
|
||||
crate::tdlib::client::ReplyInfo {
|
||||
message_id: m.id,
|
||||
sender_name: m.sender_name.clone(),
|
||||
text: m.content.clone(),
|
||||
}
|
||||
});
|
||||
app.message_input.clear();
|
||||
app.cursor_position = 0;
|
||||
app.replying_to_message_id = None;
|
||||
|
||||
match timeout(Duration::from_secs(5), app.td_client.send_message(chat_id, text)).await {
|
||||
match timeout(Duration::from_secs(5), app.td_client.send_message(chat_id, text, reply_to_id, reply_info)).await {
|
||||
Ok(Ok(sent_msg)) => {
|
||||
// Добавляем отправленное сообщение в список (с лимитом)
|
||||
app.td_client.push_message(sent_msg);
|
||||
@@ -193,7 +249,8 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
app.message_scroll_offset = 0;
|
||||
match timeout(Duration::from_secs(10), app.td_client.get_chat_history(chat_id, 100)).await {
|
||||
Ok(Ok(_)) => {
|
||||
// Сообщения уже сохранены в td_client.current_chat_messages
|
||||
// Загружаем недостающие reply info
|
||||
let _ = timeout(Duration::from_secs(5), app.td_client.fetch_missing_reply_info()).await;
|
||||
app.status_message = None;
|
||||
}
|
||||
Ok(Err(e)) => {
|
||||
@@ -211,7 +268,7 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Esc - отменить выбор/редактирование или закрыть чат
|
||||
// Esc - отменить выбор/редактирование/reply или закрыть чат
|
||||
if key.code == KeyCode::Esc {
|
||||
if app.is_selecting_message() {
|
||||
// Отменить выбор сообщения
|
||||
@@ -219,6 +276,9 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
} else if app.is_editing() {
|
||||
// Отменить редактирование
|
||||
app.cancel_editing();
|
||||
} else if app.is_replying() {
|
||||
// Отменить режим ответа
|
||||
app.cancel_reply();
|
||||
} else if app.selected_chat_id.is_some() {
|
||||
app.close_chat();
|
||||
}
|
||||
@@ -246,6 +306,14 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
}
|
||||
}
|
||||
}
|
||||
KeyCode::Char('r') | KeyCode::Char('к') => {
|
||||
// Начать режим ответа на выбранное сообщение
|
||||
app.start_reply_to_selected();
|
||||
}
|
||||
KeyCode::Char('f') | KeyCode::Char('а') => {
|
||||
// Начать режим пересылки
|
||||
app.start_forward_selected();
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user