summaryrefslogtreecommitdiff
path: root/html.c
diff options
context:
space:
mode:
authordefault <nobody@localhost>2024-01-24 19:30:01 +0100
committerdefault <nobody@localhost>2024-01-24 19:30:01 +0100
commit5b3a2fbd88aad1cf6f108a8a4943c9f106d04deb (patch)
tree78927892b931901aeaab4782bcf54210df427b24 /html.c
parent08898af45c3ec5f212af873998c7f7c61091031f (diff)
Use get_attachments() in html_entry().
Diffstat (limited to 'html.c')
-rw-r--r--html.c138
1 files changed, 18 insertions, 120 deletions
diff --git a/html.c b/html.c
index 0d5220e..444a53d 100644
--- a/html.c
+++ b/html.c
@@ -1643,28 +1643,9 @@ xs_html *html_entry(snac *user, xs_dict *msg, int local,
}
/** attachments **/
- v = xs_dict_get(msg, "attachment");
-
- if (!xs_is_null(v)) { /** attachments **/
- xs *attach = NULL;
-
- /* ensure it's a list */
- if (xs_type(v) == XSTYPE_DICT) {
- attach = xs_list_new();
- attach = xs_list_append(attach, v);
- }
- else
- if (xs_type(v) == XSTYPE_LIST)
- attach = xs_dup(v);
- else
- attach = xs_list_new();
-
- /* does the message have an image? */
- if (xs_type(v = xs_dict_get(msg, "image")) == XSTYPE_DICT) {
- /* add it to the attachment list */
- attach = xs_list_append(attach, v);
- }
+ xs *attach = get_attachments(msg);
+ {
/* make custom css for attachments easier */
xs_html *content_attachments = xs_html_tag("div",
xs_html_attr("class", "snac-content-attachments"));
@@ -1675,152 +1656,69 @@ xs_html *html_entry(snac *user, xs_dict *msg, int local,
xs_list *p = attach;
while (xs_list_iter(&p, &v)) {
- char *t = xs_dict_get(v, "mediaType");
-
- if (xs_is_null(t))
- t = xs_dict_get(v, "type");
-
- if (xs_is_null(t))
- continue;
-
- char *url = xs_dict_get(v, "url");
- if (xs_is_null(url))
- url = xs_dict_get(v, "href");
- if (xs_is_null(url))
- continue;
-
- /* infer MIME type from non-specific attachments */
- if (xs_list_len(attach) < 2 && xs_match(t, "Link|Document")) {
- char *mt = (char *)xs_mime_by_ext(url);
-
- if (xs_match(mt, "image/*|audio/*|video/*")) /* */
- t = mt;
- }
-
+ char *type = xs_dict_get(v, "type");
+ char *href = xs_dict_get(v, "href");
char *name = xs_dict_get(v, "name");
- if (xs_is_null(name))
- name = xs_dict_get(msg, "name");
- if (xs_is_null(name))
- name = L("No description");
- if (xs_startswith(t, "image/") || strcmp(t, "Image") == 0) {
+ if (xs_startswith(type, "image/") || strcmp(type, "Image") == 0) {
xs_html_add(content_attachments,
xs_html_tag("a",
- xs_html_attr("href", url),
+ xs_html_attr("href", href),
xs_html_attr("target", "_blank"),
xs_html_sctag("img",
xs_html_attr("loading", "lazy"),
- xs_html_attr("src", url),
+ xs_html_attr("src", href),
xs_html_attr("alt", name),
xs_html_attr("title", name))));
}
else
- if (xs_startswith(t, "video/")) {
+ if (xs_startswith(type, "video/")) {
xs_html_add(content_attachments,
xs_html_tag("video",
xs_html_attr("preload", "none"),
xs_html_attr("style", "width: 100%"),
xs_html_attr("class", "snac-embedded-video"),
xs_html_attr("controls", NULL),
- xs_html_attr("src", url),
+ xs_html_attr("src", href),
xs_html_text(L("Video")),
xs_html_text(": "),
xs_html_tag("a",
- xs_html_attr("href", url),
+ xs_html_attr("href", href),
xs_html_text(name))));
}
else
- if (xs_startswith(t, "audio/")) {
+ if (xs_startswith(type, "audio/")) {
xs_html_add(content_attachments,
xs_html_tag("audio",
xs_html_attr("preload", "none"),
xs_html_attr("style", "width: 100%"),
xs_html_attr("class", "snac-embedded-audio"),
xs_html_attr("controls", NULL),
- xs_html_attr("src", url),
+ xs_html_attr("src", href),
xs_html_text(L("Audio")),
xs_html_text(": "),
xs_html_tag("a",
- xs_html_attr("href", url),
+ xs_html_attr("href", href),
xs_html_text(name))));
}
else
- if (strcmp(t, "Link") == 0) {
+ if (strcmp(type, "Link") == 0) {
xs_html_add(content_attachments,
xs_html_tag("p",
xs_html_tag("a",
- xs_html_attr("href", url),
- xs_html_text(url))));
+ xs_html_attr("href", href),
+ xs_html_text(href))));
}
else {
xs_html_add(content_attachments,
xs_html_tag("p",
xs_html_tag("a",
- xs_html_attr("href", url),
+ xs_html_attr("href", href),
xs_html_text(L("Attachment")),
xs_html_text(": "),
- xs_html_text(url))));
- }
- }
- }
-
- /** urls (attachments from Peertube) **/
- v = xs_dict_get(msg, "url");
-
- if (xs_type(v) == XSTYPE_LIST) {
- xs_list *p = v;
- char *url = NULL;
-
- while (url == NULL && xs_list_iter(&p, &v)) {
- if (xs_type(v) == XSTYPE_DICT) {
- char *type = xs_dict_get(v, "type");
-
- if (xs_type(type) == XSTYPE_STRING && strcmp(type, "Link") == 0) {
- char *mtype = xs_dict_get(v, "mediaType");
- xs_list *tag = xs_dict_get(v, "tag");
-
- if (xs_type(mtype) == XSTYPE_STRING &&
- strcmp(mtype, "application/x-mpegURL") == 0 &&
- xs_type(tag) == XSTYPE_LIST) {
- /* now iterate the tag list, looking for a video URL */
- xs_dict *d;
-
- while (url == NULL && xs_list_iter(&tag, &d)) {
- if (xs_type(d) == XSTYPE_DICT) {
- if (xs_type(mtype = xs_dict_get(d, "mediaType")) == XSTYPE_STRING &&
- xs_startswith(mtype, "video/")) {
-
- /* this is probably it */
- if (xs_type(url = xs_dict_get(d, "href")) != XSTYPE_STRING)
- url = NULL;
- }
- }
- }
- }
- }
+ xs_html_text(href))));
}
}
-
- if (url != NULL) {
- xs_html *content_attachments = xs_html_tag("div",
- xs_html_attr("class", "snac-content-attachments"));
-
- xs_html_add(snac_content,
- content_attachments);
-
- xs_html_add(content_attachments,
- xs_html_tag("video",
- xs_html_attr("preload", "none"),
- xs_html_attr("style", "width: 100%"),
- xs_html_attr("class", "snac-embedded-video"),
- xs_html_attr("controls", NULL),
- xs_html_attr("src", url),
- xs_html_text(L("Video")),
- xs_html_text(": "),
- xs_html_tag("a",
- xs_html_attr("href", url),
- xs_html_text("---"))));
- }
}
/* has this message an audience (i.e., comes from a channel or community)? */