diff --git a/lemmy_apub/src/activity_queue.rs b/lemmy_apub/src/activity_queue.rs index 846756593..a887eb93f 100644 --- a/lemmy_apub/src/activity_queue.rs +++ b/lemmy_apub/src/activity_queue.rs @@ -203,15 +203,15 @@ where insert_activity(actor.user_id(), activity.clone(), true, pool).await?; } - // TODO: it would make sense to create a separate task for each destination server - let message = SendActivityTask { - activity: serialised_activity, - to, - actor_id: actor.actor_id()?, - private_key: actor.private_key().context(location_info!())?, - }; - - activity_sender.queue::(message)?; + for t in to { + let message = SendActivityTask { + activity: serialised_activity.to_owned(), + to: t, + actor_id: actor.actor_id()?, + private_key: actor.private_key().context(location_info!())?, + }; + activity_sender.queue::(message)?; + } Ok(()) } @@ -219,7 +219,7 @@ where #[derive(Clone, Debug, Deserialize, Serialize)] struct SendActivityTask { activity: String, - to: Vec, + to: Url, actor_id: Url, private_key: String, } @@ -234,27 +234,25 @@ impl ActixJob for SendActivityTask { fn run(self, state: Self::State) -> Self::Future { Box::pin(async move { - for to_url in &self.to { - let mut headers = BTreeMap::::new(); - headers.insert("Content-Type".into(), "application/json".into()); - let result = sign_and_send( - &state.client, - headers, - to_url, - self.activity.clone(), - &self.actor_id, - self.private_key.to_owned(), - ) - .await; + let mut headers = BTreeMap::::new(); + headers.insert("Content-Type".into(), "application/json".into()); + let result = sign_and_send( + &state.client, + headers, + &self.to, + self.activity.clone(), + &self.actor_id, + self.private_key.to_owned(), + ) + .await; - if let Err(e) = result { - warn!("{}", e); - return Err(anyhow!( - "Failed to send activity {} to {}", - &self.activity, - to_url - )); - } + if let Err(e) = result { + warn!("{}", e); + return Err(anyhow!( + "Failed to send activity {} to {}", + &self.activity, + self.to + )); } Ok(()) })