Slon/Api/{V1,V2}/Media: Implement PUT /api/v1/media, POST /api/v2/media

This commit is contained in:
Alec Murphy
2025-03-01 19:46:13 -05:00
parent 95aecb9fb1
commit b104551bbd
9 changed files with 284 additions and 3 deletions

21
Slon/Api/V1/Media.HC Normal file
View File

@@ -0,0 +1,21 @@
U0 @slon_api_v1_media_put(SlonHttpSession* session)
{
SLON_SCRATCH_BUFFER_AND_REQUEST_JSON
no_warn scratch_buffer;
if (@slon_api_authorized(session)) {
if (session->path_count() < 4) {
session->status(400);
return;
}
U8* id = session->path(3);
if (db->o("media")->@(id)) {
db->o("media")->o(id)->set("description", request_json->@("description"), JSON_STRING);
session->send(db->o("media")->o(id));
} else {
session->status(404);
}
} else {
session->status(401);
}
}

View File

@@ -256,6 +256,7 @@ U0 @slon_api_v1_statuses_post(SlonHttpSession* session)
// IceCubesApp lets us post with +: media_attachments, replies_count, spoiler_text, sensitive
JsonObject* status = Json.CreateObject();
JsonArray* media_attachments = NULL;
status->set("id", id, JSON_STRING);
status->set("created_at", created_at, JSON_STRING);
status->set("content", request_json->@("status"), JSON_STRING);
@@ -269,7 +270,19 @@ U0 @slon_api_v1_statuses_post(SlonHttpSession* session)
status->set("emojis", SLON_EMPTY_JSON_ARRAY, JSON_ARRAY);
status->set("tags", SLON_EMPTY_JSON_ARRAY, JSON_ARRAY);
status->set("mentions", SLON_EMPTY_JSON_ARRAY, JSON_ARRAY);
status->set("media_attachments", SLON_EMPTY_JSON_ARRAY, JSON_ARRAY);
if (request_json->@("media_ids") && request_json->a("media_ids")->length) {
I64 i;
media_attachments = Json.CreateArray();
for (i = 0; i < request_json->a("media_ids")->length; i++) {
U8* media_id = request_json->a("media_ids")->@(i);
if (media_id && db->o("media")->o(media_id)) {
media_attachments->append(Json.CreateItem(db->o("media")->o(media_id), JSON_OBJECT));
}
}
status->set("media_attachments", media_attachments, JSON_ARRAY);
} else {
status->set("media_attachments", SLON_EMPTY_JSON_ARRAY, JSON_ARRAY);
}
status->set("replies_count", 0, JSON_NUMBER);
status->set("spoiler_text", "", JSON_STRING);
status->set("sensitive", sensitive, JSON_BOOLEAN);
@@ -292,6 +305,9 @@ U0 @slon_api_v1_statuses_post(SlonHttpSession* session)
session->send(status);
if (media_attachments) {
Json.Delete(media_attachments);
}
Json.Delete(status_app);
Json.Delete(account_object);
Json.Delete(app_object);