Send event to channel when post published

This commit is contained in:
Kitaiti Makoto 2021-01-07 22:16:51 +09:00
parent ccbf2124cb
commit 6a2ba2260d

View File

@ -1,7 +1,7 @@
use crate::{ use crate::{
ap_url, blogs::Blog, instance::Instance, medias::Media, mentions::Mention, post_authors::*, ap_url, blogs::Blog, instance::Instance, medias::Media, mentions::Mention, post_authors::*,
safe_string::SafeString, schema::posts, search::Searcher, tags::*, timeline::*, users::User, safe_string::SafeString, schema::posts, search::Searcher, tags::*, timeline::*, users::User,
Connection, Error, PlumeRocket, Result, CONFIG, Connection, Error, PlumeRocket, PostEvent::*, Result, CONFIG, POST_CHAN,
}; };
use activitypub::{ use activitypub::{
activity::{Create, Delete, Update}, activity::{Create, Delete, Update},
@ -19,6 +19,7 @@ use plume_common::{
}, },
utils::md_to_html, utils::md_to_html,
}; };
use riker::actors::{Publish, Tell};
use std::collections::HashSet; use std::collections::HashSet;
pub type LicensedArticle = CustomObject<Licensed, Article>; pub type LicensedArticle = CustomObject<Licensed, Article>;
@ -62,7 +63,7 @@ impl Post {
find_by!(posts, find_by_ap_url, ap_url as &str); find_by!(posts, find_by_ap_url, ap_url as &str);
last!(posts); last!(posts);
pub fn insert(conn: &Connection, new: NewPost, searcher: &Searcher) -> Result<Self> { pub fn insert(conn: &Connection, new: NewPost, _searcher: &Searcher) -> Result<Self> {
diesel::insert_into(posts::table) diesel::insert_into(posts::table)
.values(new) .values(new)
.execute(conn)?; .execute(conn)?;
@ -77,7 +78,10 @@ impl Post {
let _: Post = post.save_changes(conn)?; let _: Post = post.save_changes(conn)?;
} }
searcher.add_document(conn, &post)?; if post.published {
post.publish_published();
}
Ok(post) Ok(post)
} }
@ -545,6 +549,16 @@ impl Post {
.set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY)])?; .set_to_link_vec(vec![Id::new(PUBLIC_VISIBILITY)])?;
Ok(act) Ok(act)
} }
fn publish_published(&self) {
POST_CHAN.tell(
Publish {
msg: PostPublished(self.clone()),
topic: "post.published".into(),
},
None,
)
}
} }
impl FromId<PlumeRocket> for Post { impl FromId<PlumeRocket> for Post {