From: Nutomic Date: Mon, 3 Jul 2023 10:03:20 +0000 (+0200) Subject: Mark follow as pending when subscribing to remote community (fixes #3384) (#3406) X-Git-Url: http://these/git/%7B%60/static/assets/css/themes/%24%7Bthis.props.defaultTheme%7D.min.css%60%7D?a=commitdiff_plain;h=6405761891709cc98271452ac98cccf8219adb6e;p=lemmy.git Mark follow as pending when subscribing to remote community (fixes #3384) (#3406) --- diff --git a/crates/api/src/community/follow.rs b/crates/api/src/community/follow.rs index ae1ed6a4..39feeff2 100644 --- a/crates/api/src/community/follow.rs +++ b/crates/api/src/community/follow.rs @@ -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)