Avoid adding repeated attachments.

This commit is contained in:
default 2024-12-19 10:05:11 +01:00
parent bde5748a6e
commit 13d4fde316
2 changed files with 56 additions and 21 deletions

View file

@ -1476,20 +1476,31 @@ xs_dict *msg_note(snac *snac, const xs_str *content, const xs_val *rcpts,
/* create the attachment list, if there are any */ /* create the attachment list, if there are any */
if (!xs_is_null(attach)) { if (!xs_is_null(attach)) {
int c = 0; xs_list_foreach(attach, v) {
while (xs_list_next(attach, &v, &c)) {
xs *d = xs_dict_new();
const char *url = xs_list_get(v, 0); const char *url = xs_list_get(v, 0);
const char *alt = xs_list_get(v, 1); const char *alt = xs_list_get(v, 1);
const char *mime = xs_mime_by_ext(url); const char *mime = xs_mime_by_ext(url);
int add = 1;
d = xs_dict_append(d, "mediaType", mime); /* check if it's already here */
d = xs_dict_append(d, "url", url); const xs_dict *ad;
d = xs_dict_append(d, "name", alt); xs_list_foreach(atls, ad) {
d = xs_dict_append(d, "type", if (strcmp(xs_dict_get_def(ad, "url", ""), url) == 0) {
xs_startswith(mime, "image/") ? "Image" : "Document"); add = 0;
break;
}
}
atls = xs_list_append(atls, d); if (add) {
xs *d = xs_dict_new();
d = xs_dict_append(d, "mediaType", mime);
d = xs_dict_append(d, "url", url);
d = xs_dict_append(d, "name", alt);
d = xs_dict_append(d, "type",
xs_startswith(mime, "image/") ? "Image" : "Document");
atls = xs_list_append(atls, d);
}
} }
} }

View file

@ -163,14 +163,26 @@ static xs_str *format_line(const char *line, xs_list **attach)
const char *mime = xs_mime_by_ext(img_url); const char *mime = xs_mime_by_ext(img_url);
if (attach != NULL && xs_startswith(mime, "image/")) { if (attach != NULL && xs_startswith(mime, "image/")) {
xs *d = xs_dict_new(); const xs_dict *ad;
int add = 1;
d = xs_dict_append(d, "mediaType", mime); xs_list_foreach(*attach, ad) {
d = xs_dict_append(d, "url", img_url); if (strcmp(xs_dict_get_def(ad, "url", ""), img_url) == 0) {
d = xs_dict_append(d, "name", alt_text); add = 0;
d = xs_dict_append(d, "type", "Image"); break;
}
}
*attach = xs_list_append(*attach, d); if (add) {
xs *d = xs_dict_new();
d = xs_dict_append(d, "mediaType", mime);
d = xs_dict_append(d, "url", img_url);
d = xs_dict_append(d, "name", alt_text);
d = xs_dict_append(d, "type", "Image");
*attach = xs_list_append(*attach, d);
}
} }
else { else {
xs *link = xs_fmt("<a href=\"%s\">%s</a>", img_url, alt_text); xs *link = xs_fmt("<a href=\"%s\">%s</a>", img_url, alt_text);
@ -191,14 +203,26 @@ static xs_str *format_line(const char *line, xs_list **attach)
if (attach != NULL && xs_startswith(mime, "image/")) { if (attach != NULL && xs_startswith(mime, "image/")) {
/* if it's a link to an image, insert it as an attachment */ /* if it's a link to an image, insert it as an attachment */
xs *d = xs_dict_new(); const xs_dict *ad;
int add = 1;
d = xs_dict_append(d, "mediaType", mime); xs_list_foreach(*attach, ad) {
d = xs_dict_append(d, "url", v2); if (strcmp(xs_dict_get_def(ad, "url", ""), v2) == 0) {
d = xs_dict_append(d, "name", ""); add = 0;
d = xs_dict_append(d, "type", "Image"); break;
}
}
*attach = xs_list_append(*attach, d); if (add) {
xs *d = xs_dict_new();
d = xs_dict_append(d, "mediaType", mime);
d = xs_dict_append(d, "url", v2);
d = xs_dict_append(d, "name", "");
d = xs_dict_append(d, "type", "Image");
*attach = xs_list_append(*attach, d);
}
} }
else { else {
xs *s1 = xs_fmt("<a href=\"%s\" target=\"_blank\">%s</a>", v2, u); xs *s1 = xs_fmt("<a href=\"%s\" target=\"_blank\">%s</a>", v2, u);