generate_apub_endpoint,
EndpointType,
};
-use lemmy_db_queries::{source::comment::Comment_, Crud, Likeable};
-use lemmy_db_schema::source::comment::*;
+use lemmy_db_queries::{
+ source::{comment::Comment_, person_mention::PersonMention_},
+ Crud,
+ Likeable,
+};
+use lemmy_db_schema::source::{comment::*, person_mention::PersonMention};
use lemmy_db_views::comment_view::CommentView;
use lemmy_utils::{
utils::{remove_slurs, scrape_text_for_mentions},
.await?
.map_err(|_| ApiError::err("couldnt_update_comment"))?;
}
+ // If its a reply, mark the parent as read
+ if let Some(parent_id) = data.parent_id {
+ let parent_comment = blocking(context.pool(), move |conn| {
+ CommentView::read(conn, parent_id, Some(person_id))
+ })
+ .await??;
+ if local_user_view.person.id == parent_comment.get_recipient_id() {
+ blocking(context.pool(), move |conn| {
+ Comment::update_read(conn, parent_id, true)
+ })
+ .await?
+ .map_err(|_| ApiError::err("couldnt_update_parent_comment"))?;
+ }
+ // If the parent has PersonMentions mark them as read too
+ let person_id = local_user_view.person.id;
+ let person_mention = blocking(context.pool(), move |conn| {
+ PersonMention::read_by_comment_and_person(conn, parent_id, person_id)
+ })
+ .await?;
+ if let Ok(mention) = person_mention {
+ blocking(context.pool(), move |conn| {
+ PersonMention::update_read(conn, mention.id, true)
+ })
+ .await?
+ .map_err(|_| ApiError::err("couldnt_update_person_mentions"))?;
+ }
+ }
send_comment_ws_message(
inserted_comment.id,
use crate::Crud;
use diesel::{dsl::*, result::Error, *};
-use lemmy_db_schema::{source::person_mention::*, PersonId, PersonMentionId};
+use lemmy_db_schema::{source::person_mention::*, CommentId, PersonId, PersonMentionId};
impl Crud for PersonMention {
type Form = PersonMentionForm;
conn: &PgConnection,
for_recipient_id: PersonId,
) -> Result<Vec<PersonMention>, Error>;
+ fn read_by_comment_and_person(
+ conn: &PgConnection,
+ for_comment_id: CommentId,
+ for_recipient_id: PersonId,
+ ) -> Result<PersonMention, Error>;
}
impl PersonMention_ for PersonMention {
.set(read.eq(true))
.get_results::<Self>(conn)
}
+ fn read_by_comment_and_person(
+ conn: &PgConnection,
+ for_comment_id: CommentId,
+ for_recipient_id: PersonId,
+ ) -> Result<Self, Error> {
+ use lemmy_db_schema::schema::person_mention::dsl::*;
+ person_mention
+ .filter(comment_id.eq(for_comment_id))
+ .filter(recipient_id.eq(for_recipient_id))
+ .first::<Self>(conn)
+ }
}
#[cfg(test)]