mirror of
https://git.joinplu.me/Plume/Plume.git
synced 2024-11-25 13:01:08 +00:00
Notify when receiving a mention
This commit is contained in:
parent
c9f29955a0
commit
c4cc4a4e13
8 changed files with 60 additions and 9 deletions
|
@ -0,0 +1,2 @@
|
|||
-- This file should undo anything in `up.sql`
|
||||
ALTER TABLE mentions DROP COLUMN ap_url;
|
2
migrations/2018-06-20-194538_add_mentions_ap_url/up.sql
Normal file
2
migrations/2018-06-20-194538_add_mentions_ap_url/up.sql
Normal file
|
@ -0,0 +1,2 @@
|
|||
-- Your SQL goes here
|
||||
ALTER TABLE mentions ADD COLUMN ap_url VARCHAR NOT NULL DEFAULT '';
|
3
po/en.po
3
po/en.po
|
@ -280,3 +280,6 @@ msgstr ""
|
|||
|
||||
msgid "You are not author in this blog."
|
||||
msgstr ""
|
||||
|
||||
msgid "{{ data }} mentioned you."
|
||||
msgstr ""
|
||||
|
|
3
po/fr.po
3
po/fr.po
|
@ -280,3 +280,6 @@ msgstr ""
|
|||
|
||||
msgid "You are not author in this blog."
|
||||
msgstr ""
|
||||
|
||||
msgid "{{ data }} mentioned you."
|
||||
msgstr ""
|
||||
|
|
4
po/pl.po
4
po/pl.po
|
@ -285,5 +285,9 @@ msgstr ""
|
|||
msgid "You are not author in this blog."
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgid "{{ data }} mentioned you."
|
||||
msgstr "{{ data }} skomentował Twój artykuł"
|
||||
|
||||
#~ msgid "Logowanie"
|
||||
#~ msgstr "Zaloguj się"
|
||||
|
|
|
@ -275,3 +275,6 @@ msgstr ""
|
|||
|
||||
msgid "You are not author in this blog."
|
||||
msgstr ""
|
||||
|
||||
msgid "{{ data }} mentioned you."
|
||||
msgstr ""
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
use activitypub::link;
|
||||
use diesel::{self, PgConnection, QueryDsl, RunQueryDsl, ExpressionMethods};
|
||||
|
||||
use activity_pub::Id;
|
||||
use activity_pub::{Id, inbox::Notify};
|
||||
use models::{
|
||||
comments::Comment,
|
||||
notifications::*,
|
||||
posts::Post,
|
||||
users::User
|
||||
};
|
||||
|
@ -14,7 +15,8 @@ pub struct Mention {
|
|||
pub id: i32,
|
||||
pub mentioned_id: i32,
|
||||
pub post_id: Option<i32>,
|
||||
pub comment_id: Option<i32>
|
||||
pub comment_id: Option<i32>,
|
||||
pub ap_url: String
|
||||
}
|
||||
|
||||
#[derive(Insertable)]
|
||||
|
@ -22,12 +24,14 @@ pub struct Mention {
|
|||
pub struct NewMention {
|
||||
pub mentioned_id: i32,
|
||||
pub post_id: Option<i32>,
|
||||
pub comment_id: Option<i32>
|
||||
pub comment_id: Option<i32>,
|
||||
pub ap_url: String
|
||||
}
|
||||
|
||||
impl Mention {
|
||||
insert!(mentions, NewMention);
|
||||
get!(mentions);
|
||||
find_by!(mentions, find_by_ap_url, ap_url as String);
|
||||
list_by!(mentions, list_for_user, mentioned_id as i32);
|
||||
|
||||
pub fn get_mentioned(&self, conn: &PgConnection) -> Option<User> {
|
||||
|
@ -54,21 +58,50 @@ impl Mention {
|
|||
let mentioned = User::find_by_ap_url(conn, ment.link_props.href_string().unwrap()).unwrap();
|
||||
|
||||
if let Some(post) = Post::find_by_ap_url(conn, inside.clone().into()) {
|
||||
Some(Mention::insert(conn, NewMention {
|
||||
let res = Some(Mention::insert(conn, NewMention {
|
||||
mentioned_id: mentioned.id,
|
||||
post_id: Some(post.id),
|
||||
comment_id: None
|
||||
}))
|
||||
comment_id: None,
|
||||
ap_url: ment.link_props.href_string().unwrap_or(String::new())
|
||||
}));
|
||||
Mention::notify(conn, ment, Id::new(String::new()));
|
||||
res
|
||||
} else {
|
||||
if let Some(comment) = Comment::find_by_ap_url(conn, inside.into()) {
|
||||
Some(Mention::insert(conn, NewMention {
|
||||
let res =Some(Mention::insert(conn, NewMention {
|
||||
mentioned_id: mentioned.id,
|
||||
post_id: None,
|
||||
comment_id: Some(comment.id)
|
||||
}))
|
||||
comment_id: Some(comment.id),
|
||||
ap_url: ment.link_props.href_string().unwrap_or(String::new())
|
||||
}));
|
||||
Mention::notify(conn, ment, Id::new(String::new()));
|
||||
res
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Notify<link::Mention> for Mention {
|
||||
fn notify(conn: &PgConnection, ment: link::Mention, _actor: Id) {
|
||||
match Mention::find_by_ap_url(conn, ment.link_props.href_string().unwrap()) {
|
||||
Some(mention) => {
|
||||
let author = mention.get_comment(conn)
|
||||
.map(|c| c.get_author(conn).display_name.clone())
|
||||
.unwrap_or(mention.get_post(conn).unwrap().get_authors(conn)[0].display_name.clone());
|
||||
|
||||
mention.get_mentioned(conn).map(|m| {
|
||||
Notification::insert(conn, NewNotification {
|
||||
title: "{{ data }} mentioned you.".to_string(),
|
||||
data: Some(author),
|
||||
content: None,
|
||||
link: Some(mention.get_post(conn).map(|p| p.ap_url).unwrap_or(mention.get_comment(conn).unwrap().ap_url.unwrap_or(String::new()))),
|
||||
user_id: m.id
|
||||
});
|
||||
});
|
||||
},
|
||||
None => println!("Couldn't find mention by AP URL, to create a new notification")
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ table! {
|
|||
mentioned_id -> Int4,
|
||||
post_id -> Nullable<Int4>,
|
||||
comment_id -> Nullable<Int4>,
|
||||
ap_url -> Varchar,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue