feat(ap): add hashtag tag array to outbound Notes
This commit is contained in:
@@ -46,6 +46,26 @@ fn content_to_html(text: &str) -> String {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn extract_hashtag_tags(content: &str, base_url: &str) -> Vec<serde_json::Value> {
|
||||||
|
let mut seen = std::collections::HashSet::new();
|
||||||
|
let mut tags = Vec::new();
|
||||||
|
for word in content.split_whitespace() {
|
||||||
|
let tag = word.trim_matches(|c: char| !c.is_alphanumeric() && c != '#');
|
||||||
|
if let Some(name) = tag.strip_prefix('#')
|
||||||
|
&& !name.is_empty()
|
||||||
|
&& seen.insert(name.to_lowercase())
|
||||||
|
{
|
||||||
|
let lower = name.to_lowercase();
|
||||||
|
tags.push(serde_json::json!({
|
||||||
|
"type": "Hashtag",
|
||||||
|
"name": format!("#{}", lower),
|
||||||
|
"href": format!("{}/tags/{}", base_url, lower),
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tags
|
||||||
|
}
|
||||||
|
|
||||||
fn thought_note_json(
|
fn thought_note_json(
|
||||||
thought: &domain::models::thought::Thought,
|
thought: &domain::models::thought::Thought,
|
||||||
local_actor: &crate::actors::DbActor,
|
local_actor: &crate::actors::DbActor,
|
||||||
@@ -89,6 +109,10 @@ fn thought_note_json(
|
|||||||
if let Some(updated_at) = thought.updated_at {
|
if let Some(updated_at) = thought.updated_at {
|
||||||
note["updated"] = serde_json::json!(updated_at.to_rfc3339());
|
note["updated"] = serde_json::json!(updated_at.to_rfc3339());
|
||||||
}
|
}
|
||||||
|
let hashtag_tags = extract_hashtag_tags(thought.content.as_str(), base_url);
|
||||||
|
if !hashtag_tags.is_empty() {
|
||||||
|
note["tag"] = serde_json::json!(hashtag_tags);
|
||||||
|
}
|
||||||
Ok((ap_id, note))
|
Ok((ap_id, note))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user