summaryrefslogtreecommitdiffstats
path: root/server/src/apub/activities.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/apub/activities.rs')
-rw-r--r--server/src/apub/activities.rs29
1 files changed, 27 insertions, 2 deletions
diff --git a/server/src/apub/activities.rs b/server/src/apub/activities.rs
index 3816093c..a747ed21 100644
--- a/server/src/apub/activities.rs
+++ b/server/src/apub/activities.rs
@@ -1,5 +1,9 @@
-use crate::apub::{extensions::signatures::sign, is_apub_id_valid, ActorType};
-use activitystreams::{context, object::properties::ObjectProperties, public};
+use crate::{
+ apub::{extensions::signatures::sign, is_apub_id_valid, ActorType},
+ db::{activity::insert_activity, community::Community, user::User_},
+};
+use activitystreams::{context, object::properties::ObjectProperties, public, Activity, Base};
+use diesel::PgConnection;
use failure::{Error, _core::fmt::Debug};
use isahc::prelude::*;
use log::debug;
@@ -22,6 +26,27 @@ pub fn populate_object_props(
Ok(())
}
+pub fn send_activity_to_community<A>(
+ creator: &User_,
+ conn: &PgConnection,
+ community: &Community,
+ to: Vec<String>,
+ activity: A,
+) -> Result<(), Error>
+where
+ A: Activity + Base + Serialize + Debug,
+{
+ insert_activity(&conn, creator.id, &activity, true)?;
+
+ // if this is a local community, we need to do an announce from the community instead
+ if community.local {
+ Community::do_announce(activity, &community, creator, conn)?;
+ } else {
+ send_activity(&activity, creator, to)?;
+ }
+ Ok(())
+}
+
/// Send an activity to a list of recipients, using the correct headers etc.
pub fn send_activity<A>(activity: &A, actor: &dyn ActorType, to: Vec<String>) -> Result<(), Error>
where