diff --git a/html.c b/html.c index dc5ee19..f49274e 100644 --- a/html.c +++ b/html.c @@ -37,91 +37,110 @@ int login(snac *snac, char *headers) } +d_char *html_actor_icon(snac *snac, d_char *os, char *actor, char *date, char *url, int priv) +{ + xs *s = xs_str_new(NULL); + + xs *name = NULL; + xs *avatar = NULL; + char *p, *v; + + /* get the name */ + if (xs_is_null((v = xs_dict_get(actor, "name"))) || *v == '\0') { + if (xs_is_null(v = xs_dict_get(actor, "preferredUsername"))) { + v = "user"; + } + } + + name = xs_dup(v); + + /* replace the :shortnames: */ + if (!xs_is_null(p = xs_dict_get(actor, "tag"))) { + /* iterate the tags */ + while (xs_list_iter(&p, &v)) { + char *t = xs_dict_get(v, "type"); + + if (t && strcmp(t, "Emoji") == 0) { + char *n = xs_dict_get(v, "name"); + char *i = xs_dict_get(v, "icon"); + + if (n && i) { + char *u = xs_dict_get(i, "url"); + xs *img = xs_fmt("", u); + + name = xs_replace_i(name, n, img); + } + } + } + } + + /* get the avatar */ + if ((v = xs_dict_get(actor, "icon")) != NULL && + (v = xs_dict_get(v, "url")) != NULL) { + avatar = xs_dup(v); + } + + if (avatar == NULL) + avatar = xs_fmt("data:image/png;base64, %s", susie); + + { + xs *s1 = xs_fmt("

\"\"/\n", avatar); + s = xs_str_cat(s, s1); + } + + { + xs *s1 = xs_fmt("%s", + xs_dict_get(actor, "id"), name); + s = xs_str_cat(s, s1); + } + + if (!xs_is_null(url)) { + xs *s1 = xs_fmt(" »", url); + s = xs_str_cat(s, s1); + } + + if (priv) + s = xs_str_cat(s, " 🔒"); + + if (xs_is_null(date)) { + s = xs_str_cat(s, "
\n \n"); + } + else { + xs *sd = xs_crop(xs_dup(date), 0, 10); + xs *s1 = xs_fmt( + "
\n\n", sd); + + s = xs_str_cat(s, s1); + } + + return xs_str_cat(os, s); +} + + d_char *html_msg_icon(snac *snac, d_char *os, char *msg) { char *actor_id; xs *actor = NULL; - xs *s = xs_str_new(NULL); - if ((actor_id = xs_dict_get(msg, "attributedTo")) == NULL) actor_id = xs_dict_get(msg, "actor"); if (actor_id && valid_status(actor_get(snac, actor_id, &actor))) { - xs *name = NULL; - xs *avatar = NULL; - char *p, *v; + char *date = NULL; + char *url = NULL; + int priv = 0; - /* get the name */ - if (xs_is_null((v = xs_dict_get(actor, "name"))) || *v == '\0') { - if (xs_is_null(v = xs_dict_get(actor, "preferredUsername"))) { - v = "user"; - } - } + if (strcmp(xs_dict_get(msg, "type"), "Note") == 0) + url = xs_dict_get(msg, "id"); - name = xs_dup(v); + priv = !is_msg_public(snac, msg); - /* replace the :shortnames: */ - if (!xs_is_null(p = xs_dict_get(actor, "tag"))) { - /* iterate the tags */ - while (xs_list_iter(&p, &v)) { - char *t = xs_dict_get(v, "type"); + date = xs_dict_get(msg, "published"); - if (t && strcmp(t, "Emoji") == 0) { - char *n = xs_dict_get(v, "name"); - char *i = xs_dict_get(v, "icon"); - - if (n && i) { - char *u = xs_dict_get(i, "url"); - xs *img = xs_fmt("", u); - - name = xs_replace_i(name, n, img); - } - } - } - } - - /* get the avatar */ - if ((v = xs_dict_get(actor, "icon")) != NULL && - (v = xs_dict_get(v, "url")) != NULL) { - avatar = xs_dup(v); - } - - if (avatar == NULL) - avatar = xs_fmt("data:image/png;base64, %s", susie); - - { - xs *s1 = xs_fmt("

\"\"/\n", avatar); - s = xs_str_cat(s, s1); - } - - { - xs *s1 = xs_fmt("%s", - actor_id, name); - s = xs_str_cat(s, s1); - } - - if (strcmp(xs_dict_get(msg, "type"), "Note") == 0) { - xs *s1 = xs_fmt(" »", xs_dict_get(msg, "id")); - s = xs_str_cat(s, s1); - } - - if (!is_msg_public(snac, msg)) - s = xs_str_cat(s, " 🔒"); - - if ((v = xs_dict_get(msg, "published")) == NULL) { - s = xs_str_cat(s, "
\n\n"); - } - else { - xs *sd = xs_crop(xs_dup(v), 0, 10); - xs *s1 = xs_fmt( - "
\n\n", sd); - - s = xs_str_cat(s, s1); - } + os = html_actor_icon(snac, os, actor, date, url, priv); } - return xs_str_cat(os, s); + return os; }