commit 6878e3fc939c3dac9853a3a33bfab7a289c7648b
parent 136b7c1581ae6e4aac4a1e4fa04340eb9aab7943
Author: grunfink <grunfink@comam.es>
Date: Sat, 3 May 2025 18:55:10 +0200
Also add direct and markdown links in posts as attachments.
Diffstat:
2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/format.c b/format.c
@@ -154,10 +154,22 @@ static xs_str *format_line(const char *line, xs_list **attach)
xs *l = xs_split_n(w, "](", 1);
if (xs_list_len(l) == 2) {
- xs *link = xs_fmt("<a href=\"%s\">%s</a>",
- xs_list_get(l, 1), xs_list_get(l, 0));
+ const char *name = xs_list_get(l, 0);
+ const char *url = xs_list_get(l, 1);
+
+ xs *link = xs_fmt("<a href=\"%s\">%s</a>", url, name);
s = xs_str_cat(s, link);
+
+ /* also add the link as an attachment */
+ xs *d = xs_dict_new();
+
+ d = xs_dict_append(d, "mediaType", "text/html");
+ d = xs_dict_append(d, "url", url);
+ d = xs_dict_append(d, "name", name);
+ d = xs_dict_append(d, "type", "Link");
+
+ *attach = xs_list_append(*attach, d);
}
else
s = xs_str_cat(s, v);
@@ -208,6 +220,7 @@ static xs_str *format_line(const char *line, xs_list **attach)
}
else
if (xs_str_in(v, ":/" "/") != -1) {
+ /* direct URLs in the post body */
xs *u = xs_replace_i(xs_replace(v, "#", "#"), "@", "@");
xs *v2 = xs_strip_chars_i(xs_dup(u), ".,)");
@@ -240,6 +253,16 @@ static xs_str *format_line(const char *line, xs_list **attach)
else {
xs *s1 = xs_fmt("<a href=\"%s\" target=\"_blank\">%s</a>", v2, u);
s = xs_str_cat(s, s1);
+
+ /* also add the link as an attachment */
+ xs *d = xs_dict_new();
+
+ d = xs_dict_append(d, "mediaType", "text/html");
+ d = xs_dict_append(d, "url", v2);
+ d = xs_dict_append(d, "name", "");
+ d = xs_dict_append(d, "type", "Link");
+
+ *attach = xs_list_append(*attach, d);
}
}
else
diff --git a/html.c b/html.c
@@ -2388,7 +2388,7 @@ xs_html *html_entry(snac *user, xs_dict *msg, int read_only,
const char *o_href = xs_dict_get(a, "href");
const char *name = xs_dict_get(a, "name");
- /* if this image is already in the post content, skip */
+ /* if this URL is already in the post content, skip */
if (content && xs_str_in(content, o_href) != -1)
continue;