]> Untitled Git - lemmy.git/blobdiff - crates/api_crud/src/private_message/create.rs
Implement reports for private messages (#2433)
[lemmy.git] / crates / api_crud / src / private_message / create.rs
index c7bca4e0249f401555760144d8a8960608741e44..278031311ed938504c0d1a82731bb687e8e71735 100644 (file)
@@ -1,35 +1,36 @@
 use crate::PerformCrud;
 use actix_web::web::Data;
 use lemmy_api_common::{
-  blocking,
-  check_person_block,
-  get_local_user_view_from_jwt,
-  person::{CreatePrivateMessage, PrivateMessageResponse},
+  private_message::{CreatePrivateMessage, PrivateMessageResponse},
+  utils::{
+    blocking,
+    check_person_block,
+    get_interface_language,
+    get_local_user_view_from_jwt,
+    send_email_to_user,
+  },
 };
 use lemmy_apub::{
-  activities::{
-    private_message::create_or_update::CreateOrUpdatePrivateMessage,
+  generate_local_apub_endpoint,
+  protocol::activities::{
+    create_or_update::private_message::CreateOrUpdatePrivateMessage,
     CreateOrUpdateType,
   },
-  generate_local_apub_endpoint,
   EndpointType,
 };
 use lemmy_db_schema::{
   source::private_message::{PrivateMessage, PrivateMessageForm},
   traits::Crud,
 };
-use lemmy_db_views::local_user_view::LocalUserView;
-use lemmy_utils::{utils::remove_slurs, ApiError, ConnectionId, LemmyError};
-use lemmy_websocket::{
-  send::{send_email_to_user, send_pm_ws_message},
-  LemmyContext,
-  UserOperationCrud,
-};
+use lemmy_db_views::structs::LocalUserView;
+use lemmy_utils::{error::LemmyError, utils::remove_slurs, ConnectionId};
+use lemmy_websocket::{send::send_pm_ws_message, LemmyContext, UserOperationCrud};
 
 #[async_trait::async_trait(?Send)]
 impl PerformCrud for CreatePrivateMessage {
   type Response = PrivateMessageResponse;
 
+  #[tracing::instrument(skip(self, context, websocket_id))]
   async fn perform(
     &self,
     context: &Data<LemmyContext>,
@@ -58,7 +59,10 @@ impl PerformCrud for CreatePrivateMessage {
     {
       Ok(private_message) => private_message,
       Err(e) => {
-        return Err(ApiError::err("couldnt_create_private_message", e).into());
+        return Err(LemmyError::from_error_message(
+          e,
+          "couldnt_create_private_message",
+        ));
       }
     };
 
@@ -80,10 +84,10 @@ impl PerformCrud for CreatePrivateMessage {
       },
     )
     .await?
-    .map_err(|e| ApiError::err("couldnt_create_private_message", e))?;
+    .map_err(|e| e.with_message("couldnt_create_private_message"))?;
 
     CreateOrUpdatePrivateMessage::send(
-      &updated_private_message.into(),
+      updated_private_message.into(),
       &local_user_view.person.into(),
       CreateOrUpdateType::Create,
       context,
@@ -105,12 +109,17 @@ impl PerformCrud for CreatePrivateMessage {
         LocalUserView::read_person(conn, recipient_id)
       })
       .await??;
+      let lang = get_interface_language(&local_recipient);
+      let inbox_link = format!("{}/inbox", context.settings().get_protocol_and_hostname());
       send_email_to_user(
         &local_recipient,
-        "Private Message from",
-        "Private Message",
-        &content_slurs_removed,
-        &context.settings(),
+        &lang.notification_private_message_subject(&local_recipient.person.name),
+        &lang.notification_private_message_body(
+          &inbox_link,
+          &content_slurs_removed,
+          &local_recipient.person.name,
+        ),
+        context.settings(),
       );
     }