fix: check user show_nsfw in community timeline
This commit is contained in:
parent
612fbf5eb4
commit
958979cfa1
4 changed files with 23 additions and 4 deletions
|
@ -478,7 +478,10 @@ pub async fn community_posts_request(
|
||||||
None => return Json(Error::NotAllowed.into()),
|
None => return Json(Error::NotAllowed.into()),
|
||||||
};
|
};
|
||||||
|
|
||||||
match data.get_posts_by_community(id, 12, props.page).await {
|
match data
|
||||||
|
.get_posts_by_community(id, 12, props.page, &Some(user.clone()))
|
||||||
|
.await
|
||||||
|
{
|
||||||
Ok(posts) => {
|
Ok(posts) => {
|
||||||
let ignore_users = crate::ignore_users_gen!(user!, #data);
|
let ignore_users = crate::ignore_users_gen!(user!, #data);
|
||||||
Json(ApiReturn {
|
Json(ApiReturn {
|
||||||
|
|
|
@ -417,7 +417,7 @@ pub async fn feed_request(
|
||||||
|
|
||||||
let feed = match data
|
let feed = match data
|
||||||
.0
|
.0
|
||||||
.get_posts_by_community(community.id, 12, props.page)
|
.get_posts_by_community(community.id, 12, props.page, &user)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(p) => match data.0.fill_posts(p, &ignore_users, &user).await {
|
Ok(p) => match data.0.fill_posts(p, &ignore_users, &user).await {
|
||||||
|
|
|
@ -161,7 +161,7 @@ pub async fn tickets_request(
|
||||||
|
|
||||||
let feed = match data
|
let feed = match data
|
||||||
.0
|
.0
|
||||||
.get_posts_by_community(community.id, 12, props.page)
|
.get_posts_by_community(community.id, 12, props.page, &user)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(p) => match data.0.fill_posts(p, &ignore_users, &user).await {
|
Ok(p) => match data.0.fill_posts(p, &ignore_users, &user).await {
|
||||||
|
|
|
@ -1043,15 +1043,31 @@ impl DataManager {
|
||||||
id: usize,
|
id: usize,
|
||||||
batch: usize,
|
batch: usize,
|
||||||
page: usize,
|
page: usize,
|
||||||
|
user: &Option<User>,
|
||||||
) -> Result<Vec<Post>> {
|
) -> Result<Vec<Post>> {
|
||||||
let conn = match self.0.connect().await {
|
let conn = match self.0.connect().await {
|
||||||
Ok(c) => c,
|
Ok(c) => c,
|
||||||
Err(e) => return Err(Error::DatabaseConnection(e.to_string())),
|
Err(e) => return Err(Error::DatabaseConnection(e.to_string())),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// check if we should hide nsfw posts
|
||||||
|
let mut hide_nsfw: bool = true;
|
||||||
|
|
||||||
|
if let Some(ua) = user {
|
||||||
|
hide_nsfw = !ua.settings.show_nsfw;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ...
|
||||||
let res = query_rows!(
|
let res = query_rows!(
|
||||||
&conn,
|
&conn,
|
||||||
"SELECT * FROM posts WHERE community = $1 AND replying_to = 0 AND NOT context LIKE '%\"is_pinned\":true%' AND is_deleted = 0 ORDER BY created DESC LIMIT $2 OFFSET $3",
|
&format!(
|
||||||
|
"SELECT * FROM posts WHERE community = $1 AND replying_to = 0 AND NOT context LIKE '%\"is_pinned\":true%' AND is_deleted = 0 {} ORDER BY created DESC LIMIT $2 OFFSET $3",
|
||||||
|
if hide_nsfw {
|
||||||
|
"AND NOT (context::json->>'is_nsfw')::boolean"
|
||||||
|
} else {
|
||||||
|
""
|
||||||
|
}
|
||||||
|
),
|
||||||
&[&(id as i64), &(batch as i64), &((page * batch) as i64)],
|
&[&(id as i64), &(batch as i64), &((page * batch) as i64)],
|
||||||
|x| { Self::get_post_from_row(x) }
|
|x| { Self::get_post_from_row(x) }
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue