Detect if tags are hashtags when receiving new posts

This commit is contained in:
Trinity Pointard 2018-10-27 23:51:26 +02:00 committed by Baptiste Gelez
parent 9d7ae694a8
commit f147885f08
2 changed files with 18 additions and 8 deletions

View file

@ -6,14 +6,17 @@ use activitypub::{
use canapi::{Error, Provider};
use chrono::{NaiveDateTime, TimeZone, Utc};
use diesel::{self, RunQueryDsl, QueryDsl, ExpressionMethods, BelongingToDsl};
use heck::KebabCase;
use heck::{CamelCase, KebabCase};
use serde_json;
use plume_api::posts::PostEndpoint;
use plume_common::activity_pub::{
Hashtag, Source,
PUBLIC_VISIBILTY, Id, IntoId,
inbox::{Deletable, FromActivity}
use plume_common::{
activity_pub::{
Hashtag, Source,
PUBLIC_VISIBILTY, Id, IntoId,
inbox::{Deletable, FromActivity}
},
utils::md_to_html
};
use {BASE_URL, ap_url, Connection};
use blogs::Blog;
@ -26,6 +29,7 @@ use tags::Tag;
use users::User;
use schema::posts;
use safe_string::SafeString;
use std::collections::HashSet;
#[derive(Queryable, Identifiable, Serialize, Clone, AsChangeset)]
pub struct Post {
@ -447,6 +451,8 @@ impl FromActivity<Article, Connection> for Post {
}
// save mentions and tags
let mut hashtags = md_to_html(&post.source).2.into_iter().map(|s| s.to_camel_case()).collect::<HashSet<_>>();
println!("{:?}", hashtags);
if let Some(serde_json::Value::Array(tags)) = article.object_props.tag.clone() {
for tag in tags.into_iter() {
serde_json::from_value::<link::Mention>(tag.clone())
@ -454,7 +460,11 @@ impl FromActivity<Article, Connection> for Post {
.ok();
serde_json::from_value::<Hashtag>(tag.clone())
.map(|t| Tag::from_activity(conn, t, post.id))
.map(|t| {
let tag_name = t.name_string().expect("Post::from_activity: tag name error");
println!("{} : {}", tag_name, hashtags.contains(&tag_name));
Tag::from_activity(conn, t, post.id, hashtags.remove(&tag_name));
})
.ok();
}
}

View file

@ -37,10 +37,10 @@ impl Tag {
ht
}
pub fn from_activity(conn: &Connection, tag: Hashtag, post: i32) -> Tag {
pub fn from_activity(conn: &Connection, tag: Hashtag, post: i32, is_hashtag: bool) -> Tag {
Tag::insert(conn, NewTag {
tag: tag.name_string().expect("Tag::from_activity: name error"),
is_hashtag: false,
is_hashtag,
post_id: post
})
}