From b487e381e8a98f438c86899aeea260bf630c1a6e Mon Sep 17 00:00:00 2001 From: Alec Murphy Date: Fri, 28 Feb 2025 10:21:02 -0500 Subject: [PATCH] Slon/Modules/ActivityPub: Associate replies with known statuses --- Slon/Modules/ActivityPub.HC | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Slon/Modules/ActivityPub.HC b/Slon/Modules/ActivityPub.HC index 374df84..9e25a9b 100644 --- a/Slon/Modules/ActivityPub.HC +++ b/Slon/Modules/ActivityPub.HC @@ -628,6 +628,22 @@ JsonObject* @slon_activitypub_get_account_for_remote_actor(SlonHttpSession* sess return account; } +U8* @slon_activitypub_status_id_by_uri(U8* uri, JsonArray* statuses) +{ + if (!uri || !statuses) { + return NULL; + } + I64 i; + JsonObject* status; + for (i = 0; i < statuses->length; i++) { + status = statuses->@(i); + if (status->@("uri") && !StrICmp(status->@("uri"), uri)) { + return status->@("id"); + } + } + return NULL; +} + U0 @slon_activitypub_users_inbox(SlonHttpSession* session, U8* user) { SLON_SCRATCH_BUFFER_AND_REQUEST_JSON @@ -790,6 +806,13 @@ U0 @slon_activitypub_users_inbox(SlonHttpSession* session, U8* user) } } + if (request_json->o("object")->@("inReplyTo") || request_json->o("object")->@("inReplyToAtomUri")) { + U8* reply_to_post_id = @slon_activitypub_status_id_by_uri(request_json->o("object")->@("inReplyTo"), db->o("timelines")->o("home")->a(account->@("id"))); + if (reply_to_post_id) { + new_status->set("in_reply_to_id", reply_to_post_id, JSON_STRING); + } + } + new_status->set("id", id, JSON_STRING); new_status->set("created_at", request_json->@("published"), JSON_STRING); new_status->set("content", request_json->o("object")->@("content"), JSON_STRING);