]> Untitled Git - lemmy.git/blobdiff - lemmy_apub/src/activity_queue.rs
Merge remote-tracking branch 'origin/split-db-workspace' into move_views_to_diesel_split
[lemmy.git] / lemmy_apub / src / activity_queue.rs
index 597c182b7931b51e29371fc9ca7ca6e404c19ff8..fe70d8e8bdae6e412074056d770b7b2408b08ce6 100644 (file)
@@ -26,7 +26,7 @@ use lemmy_websocket::LemmyContext;
 use log::{debug, warn};
 use reqwest::Client;
 use serde::{export::fmt::Debug, Deserialize, Serialize};
-use std::{collections::BTreeMap, future::Future, pin::Pin};
+use std::{collections::BTreeMap, env, future::Future, pin::Pin};
 use url::Url;
 
 /// Sends a local activity to a single, remote actor.
@@ -235,7 +235,11 @@ where
       actor_id: actor.actor_id()?,
       private_key: actor.private_key().context(location_info!())?,
     };
-    activity_sender.queue::<SendActivityTask>(message)?;
+    if env::var("LEMMY_TEST_SEND_SYNC").is_ok() {
+      do_send(message, &Client::default()).await?;
+    } else {
+      activity_sender.queue::<SendActivityTask>(message)?;
+    }
   }
 
   Ok(())
@@ -260,30 +264,32 @@ impl ActixJob for SendActivityTask {
   const BACKOFF: Backoff = Backoff::Exponential(2);
 
   fn run(self, state: Self::State) -> Self::Future {
-    Box::pin(async move {
-      let mut headers = BTreeMap::<String, String>::new();
-      headers.insert("Content-Type".into(), "application/json".into());
-      let result = sign_and_send(
-        &state.client,
-        headers,
-        &self.inbox,
-        self.activity.clone(),
-        &self.actor_id,
-        self.private_key.to_owned(),
-      )
-      .await;
+    Box::pin(async move { do_send(self, &state.client).await })
+  }
+}
 
-      if let Err(e) = result {
-        warn!("{}", e);
-        return Err(anyhow!(
-          "Failed to send activity {} to {}",
-          &self.activity,
-          self.inbox
-        ));
-      }
-      Ok(())
-    })
+async fn do_send(task: SendActivityTask, client: &Client) -> Result<(), Error> {
+  let mut headers = BTreeMap::<String, String>::new();
+  headers.insert("Content-Type".into(), "application/json".into());
+  let result = sign_and_send(
+    client,
+    headers,
+    &task.inbox,
+    task.activity.clone(),
+    &task.actor_id,
+    task.private_key.to_owned(),
+  )
+  .await;
+
+  if let Err(e) = result {
+    warn!("{}", e);
+    return Err(anyhow!(
+      "Failed to send activity {} to {}",
+      &task.activity,
+      task.inbox
+    ));
   }
+  Ok(())
 }
 
 pub fn create_activity_queue() -> QueueHandle {