Send websocket message on accepted follow. Fixes #2369 (#2375)

login-checks
Dessalines 2022-07-28 11:49:26 -04:00 committed by GitHub
parent b9f1fc0518
commit c62671116c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 33 additions and 5 deletions

View File

@ -11,10 +11,12 @@ use activitypub_federation::{
utils::verify_urls_match,
};
use activitystreams_kinds::activity::AcceptType;
use lemmy_api_common::utils::blocking;
use lemmy_api_common::{community::CommunityResponse, utils::blocking};
use lemmy_db_schema::{source::community::CommunityFollower, traits::Followable};
use lemmy_db_views::structs::LocalUserView;
use lemmy_db_views_actor::structs::CommunityView;
use lemmy_utils::error::LemmyError;
use lemmy_websocket::LemmyContext;
use lemmy_websocket::{messages::SendUserRoomMessage, LemmyContext, UserOperation};
use url::Url;
impl AcceptFollowCommunity {
@ -76,21 +78,47 @@ impl ActivityHandler for AcceptFollowCommunity {
context: &Data<LemmyContext>,
request_counter: &mut i32,
) -> Result<(), LemmyError> {
let person = self
let community = self
.actor
.dereference(context, local_instance(context), request_counter)
.await?;
let community = self
let person = self
.object
.actor
.dereference(context, local_instance(context), request_counter)
.await?;
// This will throw an error if no follow was requested
let community_id = community.id;
let person_id = person.id;
blocking(context.pool(), move |conn| {
CommunityFollower::follow_accepted(conn, person.id, community.id)
CommunityFollower::follow_accepted(conn, community_id, person_id)
})
.await??;
// Send the Subscribed message over websocket
// Re-read the community_view to get the new SubscribedType
let community_view = blocking(context.pool(), move |conn| {
CommunityView::read(conn, community_id, Some(person_id))
})
.await??;
// Get the local_user_id
let local_recipient_id = blocking(context.pool(), move |conn| {
LocalUserView::read_person(conn, person_id)
})
.await??
.local_user
.id;
let response = CommunityResponse { community_view };
context.chat_server().do_send(SendUserRoomMessage {
op: UserOperation::FollowCommunity,
response,
local_recipient_id,
websocket_id: None,
});
Ok(())
}
}