Slon/Modules/ActivityPub: Associate replies with known statuses

This commit is contained in:
Alec Murphy 2025-02-28 10:21:02 -05:00
parent 2f879bc9ef
commit b487e381e8

View file

@ -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);