From bc3927a9bd9ae632d6c56aaa562ed093d4003060 Mon Sep 17 00:00:00 2001 From: dayinjing <94152841+dayinjing@users.noreply.github.com> Date: Wed, 2 Mar 2022 11:39:27 -0600 Subject: [PATCH] Show nsfw communities if you are logged in and searching communities (#2105) * Show nsfw communities in logged in and you've enabled nsfw in your profile atleast * Reuse existing user check Co-authored-by: Sun Wukong --- crates/db_views_actor/src/community_view.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/crates/db_views_actor/src/community_view.rs b/crates/db_views_actor/src/community_view.rs index 50ca6f4dd..a7b711b43 100644 --- a/crates/db_views_actor/src/community_view.rs +++ b/crates/db_views_actor/src/community_view.rs @@ -6,7 +6,7 @@ use lemmy_db_schema::{ fuzzy_search, limit_and_offset, newtypes::{CommunityId, PersonId}, - schema::{community, community_aggregates, community_block, community_follower}, + schema::{community, community_aggregates, community_block, community_follower, local_user}, source::{ community::{Community, CommunityFollower, CommunitySafe}, community_block::CommunityBlock, @@ -167,6 +167,7 @@ impl<'a> CommunityQueryBuilder<'a> { let mut query = community::table .inner_join(community_aggregates::table) + .left_join(local_user::table.on(local_user::person_id.eq(person_id_join))) .left_join( community_follower::table.on( community::id @@ -232,10 +233,6 @@ impl<'a> CommunityQueryBuilder<'a> { } }; - if !self.show_nsfw.unwrap_or(false) { - query = query.filter(community::nsfw.eq(false)); - }; - if let Some(listing_type) = self.listing_type { query = match listing_type { ListingType::Subscribed => query.filter(community_follower::person_id.is_not_null()), // TODO could be this: and(community_follower::person_id.eq(person_id_join)), @@ -244,9 +241,15 @@ impl<'a> CommunityQueryBuilder<'a> { }; } - // Don't show blocked communities + // Don't show blocked communities or nsfw communities if not enabled in profile if self.my_person_id.is_some() { query = query.filter(community_block::person_id.is_null()); + query = query.filter(community::nsfw.eq(false).or(local_user::show_nsfw.eq(true))); + } else { + // No person in request, only show nsfw communities if show_nsfw passed into request + if !self.show_nsfw.unwrap_or(false) { + query = query.filter(community::nsfw.eq(false)); + } } let (limit, offset) = limit_and_offset(self.page, self.limit);