fix: store in_reply_to on remote notes + use full handle in federation component links/actions

This commit is contained in:
2026-05-15 05:09:44 +02:00
parent e04b08c202
commit 09bebf7dc9
8 changed files with 28 additions and 8 deletions

View File

@@ -144,6 +144,7 @@ impl ApObjectHandler for ThoughtsObjectHandler {
note.sensitive,
note.summary,
visibility,
note.in_reply_to.as_ref(),
)
.await
.map_err(|e| anyhow!("{e}"))

View File

@@ -218,11 +218,24 @@ impl ActivityPubRepository for PgActivityPubRepository {
sensitive: bool,
content_warning: Option<String>,
visibility: &str,
in_reply_to: Option<&Url>,
) -> Result<(), DomainError> {
let capped: String = content.chars().take(500).collect();
let (in_reply_to_id, in_reply_to_url) = match in_reply_to {
Some(url) => {
// If the parent is a local thought, extract its UUID for in_reply_to_id.
let local_uuid = url
.path()
.strip_prefix("/thoughts/")
.and_then(|s| s.split('/').next())
.and_then(|s| uuid::Uuid::parse_str(s).ok());
(local_uuid, Some(url.as_str().to_string()))
}
None => (None, None),
};
sqlx::query(
"INSERT INTO thoughts(id,user_id,content,ap_id,visibility,sensitive,local,content_warning,created_at)
VALUES($1,$2,$3,$4,$8,$5,false,$6,$7) ON CONFLICT(ap_id) DO NOTHING",
"INSERT INTO thoughts(id,user_id,content,ap_id,visibility,sensitive,local,content_warning,created_at,in_reply_to_id,in_reply_to_url)
VALUES($1,$2,$3,$4,$8,$5,false,$6,$7,$9,$10) ON CONFLICT(ap_id) DO NOTHING",
)
.bind(uuid::Uuid::new_v4())
.bind(author_id.as_uuid())
@@ -232,6 +245,8 @@ impl ActivityPubRepository for PgActivityPubRepository {
.bind(content_warning)
.bind(published)
.bind(visibility)
.bind(in_reply_to_id)
.bind(&in_reply_to_url)
.execute(&self.pool)
.await
.map_err(|e| DomainError::Internal(e.to_string()))

View File

@@ -173,6 +173,7 @@ impl FederationEventService {
note.sensitive,
note.content_warning,
"public",
None,
)
.await;
}

View File

@@ -391,6 +391,7 @@ pub trait ActivityPubRepository: Send + Sync {
sensitive: bool,
content_warning: Option<String>,
visibility: &str,
in_reply_to: Option<&url::Url>,
) -> Result<(), DomainError>;
/// Apply an Update to a previously accepted remote Note.

View File

@@ -847,6 +847,7 @@ impl ActivityPubRepository for TestStore {
_sensitive: bool,
_content_warning: Option<String>,
_visibility: &str,
_in_reply_to: Option<&url::Url>,
) -> Result<(), DomainError> {
Ok(())
}