mirror of
https://gitlab.com/comunic/comunicapiv3
synced 2024-11-22 13:29:21 +00:00
Spawn a thread to send push notifications
This commit is contained in:
parent
5e3ffcbeda
commit
1567ae4241
@ -4,13 +4,13 @@
|
||||
|
||||
use std::collections::HashSet;
|
||||
|
||||
use crate::data::conversation::ConvID;
|
||||
use crate::data::error::{ExecError, Res};
|
||||
use crate::data::user::UserID;
|
||||
use crate::data::conversation::ConvID;
|
||||
|
||||
pub type ConvMessageID = u64;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ConversationMessageFile {
|
||||
pub path: String,
|
||||
pub size: u64,
|
||||
@ -19,19 +19,19 @@ pub struct ConversationMessageFile {
|
||||
pub r#type: String,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct UserAddedAnotherUserToConversation {
|
||||
pub user_who_added: UserID,
|
||||
pub user_added: UserID,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct UserRemovedAnotherUserToConversation {
|
||||
pub user_who_removed: UserID,
|
||||
pub user_removed: UserID,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub enum ConversationServerMessageType {
|
||||
UserCreatedConversation(UserID),
|
||||
UserAddedAnotherUserToConversation(UserAddedAnotherUserToConversation),
|
||||
@ -98,7 +98,7 @@ impl ConversationServerMessageType {
|
||||
}
|
||||
|
||||
/// Information about a single conversation message
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ConversationMessage {
|
||||
pub id: ConvMessageID,
|
||||
pub time_sent: u64,
|
||||
|
@ -169,21 +169,26 @@ pub fn cancel_conversation_notification(conv_id: ConvID, users: Option<Vec<UserI
|
||||
|
||||
/// Handle event. This method NEVER returns Err
|
||||
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 {
|
||||
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) => {
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
_ => {}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user