1
0
mirror of https://gitlab.com/comunic/comunicapiv3 synced 2024-11-29 16:56:28 +00:00

Spawn a thread to send push notifications

This commit is contained in:
Pierre HUBERT 2021-04-16 08:35:14 +02:00
parent 5e3ffcbeda
commit 1567ae4241
2 changed files with 21 additions and 16 deletions

View File

@ -4,13 +4,13 @@
use std::collections::HashSet; use std::collections::HashSet;
use crate::data::conversation::ConvID;
use crate::data::error::{ExecError, Res}; use crate::data::error::{ExecError, Res};
use crate::data::user::UserID; use crate::data::user::UserID;
use crate::data::conversation::ConvID;
pub type ConvMessageID = u64; pub type ConvMessageID = u64;
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct ConversationMessageFile { pub struct ConversationMessageFile {
pub path: String, pub path: String,
pub size: u64, pub size: u64,
@ -19,19 +19,19 @@ pub struct ConversationMessageFile {
pub r#type: String, pub r#type: String,
} }
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct UserAddedAnotherUserToConversation { pub struct UserAddedAnotherUserToConversation {
pub user_who_added: UserID, pub user_who_added: UserID,
pub user_added: UserID, pub user_added: UserID,
} }
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct UserRemovedAnotherUserToConversation { pub struct UserRemovedAnotherUserToConversation {
pub user_who_removed: UserID, pub user_who_removed: UserID,
pub user_removed: UserID, pub user_removed: UserID,
} }
#[derive(Debug)] #[derive(Debug, Clone)]
pub enum ConversationServerMessageType { pub enum ConversationServerMessageType {
UserCreatedConversation(UserID), UserCreatedConversation(UserID),
UserAddedAnotherUserToConversation(UserAddedAnotherUserToConversation), UserAddedAnotherUserToConversation(UserAddedAnotherUserToConversation),
@ -98,7 +98,7 @@ impl ConversationServerMessageType {
} }
/// Information about a single conversation message /// Information about a single conversation message
#[derive(Debug)] #[derive(Debug, Clone)]
pub struct ConversationMessage { pub struct ConversationMessage {
pub id: ConvMessageID, pub id: ConvMessageID,
pub time_sent: u64, pub time_sent: u64,

View File

@ -169,21 +169,26 @@ pub fn cancel_conversation_notification(conv_id: ConvID, users: Option<Vec<UserI
/// Handle event. This method NEVER returns Err /// Handle event. This method NEVER returns Err
pub fn handle_event(e: &Event) -> Res { pub fn handle_event(e: &Event) -> Res {
if let Err(e) = handle_event_internal(e) {
eprintln!("Failed to create push notifications associated with event! {}", e);
}
Ok(())
}
fn handle_event_internal(e: &Event) -> Res {
match e { match e {
Event::NewConversationMessage(msg) => { Event::NewConversationMessage(msg) => {
create_conversation_notification(msg)?; let msg = (*msg).clone();
std::thread::spawn(move || {
if let Err(err) = create_conversation_notification(&msg) {
eprintln!("Failed to create push for conversation! {}", err);
}
});
} }
Event::SeenLastConversationMessage(user_id, conv_id) => { Event::SeenLastConversationMessage(user_id, conv_id) => {
cancel_conversation_notification(*conv_id, Some(vec![user_id.as_owned()]))?; let user_id = user_id.as_owned();
let conv_id = *conv_id;
std::thread::spawn(move || {
if let Err(e) = cancel_conversation_notification(conv_id, Some(vec![user_id])) {
eprintln!("Failed to cancel push conversation! {}", e);
}
});
} }
_ => {} _ => {}
} }