-impl Id for AnnouncableActivities {
- fn object_id(&self) -> &Url {
- ActivityHandler::id(self)
- }
-}
-
-// Need to implement this manually to announce matching activities
-#[async_trait::async_trait(?Send)]
-impl ActivityHandler for GroupInboxActivities {
- type DataType = LemmyContext;
- type Error = LemmyError;
-
- fn id(&self) -> &Url {
- match self {
- GroupInboxActivities::FollowCommunity(a) => a.id(),
- GroupInboxActivities::UndoFollowCommunity(a) => a.id(),
- GroupInboxActivities::AnnouncableActivities(a) => a.object_id(),
- GroupInboxActivities::Report(a) => a.id(),
- }
- }
-
- fn actor(&self) -> &Url {
- match self {
- GroupInboxActivities::FollowCommunity(a) => a.actor(),
- GroupInboxActivities::UndoFollowCommunity(a) => a.actor(),
- GroupInboxActivities::AnnouncableActivities(a) => a.actor(),
- GroupInboxActivities::Report(a) => a.actor(),
- }
- }
-
- async fn verify(
- &self,
- data: &Data<Self::DataType>,
- request_counter: &mut i32,
- ) -> Result<(), LemmyError> {
- match self {
- GroupInboxActivities::FollowCommunity(a) => a.verify(data, request_counter).await,
- GroupInboxActivities::UndoFollowCommunity(a) => a.verify(data, request_counter).await,
- GroupInboxActivities::AnnouncableActivities(a) => a.verify(data, request_counter).await,
- GroupInboxActivities::Report(a) => a.verify(data, request_counter).await,
- }
- }
-
- async fn receive(
- self,
- data: &Data<Self::DataType>,
- request_counter: &mut i32,
- ) -> Result<(), LemmyError> {
- match self {
- GroupInboxActivities::FollowCommunity(a) => a.receive(data, request_counter).await,
- GroupInboxActivities::UndoFollowCommunity(a) => a.receive(data, request_counter).await,
- GroupInboxActivities::AnnouncableActivities(activity) => {
- activity.clone().receive(data, request_counter).await?;
-
- // Ignore failures in get_community(). those happen because Delete/PrivateMessage is not in a
- // community, but looks identical to Delete/Post or Delete/Comment which are in a community.
- let community = activity.get_community(data, &mut 0).await;
- if let Ok(community) = community {
- if community.local {
- let actor_id = ObjectId::new(activity.actor().clone());
- verify_person_in_community(&actor_id, &community, data, &mut 0).await?;
- AnnounceActivity::send(*activity, &community, data).await?;
- }
- }
- Ok(())
- }
- GroupInboxActivities::Report(a) => a.receive(data, request_counter).await,
- }
- }
-}
-