]> Untitled Git - lemmy.git/blob - crates/apub/src/activities/private_message/mod.rs
0c0557286600cab177671114f21ffb8f0a243e35
[lemmy.git] / crates / apub / src / activities / private_message / mod.rs
1 use lemmy_api_common::{blocking, person::PrivateMessageResponse};
2 use lemmy_db_schema::PrivateMessageId;
3 use lemmy_db_views::{local_user_view::LocalUserView, private_message_view::PrivateMessageView};
4 use lemmy_utils::LemmyError;
5 use lemmy_websocket::{messages::SendUserRoomMessage, LemmyContext, UserOperationCrud};
6
7 pub mod create_or_update;
8 pub mod delete;
9 pub mod undo_delete;
10
11 async fn send_websocket_message(
12   private_message_id: PrivateMessageId,
13   op: UserOperationCrud,
14   context: &LemmyContext,
15 ) -> Result<(), LemmyError> {
16   let message = blocking(context.pool(), move |conn| {
17     PrivateMessageView::read(conn, private_message_id)
18   })
19   .await??;
20   let res = PrivateMessageResponse {
21     private_message_view: message,
22   };
23
24   // Send notifications to the local recipient, if one exists
25   let recipient_id = res.private_message_view.recipient.id;
26   let local_recipient_id = blocking(context.pool(), move |conn| {
27     LocalUserView::read_person(conn, recipient_id)
28   })
29   .await??
30   .local_user
31   .id;
32
33   context.chat_server().do_send(SendUserRoomMessage {
34     op,
35     response: res,
36     local_recipient_id,
37     websocket_id: None,
38   });
39
40   Ok(())
41 }