mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-25 14:35:04 +00:00
Added mastoapi support for adding images.
This commit is contained in:
parent
70aea72b95
commit
73e7195e6c
1 changed files with 70 additions and 0 deletions
70
mastoapi.c
70
mastoapi.c
|
@ -1271,6 +1271,10 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
|
|||
const char *mid = xs_dict_get(args, "in_reply_to_id");
|
||||
const char *visibility = xs_dict_get(args, "visibility");
|
||||
const char *summary = xs_dict_get(args, "spoiler_text");
|
||||
const char *media_ids = xs_dict_get(args, "media_ids");
|
||||
|
||||
if (xs_is_null(media_ids))
|
||||
media_ids = xs_dict_get(args, "media_ids[]");
|
||||
|
||||
xs *attach_list = xs_list_new();
|
||||
xs *irt = NULL;
|
||||
|
@ -1284,6 +1288,31 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
|
|||
irt = xs_dup(xs_dict_get(r_msg, "id"));
|
||||
}
|
||||
|
||||
/* does it have attachments? */
|
||||
if (!xs_is_null(media_ids)) {
|
||||
xs *mi = NULL;
|
||||
|
||||
if (xs_type(media_ids) == XSTYPE_LIST)
|
||||
mi = xs_dup(media_ids);
|
||||
else {
|
||||
mi = xs_list_new();
|
||||
mi = xs_list_append(mi, media_ids);
|
||||
}
|
||||
|
||||
xs_list *p = mi;
|
||||
xs_str *v;
|
||||
|
||||
while (xs_list_iter(&p, &v)) {
|
||||
xs *l = xs_list_new();
|
||||
xs *url = xs_fmt("%s/s/%s", snac.actor, v);
|
||||
|
||||
l = xs_list_append(l, url);
|
||||
l = xs_list_append(l, "");
|
||||
|
||||
attach_list = xs_list_append(attach_list, l);
|
||||
}
|
||||
}
|
||||
|
||||
/* prepare the message */
|
||||
xs *msg = msg_note(&snac, content, NULL, irt, attach_list,
|
||||
strcmp(visibility, "public") == 0 ? 0 : 1);
|
||||
|
@ -1444,6 +1473,47 @@ int mastoapi_post_handler(const xs_dict *req, const char *q_path,
|
|||
else
|
||||
if (strcmp(cmd, "/v1/media") == 0 || strcmp(cmd, "/v2/media") == 0) {
|
||||
if (logged_in) {
|
||||
/* {
|
||||
xs *j = xs_json_dumps_pp(args, 4);
|
||||
printf("%s\n", j);
|
||||
}*/
|
||||
const xs_list *file = xs_dict_get(args, "file");
|
||||
const char *desc = xs_dict_get(args, "description");
|
||||
|
||||
if (xs_is_null(desc))
|
||||
desc = "";
|
||||
|
||||
status = 400;
|
||||
|
||||
if (xs_type(file) == XSTYPE_LIST) {
|
||||
const char *fn = xs_list_get(file, 0);
|
||||
|
||||
if (*fn != '\0') {
|
||||
char *ext = strrchr(fn, '.');
|
||||
xs *hash = xs_md5_hex(fn, strlen(fn));
|
||||
xs *id = xs_fmt("%s%s", hash, ext);
|
||||
xs *url = xs_fmt("%s/s/%s", snac.actor, id);
|
||||
int fo = xs_number_get(xs_list_get(file, 1));
|
||||
int fs = xs_number_get(xs_list_get(file, 2));
|
||||
|
||||
/* store */
|
||||
static_put(&snac, id, payload + fo, fs);
|
||||
|
||||
/* prepare a response */
|
||||
xs *rsp = xs_dict_new();
|
||||
|
||||
rsp = xs_dict_append(rsp, "id", id);
|
||||
rsp = xs_dict_append(rsp, "type", "image");
|
||||
rsp = xs_dict_append(rsp, "url", url);
|
||||
rsp = xs_dict_append(rsp, "preview_url", url);
|
||||
rsp = xs_dict_append(rsp, "remote_url", url);
|
||||
rsp = xs_dict_append(rsp, "description", desc);
|
||||
|
||||
*body = xs_json_dumps_pp(rsp, 4);
|
||||
*ctype = "application/json";
|
||||
status = 200;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
status = 401;
|
||||
|
|
Loading…
Reference in a new issue