diff options
Diffstat (limited to 'server/src/apub/activities.rs')
-rw-r--r-- | server/src/apub/activities.rs | 29 |
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 |