mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-11-26 14:21:19 +00:00
* Check if post or comment are deleted first. Fixes #1864 * Refactoring delete apub. * Revert "Refactoring delete apub." This reverts commit ba2c3d06cfb870efe792f4b2541036265b425156.
This commit is contained in:
parent
1bec551945
commit
a83113935d
7 changed files with 59 additions and 56 deletions
|
@ -44,6 +44,11 @@ impl PerformCrud for DeleteComment {
|
|||
})
|
||||
.await??;
|
||||
|
||||
// Dont delete it if its already been deleted.
|
||||
if orig_comment.comment.deleted == data.deleted {
|
||||
return Err(ApiError::err_plain("couldnt_update_comment").into());
|
||||
}
|
||||
|
||||
check_community_ban(
|
||||
local_user_view.person.id,
|
||||
orig_comment.community.id,
|
||||
|
|
|
@ -36,6 +36,11 @@ impl PerformCrud for DeletePost {
|
|||
let post_id = data.post_id;
|
||||
let orig_post = blocking(context.pool(), move |conn| Post::read(conn, post_id)).await??;
|
||||
|
||||
// Dont delete it if its already been deleted.
|
||||
if orig_post.deleted == data.deleted {
|
||||
return Err(ApiError::err_plain("couldnt_update_post").into());
|
||||
}
|
||||
|
||||
check_community_ban(
|
||||
local_user_view.person.id,
|
||||
orig_post.community_id,
|
||||
|
|
|
@ -33,12 +33,7 @@ use lemmy_websocket::{
|
|||
use crate::{
|
||||
activities::{
|
||||
community::{announce::GetCommunity, send_to_community},
|
||||
deletion::{
|
||||
receive_delete_action,
|
||||
verify_delete_activity,
|
||||
DeletableObjects,
|
||||
WebsocketMessages,
|
||||
},
|
||||
deletion::{receive_delete_action, verify_delete_activity, DeletableObjects},
|
||||
generate_activity_id,
|
||||
verify_activity,
|
||||
verify_is_public,
|
||||
|
@ -87,19 +82,7 @@ impl ActivityHandler for Delete {
|
|||
};
|
||||
receive_remove_action(&self.actor, &self.object, reason, context, request_counter).await
|
||||
} else {
|
||||
receive_delete_action(
|
||||
&self.object,
|
||||
&self.actor,
|
||||
WebsocketMessages {
|
||||
community: UserOperationCrud::DeleteCommunity,
|
||||
post: UserOperationCrud::DeletePost,
|
||||
comment: UserOperationCrud::DeleteComment,
|
||||
},
|
||||
true,
|
||||
context,
|
||||
request_counter,
|
||||
)
|
||||
.await
|
||||
receive_delete_action(&self.object, &self.actor, true, context, request_counter).await
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,19 +143,12 @@ async fn verify_delete_activity_post_or_comment(
|
|||
Ok(())
|
||||
}
|
||||
|
||||
struct WebsocketMessages {
|
||||
community: UserOperationCrud,
|
||||
post: UserOperationCrud,
|
||||
comment: UserOperationCrud,
|
||||
}
|
||||
|
||||
/// Write deletion or restoring of an object to the database, and send websocket message.
|
||||
/// TODO: we should do something similar for receive_remove_action(), but its much more complicated
|
||||
/// because of the mod log
|
||||
async fn receive_delete_action(
|
||||
object: &Url,
|
||||
actor: &ObjectId<ApubPerson>,
|
||||
ws_messages: WebsocketMessages,
|
||||
deleted: bool,
|
||||
context: &LemmyContext,
|
||||
request_counter: &mut i32,
|
||||
|
@ -172,21 +165,44 @@ async fn receive_delete_action(
|
|||
Community::update_deleted(conn, community.id, deleted)
|
||||
})
|
||||
.await??;
|
||||
send_community_ws_message(community.id, ws_messages.community, None, None, context).await?;
|
||||
send_community_ws_message(
|
||||
community.id,
|
||||
UserOperationCrud::DeleteCommunity,
|
||||
None,
|
||||
None,
|
||||
context,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
DeletableObjects::Post(post) => {
|
||||
let deleted_post = blocking(context.pool(), move |conn| {
|
||||
Post::update_deleted(conn, post.id, deleted)
|
||||
})
|
||||
.await??;
|
||||
send_post_ws_message(deleted_post.id, ws_messages.post, None, None, context).await?;
|
||||
if deleted != post.deleted {
|
||||
let deleted_post = blocking(context.pool(), move |conn| {
|
||||
Post::update_deleted(conn, post.id, deleted)
|
||||
})
|
||||
.await??;
|
||||
send_post_ws_message(
|
||||
deleted_post.id,
|
||||
UserOperationCrud::DeletePost,
|
||||
None,
|
||||
None,
|
||||
context,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
DeletableObjects::Comment(comment) => {
|
||||
let deleted_comment = blocking(context.pool(), move |conn| {
|
||||
Comment::update_deleted(conn, comment.id, deleted)
|
||||
})
|
||||
.await??;
|
||||
send_comment_ws_message_simple(deleted_comment.id, ws_messages.comment, context).await?;
|
||||
if deleted != comment.deleted {
|
||||
let deleted_comment = blocking(context.pool(), move |conn| {
|
||||
Comment::update_deleted(conn, comment.id, deleted)
|
||||
})
|
||||
.await??;
|
||||
send_comment_ws_message_simple(
|
||||
deleted_comment.id,
|
||||
UserOperationCrud::DeleteComment,
|
||||
context,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
|
|
|
@ -18,12 +18,7 @@ use lemmy_websocket::{
|
|||
use crate::{
|
||||
activities::{
|
||||
community::{announce::GetCommunity, send_to_community},
|
||||
deletion::{
|
||||
receive_delete_action,
|
||||
verify_delete_activity,
|
||||
DeletableObjects,
|
||||
WebsocketMessages,
|
||||
},
|
||||
deletion::{receive_delete_action, verify_delete_activity, DeletableObjects},
|
||||
generate_activity_id,
|
||||
verify_activity,
|
||||
verify_is_public,
|
||||
|
@ -69,11 +64,6 @@ impl ActivityHandler for UndoDelete {
|
|||
receive_delete_action(
|
||||
&self.object.object,
|
||||
&self.actor,
|
||||
WebsocketMessages {
|
||||
community: UserOperationCrud::EditCommunity,
|
||||
post: UserOperationCrud::EditPost,
|
||||
comment: UserOperationCrud::EditComment,
|
||||
},
|
||||
false,
|
||||
context,
|
||||
request_counter,
|
||||
|
|
|
@ -81,10 +81,12 @@ impl ApubObject for ApubComment {
|
|||
}
|
||||
|
||||
async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError> {
|
||||
blocking(context.pool(), move |conn| {
|
||||
Comment::update_deleted(conn, self.id, true)
|
||||
})
|
||||
.await??;
|
||||
if !self.deleted {
|
||||
blocking(context.pool(), move |conn| {
|
||||
Comment::update_deleted(conn, self.id, true)
|
||||
})
|
||||
.await??;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
@ -76,10 +76,12 @@ impl ApubObject for ApubPost {
|
|||
}
|
||||
|
||||
async fn delete(self, context: &LemmyContext) -> Result<(), LemmyError> {
|
||||
blocking(context.pool(), move |conn| {
|
||||
Post::update_deleted(conn, self.id, true)
|
||||
})
|
||||
.await??;
|
||||
if !self.deleted {
|
||||
blocking(context.pool(), move |conn| {
|
||||
Post::update_deleted(conn, self.id, true)
|
||||
})
|
||||
.await??;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue