Add filter to hide posts with comments. (#5158)
* Add filter to hide posts with comments. - Useful for Q/A type communities. - Fixes #1106 * Changing to no_comments_only
This commit is contained in:
parent
9f40387569
commit
298c8fa521
3 changed files with 40 additions and 0 deletions
|
@ -85,6 +85,8 @@ pub struct GetPosts {
|
|||
pub show_read: Option<bool>,
|
||||
/// If true, then show the nsfw posts (even if your user setting is to hide them)
|
||||
pub show_nsfw: Option<bool>,
|
||||
/// If true, then only show posts with no comments
|
||||
pub no_comments_only: Option<bool>,
|
||||
pub page_cursor: Option<PaginationCursor>,
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ pub async fn list_posts(
|
|||
let show_hidden = data.show_hidden;
|
||||
let show_read = data.show_read;
|
||||
let show_nsfw = data.show_nsfw;
|
||||
let no_comments_only = data.no_comments_only;
|
||||
|
||||
let liked_only = data.liked_only;
|
||||
let disliked_only = data.disliked_only;
|
||||
|
@ -82,6 +83,7 @@ pub async fn list_posts(
|
|||
show_hidden,
|
||||
show_read,
|
||||
show_nsfw,
|
||||
no_comments_only,
|
||||
..Default::default()
|
||||
}
|
||||
.list(&local_site.site, &mut context.pool())
|
||||
|
|
|
@ -401,6 +401,11 @@ fn queries<'a>() -> Queries<
|
|||
query = query.filter(person::bot_account.eq(false));
|
||||
};
|
||||
|
||||
// Filter to show only posts with no comments
|
||||
if options.no_comments_only.unwrap_or_default() {
|
||||
query = query.filter(post_aggregates::comments.eq(0));
|
||||
};
|
||||
|
||||
// If its saved only, then filter, and order by the saved time, not the comment creation time.
|
||||
if options.saved_only.unwrap_or_default() {
|
||||
query = query
|
||||
|
@ -617,6 +622,7 @@ pub struct PostQuery<'a> {
|
|||
pub show_hidden: Option<bool>,
|
||||
pub show_read: Option<bool>,
|
||||
pub show_nsfw: Option<bool>,
|
||||
pub no_comments_only: Option<bool>,
|
||||
}
|
||||
|
||||
impl<'a> PostQuery<'a> {
|
||||
|
@ -1988,4 +1994,34 @@ mod tests {
|
|||
|
||||
cleanup(data, pool).await
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
#[serial]
|
||||
async fn post_listings_no_comments_only() -> LemmyResult<()> {
|
||||
let pool = &build_db_pool().await?;
|
||||
let pool = &mut pool.into();
|
||||
let data = init_data(pool).await?;
|
||||
|
||||
// Create a comment for a post
|
||||
let comment_form = CommentInsertForm::new(
|
||||
data.local_user_view.person.id,
|
||||
data.inserted_post.id,
|
||||
"a comment".to_owned(),
|
||||
);
|
||||
Comment::create(pool, &comment_form, None).await?;
|
||||
|
||||
// Make sure it doesnt come back with the no_comments option
|
||||
let post_listings_no_comments = PostQuery {
|
||||
sort: Some(PostSortType::New),
|
||||
no_comments_only: Some(true),
|
||||
local_user: Some(&data.local_user_view.local_user),
|
||||
..Default::default()
|
||||
}
|
||||
.list(&data.site, pool)
|
||||
.await?;
|
||||
|
||||
assert_eq!(vec![POST_BY_BOT], names(&post_listings_no_comments));
|
||||
|
||||
cleanup(data, pool).await
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue