fixes
This commit is contained in:
@@ -15,14 +15,70 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
app.status_message = None;
|
||||
return;
|
||||
}
|
||||
KeyCode::Char('s') if has_ctrl => {
|
||||
// Ctrl+S - начать поиск (только если чат не открыт)
|
||||
if app.selected_chat_id.is_none() {
|
||||
app.start_search();
|
||||
}
|
||||
return;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
||||
// Режим поиска
|
||||
if app.is_searching {
|
||||
match key.code {
|
||||
KeyCode::Esc => {
|
||||
app.cancel_search();
|
||||
}
|
||||
KeyCode::Enter => {
|
||||
// Выбрать чат из отфильтрованного списка
|
||||
app.select_filtered_chat();
|
||||
if let Some(chat_id) = app.get_selected_chat_id() {
|
||||
app.status_message = Some("Загрузка сообщений...".to_string());
|
||||
app.message_scroll_offset = 0;
|
||||
match timeout(Duration::from_secs(5), app.td_client.get_chat_history(chat_id, 50)).await {
|
||||
Ok(Ok(messages)) => {
|
||||
app.current_messages = messages;
|
||||
app.status_message = None;
|
||||
}
|
||||
Ok(Err(e)) => {
|
||||
app.error_message = Some(e);
|
||||
app.status_message = None;
|
||||
}
|
||||
Err(_) => {
|
||||
app.error_message = Some("Таймаут загрузки сообщений".to_string());
|
||||
app.status_message = None;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
KeyCode::Backspace => {
|
||||
app.search_query.pop();
|
||||
// Сбрасываем выделение при изменении запроса
|
||||
app.chat_list_state.select(Some(0));
|
||||
}
|
||||
KeyCode::Down => {
|
||||
app.next_filtered_chat();
|
||||
}
|
||||
KeyCode::Up => {
|
||||
app.previous_filtered_chat();
|
||||
}
|
||||
KeyCode::Char(c) => {
|
||||
app.search_query.push(c);
|
||||
// Сбрасываем выделение при изменении запроса
|
||||
app.chat_list_state.select(Some(0));
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Cmd+j/k - навигация (работает и в списке чатов, и для скролла сообщений)
|
||||
if has_super {
|
||||
match key.code {
|
||||
// Cmd+j - вниз (следующий чат ИЛИ скролл вниз)
|
||||
KeyCode::Char('j') | KeyCode::Char('д') | KeyCode::Down => {
|
||||
// Cmd+Down - вниз (следующий чат ИЛИ скролл вниз)
|
||||
KeyCode::Down => {
|
||||
if app.selected_chat_id.is_some() {
|
||||
// В открытом чате - скролл вниз (к новым сообщениям)
|
||||
if app.message_scroll_offset > 0 {
|
||||
@@ -33,8 +89,8 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
app.next_chat();
|
||||
}
|
||||
}
|
||||
// Cmd+k - вверх (предыдущий чат ИЛИ скролл вверх)
|
||||
KeyCode::Char('k') | KeyCode::Char('л') | KeyCode::Up => {
|
||||
// Cmd+Up - вверх (предыдущий чат ИЛИ скролл вверх)
|
||||
KeyCode::Up => {
|
||||
if app.selected_chat_id.is_some() {
|
||||
// В открытом чате - скролл вверх (к старым сообщениям)
|
||||
app.message_scroll_offset += 3;
|
||||
@@ -69,13 +125,6 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Ctrl+k - в первый чат (только в режиме списка)
|
||||
if has_ctrl && matches!(key.code, KeyCode::Char('k') | KeyCode::Char('л')) {
|
||||
if app.selected_chat_id.is_none() {
|
||||
app.select_first_chat();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Enter - открыть чат или отправить сообщение
|
||||
if key.code == KeyCode::Enter {
|
||||
@@ -151,14 +200,12 @@ pub async fn handle(app: &mut App, key: KeyEvent) {
|
||||
_ => {}
|
||||
}
|
||||
} else {
|
||||
// В режиме списка чатов - навигация j/k и переключение папок
|
||||
// В режиме списка чатов - навигация стрелками и переключение папок
|
||||
match key.code {
|
||||
// j или д - следующий чат
|
||||
KeyCode::Char('j') | KeyCode::Char('д') | KeyCode::Down => {
|
||||
KeyCode::Down => {
|
||||
app.next_chat();
|
||||
}
|
||||
// k или л - предыдущий чат
|
||||
KeyCode::Char('k') | KeyCode::Char('л') | KeyCode::Up => {
|
||||
KeyCode::Up => {
|
||||
app.previous_chat();
|
||||
}
|
||||
// Цифры - переключение папок
|
||||
|
||||
Reference in New Issue
Block a user