]> Untitled Git - lemmy.git/commitdiff
Mark follow as pending when subscribing to remote community (fixes #3384) (#3406)
authorNutomic <me@nutomic.com>
Mon, 3 Jul 2023 10:03:20 +0000 (12:03 +0200)
committerGitHub <noreply@github.com>
Mon, 3 Jul 2023 10:03:20 +0000 (12:03 +0200)
crates/api/src/community/follow.rs

index ae1ed6a4b0841c8251718c5d0f677e708eb52fa7..39feeff25942f16abba4e70efbfe23c2d1967010 100644 (file)
@@ -26,19 +26,27 @@ impl Perform for FollowCommunity {
 
     let community_id = data.community_id;
     let community = Community::read(context.pool(), community_id).await?;
-    let community_follower_form = CommunityFollowerForm {
+    let mut community_follower_form = CommunityFollowerForm {
       community_id: data.community_id,
       person_id: local_user_view.person.id,
       pending: false,
     };
 
-    if community.local && data.follow {
-      check_community_ban(local_user_view.person.id, community_id, context.pool()).await?;
-      check_community_deleted_or_removed(community_id, context.pool()).await?;
+    if data.follow {
+      if community.local {
+        check_community_ban(local_user_view.person.id, community_id, context.pool()).await?;
+        check_community_deleted_or_removed(community_id, context.pool()).await?;
 
-      CommunityFollower::follow(context.pool(), &community_follower_form)
-        .await
-        .map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
+        CommunityFollower::follow(context.pool(), &community_follower_form)
+          .await
+          .map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
+      } else {
+        // Mark as pending, the actual federation activity is sent via `SendActivity` handler
+        community_follower_form.pending = true;
+        CommunityFollower::follow(context.pool(), &community_follower_form)
+          .await
+          .map_err(|e| LemmyError::from_error_message(e, "community_follower_already_exists"))?;
+      }
     }
     if !data.follow {
       CommunityFollower::unfollow(context.pool(), &community_follower_form)