From 49362f54049a357e52cd6c57d2aa20d33add3307 Mon Sep 17 00:00:00 2001 From: default Date: Sun, 21 May 2023 20:32:23 +0200 Subject: Convert image links in notes to attachments. --- format.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'format.c') diff --git a/format.c b/format.c index 14508b9..5eec404 100644 --- a/format.c +++ b/format.c @@ -3,6 +3,7 @@ #include "xs.h" #include "xs_regex.h" +#include "xs_mime.h" #include "snac.h" @@ -38,7 +39,7 @@ struct { }; -static xs_str *format_line(const char *line) +static xs_str *format_line(const char *line, xs_list **attach) /* formats a line */ { xs_str *s = xs_str_new(NULL); @@ -73,8 +74,24 @@ static xs_str *format_line(const char *line) else if (xs_startswith(v, "http")) { xs *v2 = xs_strip_chars_i(xs_dup(v), "."); - xs *s1 = xs_fmt("%s", v2, v); - s = xs_str_cat(s, s1); + + const char *mime = xs_mime_by_ext(v2); + + if (attach != NULL && xs_startswith(mime, "image/")) { + /* if it's a link to an image, insert it as an attachment */ + 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 { + xs *s1 = xs_fmt("%s", v2, v); + s = xs_str_cat(s, s1); + } } else s = xs_str_cat(s, v); @@ -90,7 +107,7 @@ static xs_str *format_line(const char *line) } -xs_str *not_really_markdown(const char *content) +xs_str *not_really_markdown(const char *content, xs_list **attach) /* formats a content using some Markdown rules */ { xs_str *s = xs_str_new(NULL); @@ -119,7 +136,7 @@ xs_str *not_really_markdown(const char *content) if (in_pre) ss = xs_dup(v); else - ss = xs_strip_i(format_line(v)); + ss = xs_strip_i(format_line(v, attach)); if (xs_startswith(ss, ">")) { /* delete the > and subsequent spaces */ -- cgit v1.2.3