mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2025-07-16 04:08:04 +00:00
Propagate user is writing message event
This commit is contained in:
@ -7,10 +7,11 @@ use std::collections::HashSet;
|
||||
use crate::api_data::conversation_api::ConversationAPI;
|
||||
use crate::api_data::conversation_message_api::ConversationMessageAPI;
|
||||
use crate::api_data::list_unread_conversations_api::UnreadConversationAPI;
|
||||
use crate::api_data::remove_user_from_conv_message::RemovedUserFromConversationMessage;
|
||||
use crate::api_data::removed_user_from_conv_message::RemovedUserFromConversationMessage;
|
||||
use crate::api_data::res_count_unread_conversations::ResultCountUnreadConversations;
|
||||
use crate::api_data::res_create_conversation::ResCreateConversation;
|
||||
use crate::api_data::res_find_private_conversations::ResFindPrivateConversations;
|
||||
use crate::api_data::user_is_writing_message_in_conversation::UserIsWritingMessageInConversation;
|
||||
use crate::constants::{ALLOWED_CONVERSATION_FILES_TYPES, CONVERSATION_FILES_MAX_SIZE, MAX_CONVERSATION_MESSAGE_LENGTH, MIN_CONVERSATION_MESSAGE_LENGTH};
|
||||
use crate::controllers::user_ws_controller;
|
||||
use crate::data::base_request_handler::{BaseRequestHandler, RequestValue};
|
||||
@ -22,6 +23,7 @@ use crate::data::new_conversation::NewConversation;
|
||||
use crate::data::new_conversation_message::NewConversationMessage;
|
||||
use crate::data::user_ws_connection::UserWsConnection;
|
||||
use crate::data::user_ws_message::UserWsMessage;
|
||||
use crate::data::user_ws_request_handler::UserWsRequestHandler;
|
||||
use crate::helpers::{conversations_helper, events_helper};
|
||||
use crate::helpers::events_helper::Event;
|
||||
use crate::routes::RequestResult;
|
||||
@ -468,6 +470,18 @@ pub fn delete_message(r: &mut HttpRequestHandler) -> RequestResult {
|
||||
r.success("The message has been successfully deleted!")
|
||||
}
|
||||
|
||||
/// A user is writing a message in a conversation
|
||||
pub fn member_is_writing(r: &mut UserWsRequestHandler) -> RequestResult {
|
||||
let conv_id = r.post_registered_conv_id("convID")?;
|
||||
|
||||
// Propagate event
|
||||
events_helper::propagate_event(
|
||||
&Event::UserIsWritingMessageInConversation(r.user_id_ref()?, conv_id)
|
||||
)?;
|
||||
|
||||
r.ok()
|
||||
}
|
||||
|
||||
/// Events handler
|
||||
pub fn handle_event(e: &events_helper::Event) -> Res {
|
||||
match e {
|
||||
@ -485,6 +499,14 @@ pub fn handle_event(e: &events_helper::Event) -> Res {
|
||||
}
|
||||
}
|
||||
|
||||
Event::UserIsWritingMessageInConversation(user_id, conv_id) => {
|
||||
user_ws_controller::send_message_to_specific_connections(
|
||||
|s| s.conversations.contains(conv_id) && s.user_id() != user_id,
|
||||
|_| UserWsMessage::no_id_message("writing_message_in_conv", UserIsWritingMessageInConversation::new(user_id, *conv_id)),
|
||||
None::<fn(&_) -> _>,
|
||||
)?;
|
||||
}
|
||||
|
||||
Event::NewConversationMessage(msg) => {
|
||||
user_ws_controller::send_message_to_specific_connections(
|
||||
|f| f.conversations.contains(&msg.conv_id),
|
||||
|
Reference in New Issue
Block a user