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 <monkey@king.com>
---
 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 50ca6f4d..a7b711b4 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);
-- 
2.44.1