summaryrefslogtreecommitdiffstats
path: root/server/src/apub/comment.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/apub/comment.rs')
-rw-r--r--server/src/apub/comment.rs76
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(())
+ }
+}