commit 49134582055a174951b23314170ec42c33796325
parent 4c23d1f86e4844d6d8e88a41a65ce0a8a9c50ad1
Author: default <nobody@localhost>
Date: Mon, 17 Mar 2025 08:18:41 +0100
mastoapi: added support for /api/v1/custom_emojis (contributed by violette).
Diffstat:
3 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/format.c b/format.c
@@ -94,6 +94,7 @@ static xs_str *format_line(const char *line, xs_list **attach)
"`[^`]+`" "|"
"~~[^~]+~~" "|"
"\\*\\*?\\*?[^\\*]+\\*?\\*?\\*" "|"
+ ":.+:" "|" //emotes
"_[^_]+_" "|" //anzu
"__[^_]+__" "|" //anzu
"!\\[[^]]+\\]\\([^\\)]+\\)" "|"
diff --git a/html.c b/html.c
@@ -92,6 +92,7 @@ xs_str *replace_shortnames(xs_str *s, const xs_list *tag, int ems, const char *p
xs_html *img = xs_html_sctag("img",
xs_html_attr("loading", "lazy"),
xs_html_attr("src", url),
+ xs_html_attr("alt", n),
xs_html_attr("style", style));
xs *s1 = xs_html_render(img);
diff --git a/mastoapi.c b/mastoapi.c
@@ -2116,8 +2116,25 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
}
else
if (strcmp(cmd, "/v1/custom_emojis") == 0) { /** **/
- /* are you kidding me? */
- *body = xs_dup("[]");
+ xs *emo = emojis();
+ xs *list = xs_list_new();
+ int c = 0;
+ const xs_str *k;
+ const xs_val *v;
+ while(xs_dict_next(emo, &k, &v, &c)) {
+ xs *current = xs_dict_new();
+ if (xs_startswith(v, "https://") && xs_startswith((xs_mime_by_ext(v)), "image/")) {
+ /* remove first and last colon */
+ char *shortcode = (char *)k;
+ shortcode[strlen(k) - 1] = '\0';
+ current = xs_dict_append(current, "shortcode", shortcode + 1);
+ current = xs_dict_append(current, "url", v);
+ current = xs_dict_append(current, "static_url", v);
+ current = xs_dict_append(current, "visible_in_picker", xs_stock(XSTYPE_TRUE));
+ list = xs_list_append(list, current);
+ }
+ }
+ *body = xs_json_dumps(list, 0);
*ctype = "application/json";
status = HTTP_STATUS_OK;
}