fixes
This commit is contained in:
@@ -39,6 +39,14 @@ pub struct App {
|
||||
// Delete confirmation
|
||||
/// ID сообщения для подтверждения удаления (показывает модалку)
|
||||
pub confirm_delete_message_id: Option<i64>,
|
||||
// Reply state
|
||||
/// ID сообщения, на которое отвечаем (None = обычная отправка)
|
||||
pub replying_to_message_id: Option<i64>,
|
||||
// Forward state
|
||||
/// ID сообщения для пересылки
|
||||
pub forwarding_message_id: Option<i64>,
|
||||
/// Режим выбора чата для пересылки
|
||||
pub is_selecting_forward_chat: bool,
|
||||
}
|
||||
|
||||
impl App {
|
||||
@@ -68,6 +76,9 @@ impl App {
|
||||
editing_message_id: None,
|
||||
selected_message_index: None,
|
||||
confirm_delete_message_id: None,
|
||||
replying_to_message_id: None,
|
||||
forwarding_message_id: None,
|
||||
is_selecting_forward_chat: false,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,6 +134,7 @@ impl App {
|
||||
self.message_scroll_offset = 0;
|
||||
self.editing_message_id = None;
|
||||
self.selected_message_index = None;
|
||||
self.replying_to_message_id = None;
|
||||
// Очищаем данные в TdClient
|
||||
self.td_client.current_chat_id = None;
|
||||
self.td_client.current_chat_messages.clear();
|
||||
@@ -306,4 +318,62 @@ impl App {
|
||||
pub fn is_confirm_delete_shown(&self) -> bool {
|
||||
self.confirm_delete_message_id.is_some()
|
||||
}
|
||||
|
||||
/// Начать режим ответа на выбранное сообщение
|
||||
pub fn start_reply_to_selected(&mut self) -> bool {
|
||||
if let Some(msg) = self.get_selected_message() {
|
||||
self.replying_to_message_id = Some(msg.id);
|
||||
self.selected_message_index = None;
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
/// Отменить режим ответа
|
||||
pub fn cancel_reply(&mut self) {
|
||||
self.replying_to_message_id = None;
|
||||
}
|
||||
|
||||
/// Проверить, находимся ли в режиме ответа
|
||||
pub fn is_replying(&self) -> bool {
|
||||
self.replying_to_message_id.is_some()
|
||||
}
|
||||
|
||||
/// Получить сообщение, на которое отвечаем
|
||||
pub fn get_replying_to_message(&self) -> Option<&crate::tdlib::client::MessageInfo> {
|
||||
self.replying_to_message_id.and_then(|id| {
|
||||
self.td_client.current_chat_messages.iter().find(|m| m.id == id)
|
||||
})
|
||||
}
|
||||
|
||||
/// Начать режим пересылки выбранного сообщения
|
||||
pub fn start_forward_selected(&mut self) -> bool {
|
||||
if let Some(msg) = self.get_selected_message() {
|
||||
self.forwarding_message_id = Some(msg.id);
|
||||
self.selected_message_index = None;
|
||||
self.is_selecting_forward_chat = true;
|
||||
// Сбрасываем выбор чата на первый
|
||||
self.chat_list_state.select(Some(0));
|
||||
return true;
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
/// Отменить режим пересылки
|
||||
pub fn cancel_forward(&mut self) {
|
||||
self.forwarding_message_id = None;
|
||||
self.is_selecting_forward_chat = false;
|
||||
}
|
||||
|
||||
/// Проверить, находимся ли в режиме выбора чата для пересылки
|
||||
pub fn is_forwarding(&self) -> bool {
|
||||
self.is_selecting_forward_chat && self.forwarding_message_id.is_some()
|
||||
}
|
||||
|
||||
/// Получить сообщение для пересылки
|
||||
pub fn get_forwarding_message(&self) -> Option<&crate::tdlib::client::MessageInfo> {
|
||||
self.forwarding_message_id.and_then(|id| {
|
||||
self.td_client.current_chat_messages.iter().find(|m| m.id == id)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user