1
0
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:
2021-03-08 18:45:10 +01:00
parent 1782647f8c
commit 4014fc1454
7 changed files with 68 additions and 5 deletions

@ -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),