]> Untitled Git - lemmy.git/commitdiff
Show nsfw communities if you are logged in and searching communities (#2105)
authordayinjing <94152841+dayinjing@users.noreply.github.com>
Wed, 2 Mar 2022 17:39:27 +0000 (11:39 -0600)
committerGitHub <noreply@github.com>
Wed, 2 Mar 2022 17:39:27 +0000 (17:39 +0000)
* 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

index 50ca6f4dd0ef234593408ec41b67505b2ccd2a8d..a7b711b43726c805e6d541200b86889f2b63bc25 100644 (file)
@@ -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);