summaryrefslogtreecommitdiffstats
path: root/server/src/api/user.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/api/user.rs')
-rw-r--r--server/src/api/user.rs60
1 files changed, 50 insertions, 10 deletions
diff --git a/server/src/api/user.rs b/server/src/api/user.rs
index ff2760a5..b5336609 100644
--- a/server/src/api/user.rs
+++ b/server/src/api/user.rs
@@ -186,7 +186,7 @@ pub struct PrivateMessagesResponse {
#[derive(Serialize, Deserialize, Clone)]
pub struct PrivateMessageResponse {
- message: PrivateMessageView,
+ pub message: PrivateMessageView,
}
#[derive(Serialize, Deserialize, Debug)]
@@ -861,12 +861,15 @@ impl Perform for Oper<MarkAllAsRead> {
for message in &messages {
let private_message_form = PrivateMessageForm {
- content: None,
+ content: message.to_owned().content,
creator_id: message.to_owned().creator_id,
recipient_id: message.to_owned().recipient_id,
deleted: None,
read: Some(true),
updated: None,
+ ap_id: message.to_owned().ap_id,
+ local: message.local,
+ published: None,
};
let _updated_message = match PrivateMessage::update(&conn, message.id, &private_message_form)
@@ -1034,19 +1037,23 @@ impl Perform for Oper<CreatePrivateMessage> {
let conn = pool.get()?;
// Check for a site ban
- if UserView::read(&conn, user_id)?.banned {
+ let user = User_::read(&conn, user_id)?;
+ if user.banned {
return Err(APIError::err("site_ban").into());
}
let content_slurs_removed = remove_slurs(&data.content.to_owned());
let private_message_form = PrivateMessageForm {
- content: Some(content_slurs_removed.to_owned()),
+ content: content_slurs_removed.to_owned(),
creator_id: user_id,
recipient_id: data.recipient_id,
deleted: None,
read: None,
updated: None,
+ ap_id: "changeme".into(),
+ local: true,
+ published: None,
};
let inserted_private_message = match PrivateMessage::create(&conn, &private_message_form) {
@@ -1056,6 +1063,14 @@ impl Perform for Oper<CreatePrivateMessage> {
}
};
+ let updated_private_message =
+ match PrivateMessage::update_ap_id(&conn, inserted_private_message.id) {
+ Ok(private_message) => private_message,
+ Err(_e) => return Err(APIError::err("couldnt_create_private_message").into()),
+ };
+
+ updated_private_message.send_create(&user, &conn)?;
+
// Send notifications to the recipient
let recipient_user = User_::read(&conn, data.recipient_id)?;
if recipient_user.send_notifications_to_email {
@@ -1099,7 +1114,7 @@ impl Perform for Oper<EditPrivateMessage> {
fn perform(
&self,
pool: Pool<ConnectionManager<PgConnection>>,
- _websocket_info: Option<WebsocketInfo>,
+ websocket_info: Option<WebsocketInfo>,
) -> Result<PrivateMessageResponse, Error> {
let data: &EditPrivateMessage = &self.data;
@@ -1115,7 +1130,8 @@ impl Perform for Oper<EditPrivateMessage> {
let orig_private_message = PrivateMessage::read(&conn, data.edit_id)?;
// Check for a site ban
- if UserView::read(&conn, user_id)?.banned {
+ let user = User_::read(&conn, user_id)?;
+ if user.banned {
return Err(APIError::err("site_ban").into());
}
@@ -1127,8 +1143,8 @@ impl Perform for Oper<EditPrivateMessage> {
}
let content_slurs_removed = match &data.content {
- Some(content) => Some(remove_slurs(content)),
- None => None,
+ Some(content) => remove_slurs(content),
+ None => orig_private_message.content,
};
let private_message_form = PrivateMessageForm {
@@ -1142,17 +1158,41 @@ impl Perform for Oper<EditPrivateMessage> {
} else {
Some(naive_now())
},
+ ap_id: orig_private_message.ap_id,
+ local: orig_private_message.local,
+ published: None,
};
- let _updated_private_message =
+ let updated_private_message =
match PrivateMessage::update(&conn, data.edit_id, &private_message_form) {
Ok(private_message) => private_message,
Err(_e) => return Err(APIError::err("couldnt_update_private_message").into()),
};
+ if let Some(deleted) = data.deleted.to_owned() {
+ if deleted {
+ updated_private_message.send_delete(&user, &conn)?;
+ } else {
+ updated_private_message.send_undo_delete(&user, &conn)?;
+ }
+ } else {
+ updated_private_message.send_update(&user, &conn)?;
+ }
+
let message = PrivateMessageView::read(&conn, data.edit_id)?;
- Ok(PrivateMessageResponse { message })
+ let res = PrivateMessageResponse { message };
+
+ if let Some(ws) = websocket_info {
+ ws.chatserver.do_send(SendUserRoomMessage {
+ op: UserOperation::EditPrivateMessage,
+ response: res.clone(),
+ recipient_id: orig_private_message.recipient_id,
+ my_id: ws.id,
+ });
+ }
+
+ Ok(res)
}
}