add find messages
This commit is contained in:
@@ -57,6 +57,15 @@ pub struct App {
|
||||
pub pinned_messages: Vec<crate::tdlib::client::MessageInfo>,
|
||||
/// Индекс выбранного pinned сообщения
|
||||
pub selected_pinned_index: usize,
|
||||
// Message search mode
|
||||
/// Режим поиска по сообщениям
|
||||
pub is_message_search_mode: bool,
|
||||
/// Поисковый запрос
|
||||
pub message_search_query: String,
|
||||
/// Результаты поиска
|
||||
pub message_search_results: Vec<crate::tdlib::client::MessageInfo>,
|
||||
/// Индекс выбранного результата
|
||||
pub selected_search_result_index: usize,
|
||||
}
|
||||
|
||||
impl App {
|
||||
@@ -93,6 +102,10 @@ impl App {
|
||||
is_pinned_mode: false,
|
||||
pinned_messages: Vec::new(),
|
||||
selected_pinned_index: 0,
|
||||
is_message_search_mode: false,
|
||||
message_search_query: String::new(),
|
||||
message_search_results: Vec::new(),
|
||||
selected_search_result_index: 0,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -159,6 +172,11 @@ impl App {
|
||||
self.td_client.current_chat_messages.clear();
|
||||
self.td_client.typing_status = None;
|
||||
self.td_client.current_pinned_message = None;
|
||||
// Сбрасываем режим поиска
|
||||
self.is_message_search_mode = false;
|
||||
self.message_search_query.clear();
|
||||
self.message_search_results.clear();
|
||||
self.selected_search_result_index = 0;
|
||||
}
|
||||
|
||||
/// Начать выбор сообщения для редактирования (при стрелке вверх в пустом инпуте)
|
||||
@@ -444,4 +462,59 @@ impl App {
|
||||
pub fn get_selected_pinned_id(&self) -> Option<i64> {
|
||||
self.get_selected_pinned().map(|m| m.id)
|
||||
}
|
||||
|
||||
// === Message Search Mode ===
|
||||
|
||||
/// Проверить, активен ли режим поиска по сообщениям
|
||||
pub fn is_message_search_mode(&self) -> bool {
|
||||
self.is_message_search_mode
|
||||
}
|
||||
|
||||
/// Войти в режим поиска по сообщениям
|
||||
pub fn enter_message_search_mode(&mut self) {
|
||||
self.is_message_search_mode = true;
|
||||
self.message_search_query.clear();
|
||||
self.message_search_results.clear();
|
||||
self.selected_search_result_index = 0;
|
||||
}
|
||||
|
||||
/// Выйти из режима поиска
|
||||
pub fn exit_message_search_mode(&mut self) {
|
||||
self.is_message_search_mode = false;
|
||||
self.message_search_query.clear();
|
||||
self.message_search_results.clear();
|
||||
self.selected_search_result_index = 0;
|
||||
}
|
||||
|
||||
/// Установить результаты поиска
|
||||
pub fn set_search_results(&mut self, results: Vec<crate::tdlib::client::MessageInfo>) {
|
||||
self.message_search_results = results;
|
||||
self.selected_search_result_index = 0;
|
||||
}
|
||||
|
||||
/// Выбрать предыдущий результат (вверх)
|
||||
pub fn select_previous_search_result(&mut self) {
|
||||
if self.selected_search_result_index > 0 {
|
||||
self.selected_search_result_index -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
/// Выбрать следующий результат (вниз)
|
||||
pub fn select_next_search_result(&mut self) {
|
||||
if !self.message_search_results.is_empty()
|
||||
&& self.selected_search_result_index < self.message_search_results.len() - 1
|
||||
{
|
||||
self.selected_search_result_index += 1;
|
||||
}
|
||||
}
|
||||
|
||||
/// Получить текущий выбранный результат
|
||||
pub fn get_selected_search_result(&self) -> Option<&crate::tdlib::client::MessageInfo> {
|
||||
self.message_search_results.get(self.selected_search_result_index)
|
||||
}
|
||||
|
||||
/// Получить ID выбранного результата для перехода
|
||||
pub fn get_selected_search_result_id(&self) -> Option<i64> {
|
||||
self.get_selected_search_result().map(|m| m.id)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user