Add some notifications

When liking, commenting or following
This commit is contained in:
Bat 2018-05-13 14:03:35 +01:00
parent 780a51157f
commit 726c2c7e82
2 changed files with 43 additions and 4 deletions

View File

@ -56,8 +56,6 @@ pub trait Inbox: Actor + Sized {
self.accept_follow(conn, &from, &blog, &follow_act, from.id, blog.id) self.accept_follow(conn, &from, &blog, &follow_act, from.id, blog.id)
} }
}; };
// TODO: notification
} }
"Like" => { "Like" => {
let liker = User::from_url(conn, act["actor"].as_str().unwrap().to_string()); let liker = User::from_url(conn, act["actor"].as_str().unwrap().to_string());

View File

@ -23,8 +23,10 @@ use activity_pub::outbox::Outbox;
use activity_pub::sign::{Signer, gen_keypair}; use activity_pub::sign::{Signer, gen_keypair};
use activity_pub::webfinger::{Webfinger, resolve}; use activity_pub::webfinger::{Webfinger, resolve};
use db_conn::DbConn; use db_conn::DbConn;
use models::comments::Comment;
use models::follows::Follow; use models::follows::Follow;
use models::instance::Instance; use models::instance::Instance;
use models::notifications::*;
use models::post_authors::PostAuthor; use models::post_authors::PostAuthor;
use models::posts::Post; use models::posts::Post;
use schema::users; use schema::users;
@ -332,8 +334,47 @@ impl Actor for User {
impl Inbox for User { impl Inbox for User {
fn received(&self, conn: &PgConnection, act: serde_json::Value) { fn received(&self, conn: &PgConnection, act: serde_json::Value) {
self.save(conn, act); self.save(conn, act.clone());
// TODO: add to stream or create notification, or whatever needs to be done
// Notifications
match act["type"].as_str().unwrap() {
"Follow" => {
let follower = User::from_url(conn, act["actor"].as_str().unwrap().to_string()).unwrap();
Notification::insert(conn, NewNotification {
title: format!("{} started following you", follower.display_name.clone()),
content: None,
link: Some(follower.ap_url),
user_id: self.id
});
}
"Like" => {
let liker = User::from_url(conn, act["actor"].as_str().unwrap().to_string()).unwrap();
let post = Post::find_by_ap_url(conn, act["object"].as_str().unwrap().to_string()).unwrap();
Notification::insert(conn, NewNotification {
title: format!("{} liked your article", liker.display_name.clone()),
content: Some(post.title),
link: Some(post.ap_url),
user_id: self.id
});
},
"Create" => {
match act["object"]["type"].as_str().unwrap() {
"Note" => {
let comment = Comment::find_by_ap_url(conn, act["object"]["id"].as_str().unwrap().to_string()).unwrap();
Notification::insert(conn, NewNotification {
title: format!("{} commented your article", comment.get_author(conn).display_name.clone()),
content: Some(comment.get_post(conn).title),
link: comment.ap_url,
user_id: self.id
});
}
_ => {}
}
}
_ => {}
}
// TODO: add to stream, or whatever needs to be done
} }
} }