mirror of
https://github.com/LemmyNet/lemmy.git
synced 2024-12-28 19:00:31 +00:00
mark parent as read on reply (#1819)
* mark parent as read on reply * mark as read only if you are the recipient * mark mentions as read on reply
This commit is contained in:
parent
b96ce81f89
commit
e06cd9c0ac
2 changed files with 50 additions and 3 deletions
|
@ -19,8 +19,12 @@ use lemmy_apub::{
|
|||
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},
|
||||
|
@ -168,6 +172,33 @@ impl PerformCrud for CreateComment {
|
|||
.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,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
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;
|
||||
|
@ -44,6 +44,11 @@ pub trait PersonMention_ {
|
|||
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 {
|
||||
|
@ -71,6 +76,17 @@ 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)]
|
||||
|
|
Loading…
Reference in a new issue