diff options
Diffstat (limited to 'server/src/apub/comment.rs')
-rw-r--r-- | server/src/apub/comment.rs | 76 |
1 files changed, 74 insertions, 2 deletions
diff --git a/server/src/apub/comment.rs b/server/src/apub/comment.rs index d108b2ee..db47106e 100644 --- a/server/src/apub/comment.rs +++ b/server/src/apub/comment.rs @@ -94,11 +94,13 @@ impl ApubObjectType for Comment { let note = self.to_apub(conn)?; let post = Post::read(&conn, self.post_id)?; let community = Community::read(conn, post.community_id)?; + let id = format!("{}/create/{}", self.ap_id, uuid::Uuid::new_v4()); + let mut create = Create::new(); populate_object_props( &mut create.object_props, &community.get_followers_url(), - &self.ap_id, + &id, )?; create .create_props @@ -128,11 +130,13 @@ impl ApubObjectType for Comment { let note = self.to_apub(&conn)?; let post = Post::read(&conn, self.post_id)?; let community = Community::read(&conn, post.community_id)?; + let id = format!("{}/update/{}", self.ap_id, uuid::Uuid::new_v4()); + let mut update = Update::new(); populate_object_props( &mut update.object_props, &community.get_followers_url(), - &self.ap_id, + &id, )?; update .update_props @@ -157,3 +161,71 @@ impl ApubObjectType for Comment { Ok(()) } } + +impl ApubLikeableType for Comment { + fn send_like(&self, creator: &User_, conn: &PgConnection) -> Result<(), Error> { + let note = self.to_apub(&conn)?; + let post = Post::read(&conn, self.post_id)?; + let community = Community::read(&conn, post.community_id)?; + let id = format!("{}/like/{}", self.ap_id, uuid::Uuid::new_v4()); + + let mut like = Like::new(); + populate_object_props(&mut like.object_props, &community.get_followers_url(), &id)?; + like + .like_props + .set_actor_xsd_any_uri(creator.actor_id.to_owned())? + .set_object_base_box(note)?; + + // Insert the sent activity into the activity table + let activity_form = activity::ActivityForm { + user_id: creator.id, + data: serde_json::to_value(&like)?, + local: true, + updated: None, + }; + activity::Activity::create(&conn, &activity_form)?; + + send_activity( + &like, + &creator.private_key.as_ref().unwrap(), + &creator.actor_id, + community.get_follower_inboxes(&conn)?, + )?; + Ok(()) + } + + fn send_dislike(&self, creator: &User_, conn: &PgConnection) -> Result<(), Error> { + let note = self.to_apub(&conn)?; + let post = Post::read(&conn, self.post_id)?; + let community = Community::read(&conn, post.community_id)?; + let id = format!("{}/dislike/{}", self.ap_id, uuid::Uuid::new_v4()); + + let mut dislike = Dislike::new(); + populate_object_props( + &mut dislike.object_props, + &community.get_followers_url(), + &id, + )?; + dislike + .dislike_props + .set_actor_xsd_any_uri(creator.actor_id.to_owned())? + .set_object_base_box(note)?; + + // Insert the sent activity into the activity table + let activity_form = activity::ActivityForm { + user_id: creator.id, + data: serde_json::to_value(&dislike)?, + local: true, + updated: None, + }; + activity::Activity::create(&conn, &activity_form)?; + + send_activity( + &dislike, + &creator.private_key.as_ref().unwrap(), + &creator.actor_id, + community.get_follower_inboxes(&conn)?, + )?; + Ok(()) + } +} |