1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2025-06-20 16:35:17 +00:00

Notify about notifications number update

This commit is contained in:
2021-02-06 11:58:22 +01:00
parent 3e4d2872ea
commit dab76a3677
4 changed files with 74 additions and 9 deletions

View File

@ -6,11 +6,15 @@ use crate::api_data::notification_api::NotificationAPI;
use crate::api_data::res_count_all_unreads::ResCountAllUnread;
use crate::api_data::res_number_unread_notifications::ResNumberUnreadNotifications;
use crate::controllers::routes::RequestResult;
use crate::controllers::user_ws_controller;
use crate::data::base_request_handler::BaseRequestHandler;
use crate::data::error::ResultBoxError;
use crate::data::error::{Res, ResultBoxError};
use crate::data::http_request_handler::HttpRequestHandler;
use crate::data::notification::Notification;
use crate::helpers::{conversations_helper, friends_helper, notifications_helper};
use crate::data::user::UserID;
use crate::data::user_ws_message::UserWsMessage;
use crate::helpers::{conversations_helper, events_helper, friends_helper, notifications_helper};
use crate::helpers::events_helper::Event;
impl HttpRequestHandler {
/// Get the id of a notification included in the request
@ -79,4 +83,30 @@ pub fn delete_all(r: &mut HttpRequestHandler) -> RequestResult {
notifications_helper::delete_all_user(r.user_id_ref()?)?;
r.success("Notifications deleted.")
}
/// Send new notifications number to a specific user
pub fn send_new_notifications_number(user_id: &UserID) -> Res {
if !user_ws_controller::is_user_connected(user_id) {
return Ok(());
}
user_ws_controller::send_message_to_user(
&UserWsMessage::no_id_message("number_notifs", notifications_helper::count_unread(user_id)?)?,
user_id,
)
}
/// Events handler
pub fn handle_event(e: &events_helper::Event) -> Res {
match e {
Event::UpdatedNotificationsNumber(users) => {
for user in users.iter() {
send_new_notifications_number(user)?;
}
}
_ => {}
}
Ok(())
}

View File

@ -486,6 +486,23 @@ pub fn send_message_to_users(msg: &UserWsMessage, users: &Vec<UserID>) -> Res {
Ok(())
}
/// Send a message to a specific user
pub fn send_message_to_user(msg: &UserWsMessage, user: &UserID) -> Res {
let connections = get_ws_connections_list()
.lock()
.unwrap()
.iter()
.filter(|f| user == &f.user_id)
.map(|f| f.session.clone())
.collect::<Vec<Addr<WsSession>>>();
for con in connections {
send_message(con, msg)?;
}
Ok(())
}
/// Send a message to specific users
pub fn send_message_to_specific_connections<F, M, A>(filter: F, msg_generator: M, after_send: Option<A>) -> Res
where F: Fn(&WsConnection) -> bool,