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::<SendActivityTask>(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::<SendActivityTask>(message)?;
+ }
Ok(())
}
#[derive(Clone, Debug, Deserialize, Serialize)]
struct SendActivityTask {
activity: String,
- to: Vec<Url>,
+ to: Url,
actor_id: Url,
private_key: String,
}
fn run(self, state: Self::State) -> Self::Future {
Box::pin(async move {
- for to_url in &self.to {
- let mut headers = BTreeMap::<String, String>::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::<String, String>::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(())
})