Create separate SendActivityTask for each destination

This commit is contained in:
Felix Ableitner 2020-10-06 19:19:53 +02:00
parent 60730e81d9
commit 26883208cd

View file

@ -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::<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(())
}
@ -219,7 +219,7 @@ where
#[derive(Clone, Debug, Deserialize, Serialize)]
struct SendActivityTask {
activity: String,
to: Vec<Url>,
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::<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(())
})