Skip to content

Commit

Permalink
Automatically include apub hashtag with posts (fixes #3906)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nutomic committed Mar 14, 2024
1 parent 255e695 commit 3c63a91
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
8 changes: 7 additions & 1 deletion crates/apub/src/objects/post.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::{
objects::{read_from_string_or_source_opt, verify_is_remote_object},
protocol::{
objects::{
page::{Attachment, AttributedTo, Page, PageType},
page::{Attachment, AttributedTo, Hashtag, HashtagType, Page, PageType},
LanguageTag,
},
ImageObject,
Expand Down Expand Up @@ -124,6 +124,11 @@ impl Object for ApubPost {
})
.into_iter()
.collect();
let hashtag = Hashtag {
href: self.ap_id.clone().into(),
name: format!("#{}", &community.name),
kind: HashtagType::Hashtag,
};

let page = Page {
kind: PageType::Page,
Expand All @@ -144,6 +149,7 @@ impl Object for ApubPost {
updated: self.updated,
audience: Some(community.actor_id.into()),
in_reply_to: None,
tag: vec![hashtag],
};
Ok(page)
}
Expand Down
15 changes: 15 additions & 0 deletions crates/apub/src/protocol/objects/page.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ pub struct Page {
pub(crate) updated: Option<DateTime<Utc>>,
pub(crate) language: Option<LanguageTag>,
pub(crate) audience: Option<ObjectId<ApubCommunity>>,
#[serde(deserialize_with = "deserialize_skip_error", default)]
pub(crate) tag: Vec<Hashtag>,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
Expand Down Expand Up @@ -140,6 +142,19 @@ pub(crate) struct AttributedToPeertube {
pub id: ObjectId<UserOrCommunity>,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Hashtag {
pub(crate) href: Url,
pub(crate) name: String,
#[serde(rename = "type")]
pub(crate) kind: HashtagType,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
pub enum HashtagType {
Hashtag,
}

impl Page {
/// Only mods can change the post's locked status. So if it is changed from the default value,
/// it is a mod action and needs to be verified as such.
Expand Down

0 comments on commit 3c63a91

Please sign in to comment.