Send a Note too when publishing an article

Fixes #3
This commit is contained in:
Bat 2018-05-03 20:27:17 +01:00
parent 22cb286f86
commit b10af9776b
2 changed files with 33 additions and 0 deletions

View File

@ -98,3 +98,32 @@ impl Object for Post {
}) })
} }
} }
/// ActivityPub Object to make it possible to view posts in Mastodon/Pleroma
/// and interact with them from there.
pub struct PostNote {
pub post: Post
}
impl Object for PostNote {
fn compute_id(&self, conn: &PgConnection) -> String {
ap_url(format!("{}/{}/{}/note", BASE_URL.as_str(), self.post.get_blog(conn).actor_id, self.post.slug))
}
fn serialize(&self, conn: &PgConnection) -> serde_json::Value {
json!({
"type": "Note",
"attributedTo": self.post.get_authors(conn).into_iter().map(|a| a.compute_id(conn)).collect::<Vec<String>>(),
"content": format!("<b>{}</b> in {}", self.post.title, self.post.get_blog(conn).title),
// TODO: "image": "image",
// TODO: "preview": "preview",
// TODO: "published": "published",
// TODO: "replies": "replies",
// TODO: "summary": "summary",
"tag": [],
// TODO: "updated": "updated",
// TODO: "url": "url",
"to": [ PUBLIC_VISIBILTY ]
})
}
}

View File

@ -58,5 +58,9 @@ fn create(blog_name: String, data: Form<NewPostForm>, user: User, conn: DbConn)
let act = Create::new(&user, &post, &*conn); let act = Create::new(&user, &post, &*conn);
broadcast(&*conn, &user, act, user.get_followers(&*conn)); broadcast(&*conn, &user, act, user.get_followers(&*conn));
let note_act = Create::new(&user, &PostNote { post: post }, &*conn);
broadcast(&*conn, &user, note_act, user.get_followers(&*conn));
Redirect::to(format!("/~/{}/{}", blog_name, slug).as_str()) Redirect::to(format!("/~/{}/{}", blog_name, slug).as_str())
} }