Fix issues with tags and mentions

Fix issue where leading @ or # of a mention/hashtag get duplicated
Fix issue where normal tags were being overwritten by hashtags
This commit is contained in:
Trinity Pointard 2018-12-06 15:10:07 +01:00
parent d6e220cc8d
commit 5f059c3e98
3 changed files with 5 additions and 4 deletions

View file

@ -85,7 +85,6 @@ pub fn md_to_html(md: &str) -> (String, HashSet<String>, HashSet<String>) {
} }
} }
State::Ready => { State::Ready => {
text_acc.push(c);
if c == '@' { if c == '@' {
events.push(Event::Text(text_acc.into())); events.push(Event::Text(text_acc.into()));
(events, State::Mention, String::new(), n + 1, mentions, hashtags) (events, State::Mention, String::new(), n + 1, mentions, hashtags)
@ -93,11 +92,13 @@ pub fn md_to_html(md: &str) -> (String, HashSet<String>, HashSet<String>) {
events.push(Event::Text(text_acc.into())); events.push(Event::Text(text_acc.into()));
(events, State::Hashtag, String::new(), n + 1, mentions, hashtags) (events, State::Hashtag, String::new(), n + 1, mentions, hashtags)
} else if c.is_alphanumeric() { } else if c.is_alphanumeric() {
text_acc.push(c);
if n >= (txt.chars().count() - 1) { // Add the text after at the end, even if it is not followed by a mention. if n >= (txt.chars().count() - 1) { // Add the text after at the end, even if it is not followed by a mention.
events.push(Event::Text(text_acc.clone().into())) events.push(Event::Text(text_acc.clone().into()))
} }
(events, State::Word, text_acc, n + 1, mentions, hashtags) (events, State::Word, text_acc, n + 1, mentions, hashtags)
} else { } else {
text_acc.push(c);
if n >= (txt.chars().count() - 1) { // Add the text after at the end, even if it is not followed by a mention. if n >= (txt.chars().count() - 1) { // Add the text after at the end, even if it is not followed by a mention.
events.push(Event::Text(text_acc.clone().into())) events.push(Event::Text(text_acc.clone().into()))
} }

View file

@ -719,7 +719,7 @@ impl Post {
} }
} }
for ot in old_tags { for ot in old_tags.iter().filter(|t| !t.is_hashtag) {
if !tags_name.contains(&ot.tag) { if !tags_name.contains(&ot.tag) {
ot.delete(conn); ot.delete(conn);
} }
@ -756,7 +756,7 @@ impl Post {
} }
} }
for ot in old_tags { for ot in old_tags.into_iter().filter(|t| t.is_hashtag) {
if !tags_name.contains(&ot.tag) { if !tags_name.contains(&ot.tag) {
ot.delete(conn); ot.delete(conn);
} }

View file

@ -231,7 +231,7 @@ fn update(blog: String, slug: String, user: User, conn: DbConn, data: LenientFor
let hashtags = hashtags.into_iter().map(|h| h.to_camel_case()).collect::<HashSet<_>>() let hashtags = hashtags.into_iter().map(|h| h.to_camel_case()).collect::<HashSet<_>>()
.into_iter().map(|t| Tag::build_activity(&conn, t)).collect::<Vec<_>>(); .into_iter().map(|t| Tag::build_activity(&conn, t)).collect::<Vec<_>>();
post.update_tags(&conn, hashtags); post.update_hashtags(&conn, hashtags);
if post.published { if post.published {
if newly_published { if newly_published {